2013-02-17 2 views
0

Я пытаюсь написать функцию, которая вернет наименьшее значение массива. До сих пор у меня это, но все, что он возвращает, равно 0.наименьшее значение массива

Я не вижу, как он вернет 0, так как я использую цикл for для цикла через массив. Возможно, это не циклическое перемещение по значениям массивов, как я думаю. Может ли кто-нибудь уточнить логику и ошибку в этом коде?

#include <iostream> 

using namespace std; 

int newArray[9] = {4,5,9,3,6,2,1,7,8}; 


int minArray() 
{ 
    int index = 1; 
    int minimum; 

    for (int i = 0; i < 9; i++) 
    { 
     if (newArray[i] > newArray[index]) 
     { 
      minimum = newArray[index]; 
     } 
     index++; 

    } 

    return minimum; 
} 


int main()  
{ 
    cout << "original array:\n "; 
    for (int i = 0; i < 9; i++) 
    { 
     cout << newArray[i] << ", "; 
    } 

    cout << "minimum value of array: "; 
    cout << minArray(); 

    return 0; 
} 
+4

Было бы очень поучительно пройти через программу в отладчике и наблюдать за тем, что происходит на каждом шагу. Я так думаю, вы узнаете намного больше, чем если кто-то отметит все ошибки. – NPE

+0

Подумайте, какие значения вы сравниваете на каждом шаге. Являются ли эти значения, которые вы хотите сравнить? Я бы рекомендовал использовать отладчик или просто попытаться проработать полный цикл кода, операцию по работе, с листом бумаги. –

+0

Кроме того, вы должны инициализировать минимальное значение до известного значения. – OldProgrammer

ответ

1

Хорошей идеей может быть инициализация минимума с помощью элемента в массиве. Итак:

minimum = newArray[0] 

в цикле (псевдокод если вы не хотите ответа):

if: newArray[pos] < minimum 

     minimum = newArray[pos]; 
+0

+1 наиболее подходящий вариант «здесь кодз». – WhozCraig

0

Переменная minimum должна быть первоначально назначена на значение в массиве, а затем сравнить каждый элемент в массиве с minimum. Если меньше, присвоить minimum с этим значением:

int minArray() 
{ 
    int minimum = newArray[0]; 
    int index = 0; 

    for (int i = 0; i < 9; i++) 
    { 
     if (newArray[i] < minimum) 
     { 
      minimum = newArray[i]; 
     } 
     index++; 

    } 
    return minimum; 
} 
0

Я хотел бы сделать что-то вроде этого:

#include <iostream> 

int minArray(int a[], int size) { 
    if (size <= 0) return 0; // 
    int m = a[0]; 
    for (int i = 1; i < size; ++i) { 
     if (a[i] < m) m = a[i]; 
    } 
    return m; 
} 

int main() { 
    int a[] = { 4, 3, 6, 2 }; 
    std::cout << minArray(a, 4); 
    return 0; 
} 
0

Вы должны инициализировать minimum с некоторым известным значением или с максимальным значением целого числа.

int minArray() 
{ 
    int minimum = newArray[0]; 

    for (int i = 1; i < 9; i++) 
    { 
     if (minimum > newArray[i]) 
     { 
      minimum = newArray[i]; 
     } 
    } 

    return minimum; 
} 

И вы имеете дело с неправильным index (на самом деле вам не нужно вообще). Пример того, как index может быть использован вместо minimum:

int minArray() 
{ 
    int index = 0; 

    for (int i = 1; i < 9; i++) 
    { 
     if (newArray[index] > newArray[i]) 
     { 
      index = i; 
     } 
    } 

    return newArray[index]; 
} 

Оба примера должен работать нормально, но я рекомендую использовать первый.