J'ai donc un fichier d'entrée. Il se compose de 40 numéros. Les 20 premiers nombres sont entrés dans un tableau (j'ai vérifié ceci, ils sont réellement là). Je ferme ensuite et rouvre le fichier d'entrée. Je compare les 20 premiers nombres dans le fichier d'entrée contre mon tableau en utilisant la recherche séquentielle. Cela signifie qu'ils devraient tous avoir du succès. Je compare ensuite les 20 nombres suivants aux nombres dans mon tableau, ils devraient tous être des recherches infructueuses. Mon tableau n'est pas trié à ce stade.C++ Recherche séquentielle ne trouvant pas le dernier élément
Le problème que je rencontre est que le dernier nombre de succès n'est jamais trouvé en utilisant séquentiel. Je ne suis pas sûr de savoir comment résoudre ce problème.
est ici la fonction de recherche séquentielle:
length = 19;
void Search::sequential(ItemType item, bool& found)
{
int place = 0;
while (place < length && item != list[place])
place++;
found = (place < length);
}
Et voici mes boucles avec succès/échec
outFile << "\n\n ************Sequential Successful ********** \n";
outFile << endl << "ID" << endl;
inFile >> num;
for(int i=0; i<=length && inFile; i++)
{
search.sequential(num, found);
if (found)
outFile << num << endl;
inFile >> num;
}
//sequential unsuccessful
outFile << "\n\n ************Sequential unsuccessful ********** \n";
outFile << endl << "ID" << endl;
for(int i=0; i<=length && inFile; i++)
{
search.sequential(num, found);
if (!found)
outFile << num << endl;
inFile >> num;
}
Cependant, ma sortie est:
************Sequential Successful **********
ID
1111
3352
4567
5678
6789
7890
8901
9012
1223
2113
8546
2374
4723
9573
3284
7474
8594
3589
5858
//THERE SHOULD BE 1925 HERE BUT THERE ISN'T
************Sequential unsuccessful **********
ID
9456
3584
2222
4319
4477
5710
5497
1502
1599
1504
1506
9943
8833
9944
6678
5555
5660
9911
6130
1613
Si je supprime la "Si (trouvé)" déclaration tout fonctionne parfaitement, mais comment puis-je contourner cela sans enlever cela?
Merci à l'avance
--------------- --------------- modifier
D'accord, quand je changé la longueur à 20, il ne semblait toujours pas fonctionner. Je suis tellement perdu.
Voici où je crée le tableau
inFile >> num;
for (int i=0; i<length && inFile; i++)
{
search.addToList(num);
inFile >> num;
}
et voici la fonction addToList
void Search::addToList(ItemType num)
{
if (index < length) //ive tried taking out this statement just to see if it makes a difference and it didn't
{
list[index] = num;
index++;
}
}
I initialize index 0 dans le constructeur
Voilà comment je déclare le tableau
ItemType list[length];
IL FONCTIONNE !!!! Merci beaucoup à vous tous! Je l'apprécie vraiment beaucoup.
Vous ne vous imprimez tableau incorrecte: dans sa forme actuelle, vous imprimez des éléments après la fin réelle du tableau. J'utilise habituellement 'for (int i = 0; i
Lars
Oui, cela montre que mon tableau contient les valeurs correctes, merci. –
Première chose: déclarer votre tableau de cette façon donne un tableau de 19 éléments (index 0 à 18). Si vous voulez déclarer un tableau de 20 éléments (index 0 à 19), vous devez supprimer le moins 1. – Kipotlov