2012-11-26 4 views
7

Я пытаюсь вернуть индекс с наименьшим элементом в массив целых чисел. Я что-то упускаю? После ввода моих целых чисел он не возвращает индекс.Индекс возврата наименьшего элемента в массив

UPDATE: В конце int main() появляется ошибка об повреждении массива. Спасибо. Мой код выглядит следующим образом:

#include <iostream> 
#include <conio.h> 

using namespace std; 

int indexofSmallestElement(double array[], int size); 

int main() 
{  
int size = 10; 
double array[10]; 

for (int i = 0; i <= size; i++) 
{ 
    cout << "Enter an integer: " << endl; 
    cin >> array[i]; 
} 

indexofSmallestElement(array, size); 
} 

int indexofSmallestElement(double array[], int size) 
{ 
int index = 0; 

if (size != 1) 
{ 

    int n = array[0]; 
    for (int i = 1; i < size; i++) 
    { 
     if (array[i] < n) 
     { 
      n = array[i]; 
      index = i; 
     } 
    } 
} 
return index; 
} 
+4

Не должно быть n = array [0], а не наоборот? Поскольку вы хотите сохранить первое число как ваш предполагаемый наименьший элемент, сравните его. – Clark

+0

В дополнение к тому, что сказал @Clark, также обратите внимание, что вы отбрасываете возвращаемое значение indexofSmallestElement и не отображаете его. Также обратите внимание, что ваши циклы используют '<= размер', который * неверен * - вы должны использовать' <размер'. Помните, что в C и C++ массивы начинаются с 0, поэтому, если ваш массив имеет 10 элементов, допустимые индексы равны 0, 1, 2, ..., 9. Кроме того, ваша переменная 'index' может использоваться неинициализированной. Подумайте, что произойдет, когда самый маленький элемент - это первый элемент. –

+0

Вот ваше повреждение стека: 'for (int i = 0; i <= size; i ++)'. Для объяснения должно быть '<' –

ответ

0

внутри массива использования цикла [i] и index = i. Размер является границей :)

3

Это должно быть n = array[0] вместо array[0] = n. Это означает, что вы предполагаете, что первый элемент массива будет самым маленьким в начале, а затем сравним его с другими.

Кроме того, в вашей петле вы превышаете границы своего массива. Цикл for должен работать до i < size, а не i <= size.

Ваш код должен быть таким ..

int indexofSmallestElement(double array[], int size) 
{ 
    int index = 0 ; 
    double n = array[0] ; 
    for (int i = 1; i < size; ++i) 
    { 
    if (array[i] < n) 
    { 
     n = array[i] ; 
     index = i ; 
    } 
    } 
return index; 
} 
14

Ряд людей показал вам свой вариант indexofSmallestElement. Я буду включать шахту вместе с объяснением, почему я думаю, что лучше:

int indexofSmallestElement(double array[], int size) 
{ 
    int index = 0; 

    for(int i = 1; i < size; i++) 
    { 
     if(array[i] < array[index]) 
      index = i;    
    } 

    return index; 
} 

Вы заметите, что я покончит с n переменной, которую вы использовали для хранения наименьшее значение встречается до сих пор. Я сделал это, потому что, по моему опыту, необходимость синхронизировать две разные вещи может быть источником тонких ошибок. Даже в этом простом случае источником было множество ошибок, не последним из которых было то, что ваш n был объявлен int, но вы назначали в нем значения типа double.

Итог: отречься от переменной n и просто отслеживать одну вещь: индекс.

+0

+1. Но проверка на 1 является избыточной - условие цикла не будет выполнено в первом случае, если size = 1. – je4d

+0

Вы, конечно, правы. Я думаю, что это было сделано из копии пасты кода. Исправлена. –

+0

У меня была новая ошибка, которую я поставил в своем оригинальном посте. Я пробовал свой путь, но это не исправить. Это только я? – gosutag

Смежные вопросы