Nouveau sur C ++, donc je m'excuse à l'avance pour mon ineptie.
J'ai besoin d'écrire une fonction en dehors de la fonction Main qui vérifie les éléments d'un tableau (qui ont été saisis par l'utilisateur) pour voir s'ils sont supérieurs à 10. S'ils le sont, je dois imprimer ce nombre d'éléments ainsi qu'une liste des éléments eux-mêmes. Si ce n'est pas le cas, je dois afficher un message indiquant qu'il n'y en a pas.
J'ai essayé diverses choses, mais c'est celle sur laquelle je reviens sans cesse. Pouvez-vous m'aider?
void print_over_ten(const int list[], int length) //list[] contains user entered elements //length contains the length of the array, list[] { int index=0; //counter int amount; //number of elements over 10 int number_over_ten; //variable for numbers over ten cout << "\nThese numbers are over ten: "; if (index > 10 && index <= length) { number_over_ten = index-1; cout << number_over_ten << " "; index++; } else cout << "\nThere are no numbers over 10.\n"; amount = index; cout << "There are " << amount << " numbers over 10.\n"; }
Je pense que la plupart de cela est probablement faux, alors n'hésitez pas à le jeter.
Toute aide est grandement appréciée. Merci!
3 Réponses :
Votre condition if
est généralement correcte, mais vous devez faire cette vérification lorsque vous parcourez le tableau avec une boucle:
int amount = std::count_if(list, list + length, [](int i) { return i > 10; });
Note mineure sur la dénomination: l' index
variable ne décrit pas ce qu'il fait. Vous devriez probablement l'appeler counter
comme vous l'avez écrit dans un commentaire, ou amount
, comme vous l'avez affecté plus tard à une variable avec ce nom.
Encore mieux qu'une boucle est d'utiliser un algorithme comme celui-ci:
for (int i = 0; i < length; ++i) { if (list[i] > 10) ++index; } if (index > 10) cout << "There are " << index << " numbers over 10.\n"; else cout << "\nThere are no numbers over 10.\n";
Si vous avez juste besoin de compter les éléments correspondants, vous pouvez utiliser une simple boucle, par exemple:
#include <vector> void print_over_ten(const int list[], int length) { std::vector<int> numbers; for (int i = 0; i < length; ++i) { if (list[i] > 10) numbers.push_back(list[i]); } if (!numbers.empty()) { cout << "These numbers are over ten:"; for(int i : numbers) { cout << " " << i; } cout << "\nThere are " << numbers.size() << " numbers over 10."; } else cout << "There are no numbers over 10."; }
Ou, l'algorithme standard std::count_if()
, par exemple:
void print_over_ten(const int list[], int length) { for(int i = 0; i < length; ++i) { if (list[i] > 10) { int amount = 1; cout << "These numbers are over ten: " << list[i]; for (++i; i < length; ++i) { if (list[i] > 10) { ++amount; cout << " " << list[i]; } } cout << "\nThere are " << amount << " numbers over 10."; return; } } cout << "There are no numbers over 10."; }
Mais, si vous avez besoin d'afficher réellement les nombres individuels qui correspondent, vous devrez comparer chaque nombre individuellement, par exemple:
#include <algorithm> void print_over_ten(const int list[], int length) { size_t amount = std::count_if(list, list+length, [](int i){ return i > 10; }); if (amount > 0) cout << "There are " << amount << " numbers over 10."; else cout << "There are no numbers over 10."; }
Ou, vous pouvez rassembler les nombres correspondants dans un conteneur, comme un std::vector
, par exemple:
void print_over_ten(const int list[], int length) { int amount = 0; for (int i = 0; i < length; ++i) { if (list[i] > 10) ++amount; } if (amount > 0) cout << "There are " << amount << " numbers over 10."; else cout << "There are no numbers over 10."; }
Vous pouvez beaucoup simplifier cela en utilisant std::copy_if
du fichier STL <algorithm>
:
std::vector<int> get_over_10(const int list[], int length) { std::vector<int> over_10; std::copy_if(list, list+length, std::back_inserter(over_10), [](int i) { return i > 10; }); return over_10; }
i <= 10
doit être i > 10
Vous avez besoin d'une boucle.
for( int i=0; i < length; ++i) { // Do something with list[i] }