2
votes

C ++: Comment voir si un élément d'un tableau dépasse une certaine valeur?

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!


1 commentaires

Vous avez besoin d'une boucle. for( int i=0; i < length; ++i) { // Do something with list[i] }


3 Réponses :


3
votes

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


0 commentaires

3
votes

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


0 commentaires

2
votes

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


1 commentaires

i <= 10 doit être i > 10