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