De retour de l'indice du plus petit élément dans le tableau
Je suis en train de retourner l'indice du plus petit élément dans un tableau d'entiers. Ai-je raté quelque chose? Après j'ai mis mon entiers, il ne renvoie pas l'index.
Mise à JOUR: j'obtiens une erreur à la fin de int main()
sur le tableau de la pile étant endommagé. Je vous remercie. Mon code est comme suit:
#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;
}
- Ne devrait-elle pas être n = tableau[0], pas l'inverse? Puisque vous voulez enregistrer le premier numéro de votre supposé plus petit élément, puis de comparer à partir de là.
- En plus de ce que @Clark a dit, notez également que vous jetez la valeur de retour de indexofSmallestElement et ne pas l'afficher. Notez également que vos boucles d'utilisation
<= size
ce qui est incorrect, vous devez utiliser les< size
. Rappelez-vous, en C et C++ tableaux de repartir de 0, donc si votre tableau contient 10 éléments, les indices sont valides 0, 1, 2, ..., 9. En outre, votreindex
variable peut être utilisée non initialisée. Pensez à ce qui arrive quand le plus petit élément est le premier élément. - Ici est votre corruption de la pile:
for (int i = 0; i <= size; i++)
. Devrait être<
Vous devez vous connecter pour publier un commentaire.
Un certain nombre de personnes ont montré leur variante de
indexofSmallestElement
. Je vais inclure le mien avec une explication de pourquoi je pense que c'est mieux:Vous remarquerez que j'ai en finir avec la
n
variable, que vous avez utilisée pour contenir la plus petite valeur rencontré jusqu'à présent. J'ai fait cela parce que, dans mon expérience, d'avoir à garder deux choses différentes synchronisées peuvent être une source de bogues subtils. Même dans ce cas simple, il a été la source de plusieurs de bugs, pas le moindre de ce qui était votren
a été déclaréeint
, mais vous avez été l'attribution des valeurs de typedouble
en elle.Ligne de fond: en finir avec la
n
variable et juste garder une trace d'une chose: l'indice.for (int i = 0; i <= size; i++)
Rappelez-vous, en C et C++ tableaux de repartir de 0, donc si votre tableau contient 10 éléments, l'index serait 0, 1, 2, ..., 9. Pourtant, cette boucle allant de 0 à 10. En d'autres termes, vous essayez de trucs 11 choses dans un tableau de 10 des choses. Votre boucle:for (int i = 0; i < size; i++)
Il devrait être
n = array[0]
au lieu dearray[0] = n
. Cela signifie que vous êtes en supposant que le premier élément de la matrice être le plus petit au début, puis de comparer avec d'autres.D'ailleurs, dans votre boucle, vous dépassez la limite de votre tableau. Pour la boucle doit s'exécuter jusqu'à
i < size
et pasi <= size
.Votre code devrait ressembler à ceci..
à l'intérieur de la boucle d'utilisation tableau[i] et index = i. La taille est la limite 🙂