2012-11-26 10 views
7

Ich versuche, den Index mit dem kleinsten Element in einem Array von ganzen Zahlen zurückzugeben. Fehle ich etwas? Nachdem ich meine Ganzzahlen eingegeben habe, wird der Index nicht zurückgegeben.Return-Index des kleinsten Elements im Array

UPDATE: Ich bekomme einen Fehler am Ende von int main() über den Array-Stack, der beschädigt ist. Vielen Dank. Mein Code ist wie folgt:

#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

Sollte es nicht n = Array [0] sein, nicht umgekehrt? Da Sie die erste Zahl als Ihr angenommenes kleinstes Element speichern möchten, vergleichen Sie von dort aus. – Clark

+0

Zusätzlich zu dem, was @ Clark gesagt hat, beachten Sie auch, dass Sie den Rückgabewert von indexofSmallesElement verwerfen und nicht anzeigen. Beachten Sie auch, dass Ihre Schleifen '<= Größe 'verwenden, was * falsch ist * - Sie sollten'

+0

Hier ist Ihr Stack Korruption: 'für (int i = 0; i <= Größe; i ++)'. Sollte '< –

Antwort

0

innerhalb der Schleife verwenden Array [i] und index = i. Größe ist die Grenze :)

3

Es sollte n = array[0] statt array[0] = n sein. Es bedeutet, dass Sie annehmen, dass das erste Element des Arrays am Anfang klein ist und vergleichen Sie es dann mit anderen.

Außerdem überschreiten Sie in Ihrer Schleife die Grenze Ihres Arrays. Die for-Schleife sollte bis i < size und nicht i <= size laufen.

Der Code sollte so sein ..

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

Eine Reihe von Menschen, die Sie ihre Variante indexofSmallestElement gezeigt haben. Ich werde meine zusammen mit einer Erklärung von umfasse warum Ich denke, es ist besser:

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; 
} 

Sie werden feststellen, dass ich tun, weg mit dem n Variable, die Sie den kleinsten Wert bisher begegnet verwendet zu halten. Ich habe das getan, weil nach meiner Erfahrung zwei verschiedene Dinge synchronisiert werden müssen, kann eine Quelle von subtilen Fehlern sein. Selbst in diesem einfachen Fall war es die Quelle mehrere Bugs, nicht zuletzt davon war, dass Ihre n wurde zu einem int deklariert, aber Sie wurden Werte des Typs double in ihm zuweisen.

Bottom line: weg mit der n Variable und nur einen Überblick über eine Sache: den Index.

+0

+1 für Erklärung sein. Aber die Überprüfung auf 1 ist redundant - die Schleifenbedingung wird in der ersten Instanz fehlschlagen, wenn Größe = 1 ist. – je4d

+0

Sie sind natürlich richtig. Ich denke, das war ein Rest von einem Copy-Paste des Codes. Fest. –

+0

Ich hatte einen neuen Fehler, den ich in meinen ursprünglichen Beitrag eingefügt habe. Ich habe es versucht, aber es hat es nicht behoben. Ist es nur ich? – gosutag

Verwandte Themen