Valeur min et max

Résolu/Fermé
ToTo - 29 oct. 2007 à 18:50
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 30 oct. 2007 à 09:45
Bonsoir,

J'ai un problème avec mon programme en C++

voilà le problème du sujet, je dois entrer x valeurs et quand je mets 0 il arrête de lire et il doit trouver dans les x valeurs le minimum et le maximum

voilà mon programme


#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
int x; //les nombres
int min;
int max;

cout<<"Choisir des nombres x et terminer par 0 pour arrêter :"<<endl;

while((x=cin.get()) !='0')
{
if(x>max)
max=x;
if(x<min)
min=x;
}

cout<<"Le plu petit est "<<min<<endl;
cout<<"Le plus grand est "<<max<<endl;

return(0)
}

le programme marche mais je ne trouve par les valeurs max et min

j'ai mis par exemple 35, 34,36,37,38 puis 0 pour arrêter

et il met

le plus petit est 0
le plus grand est 56

alors je ne comprends pas trop là

quelu'un pourrait m'aider à comprendre ce problème
merci à ceux qui m'aider
A voir également:

3 réponses

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
29 oct. 2007 à 22:09
Pas de parenthèse autour du 0 de return 0; (return n'est pas une fonction, donc pas besoin de parenthèse). Ici tu as un problème car tu compare x à deux variables non initialisées, donc par défaut initialisées à 0 toutes les deux.
#include <iostream>

int main(){
    int x;
    std::cout << "x ? ";
    std::cin >> x;
    int min = x,max = x;
    while(x){
        std::cout << "x ? ";
        std::cin >> x;
        if(x != 0){
            min = min < x ? min : x;
            max = max > x ? max : x;
        }
    }
    std::cout << "min = " << min << " max = " << max << std::endl;
    return 0;
}

Ce qui donne :
x ? 5
x ? 2
x ? 8
x ? 0
min = 2 max = 8

Quelques recommandations :
- compile avec les options de warning (-W -Wall pour g++), ton compilateur aurait dû te prévenir que ces variables pouvait être évaluées sans être initialisées :
- pense à initialiser tes variablesquand c'est nécessaire
- évite d'utiliser des headers non standard (par exemple #include "stdafx.h" )
- évite d'utiliser l'instruction "using namespace std;". Si dans un fichier source (.cpp) c'est indolore il ne faut pas l'utiliser dans un header (.hpp). En effet le namespace std:: sert à éviter les conflits entre les classes de la STL et les classes que tu peux éventuellement utiliser par ailleurs.

Bonne chance
0
Merci mamiemando pour l'aider


j'ai changé et tous est ça marche bien avec "using namespace std" mais j'ai pas fais avec tes recommandaions car j'ai pas encore appris avec les options warning ^^, mais merci pour le coude de main maitenant j'ai compris

Merci
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
30 oct. 2007 à 09:45
Ca s'apprend pas c'est juste une option de compilation. Par exemple avec gcc ça consiste à taper :
gcc -W -Wall -o plop.exe plop.c

au lieu de :
gcc -o plop.exe plop.c

Au risque d'insister je t'incite vraiment à chercher comment on active les warning pour te discipliner à programmer correctement, surtout au début. Mais bon si ça marche c'est l'essentiel. Au passage je n'ai pas compris pourquoi tu incluais "stdafx.h" car ici il ne sert à rien (à part empêcher de compiler sous linux). Bref tu peux le virer sans risque et normalement ça devrait compiler sans problème.

Bonne chance
0