web-dev-qa-db-fra.com

Trouver le plus grand et le plus petit nombre dans un tableau

Considérer:

#include <iostream> // Include header file

using namespace std;

int main () //start of main function
{

    int values[20]; // Declares array and how many elements
    int small, big; // Declares integer
    big = small = values[0]; // Assigns element to be highest or lowest value

    for (int i = 0; i < 20; i++) // Counts to 20 and prompts the user for a value and stores it
    {
        cout << "Enter value " << i << ": ";
        cin >> values[i];
    }

    for (int i = 0; i < 20; i++) // Works out the biggest number
    {
        if(values[i] > big) // Compare biggest value with current element
        {
            big = values[i];
        }
    }

    for (int i = 0; i < 20; i++) // Works out the smallest number
    {
        if (values[i] < small) // Compares smallest value with current element
        {
            small = values[i];
        }
    }

    cout << "The biggest number is " << big << endl; // Prints outs the biggest number
    cout << "The smallest number is " << small << endl; // Prints out the smallest number
}

Ceci est mon code jusqu'à présent. Le problème que je rencontre, c’est d’imprimer le plus grand nombre de tableaux. Quelque chose à voir avec l'attribution du premier élément à la valeur la plus haute et la plus basse. Cela fonctionne si je les fais séparément. Aucune suggestion?

3
user2204993

Sauf si vous devez réellement implémenter votre propre solution, vous pouvez utiliser std :: minmax_element . Cela renvoie une paire d'itérateurs, l'un au plus petit élément et l'autre au plus grand.

#include <algorithm>

auto minmax = std::minmax_element(std::begin(values), std::end(values));

std::cout << "min element " << *(minmax.first) << "\n";
std::cout << "max element " << *(minmax.second) << "\n";
10
juanchopanza
big=small=values[0]; //assigns element to be highest or lowest value

Devrait être AFTER remplir la boucle

//counts to 20 and prompts user for value and stores it
for ( int i = 0; i < 20; i++ )
{
    cout << "Enter value " << i << ": ";
    cin >> values[i];
}
big=small=values[0]; //assigns element to be highest or lowest value

depuis quand vous déclarez un tableau - c'est unintialized (stockez des valeurs non définies) et ainsi, vos big et small après avoir assigné stockeraient aussi des valeurs undefined.

Et bien sûr, vous pouvez utiliser std::min_element, std::max_element ou std::minmax_element à partir de C++11, au lieu d'écrire vos boucles.

5
ForEveR
int main () //start of main fcn
{

    int values[ 20 ]; //delcares array and how many elements
    int small,big; //declares integer
     for ( int i = 0; i < 20; i++ ) //counts to 20 and prompts user for value and stores it
    {
        cout << "Enter value " << i << ": ";
        cin >> values[i];
    }
    big=small=values[0]; //assigns element to be highest or lowest value
    for (int i = 0; i < 20; i++) //works out bigggest number
    {
        if(values[i]>big) //compare biggest value with current element
        {
            big=values[i];
        }
         if(values[i]<small) //compares smallest value with current element
        {
            small=values[i];
        }
    }
     cout << "The biggest number is " << big << endl; //prints outs biggest no
    cout << "The smallest number is " << small << endl; //prints out smalles no
}
2
Xiou Raxau

Vous affectez grand ou petit avant l’initialisation du tableau, c’est-à-dire que gros et petit supposent la valeur de ce qui est sur la pile à ce stade. Comme ils ne sont que des types de valeurs simples et aucune référence, ils ne supposeront pas de nouvelle valeur une fois que les valeurs [0] seront écrites via cin >>.

Il suffit de déplacer la tâche après votre première boucle et ça devrait aller.

1
misberner

Vous pouvez initialiser après avoir rempli le tableau ou vous pouvez écrire:

 small =~ unsigned(0)/2; // Using the bit-wise complement to flip 0's bits and dividing by 2 because unsigned can hold twice the +ve value an

entier peut contenir.

 big =- 1*(small) - 1;

au lieu de:

big = small = values[0]

parce que lorsque vous écrivez cette ligne avant de remplir le tableau, les valeurs petites et grandes seront égales à une valeur résiduelle aléatoire (l'entier étant un POD ) de la mémoire et si ces nombres sont plus grands ou plus petits que tout autre valeur dans votre tableau, vous les obtiendrez en sortie.

0
M.A