Minimum

Discutez d'informatique ici !
samirou
Membre Relatif
Messages: 166
Enregistré le: 06 Fév 2012, 22:55

minimum

par samirou » 17 Juil 2014, 22:48

Bonsoir, j'ai un exercice de langage C:

Ecrire un programme en langage C appelé Minimum qui utilise une boucle pour calculer le minimum des entiers positifs données par l'utilisateur. La boucle se termine quand l'utilisateur donne un entier négatif. Le minimum calculé est affiché par la suite.

Voici mon programme

#include
#include
int main()
{
int val,min=0;
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
while(val>=0)
{
min=val;
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
}
printf("la minimum des nbres entiers positifs est %d",min);
getch ();
return 0;
}

Quand je l'exécute et j'entre deux nombres par exemple 10 et 8 il m'affiche que le minimum est 10
Je demande est ce que le programme est bien fait. Sinon quels sont les erreurs



Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 18 Juil 2014, 05:51

Code: Tout sélectionner
#include
#include

int main() {
    int value_min = std::numeric_limits::max(), value = value_min;

    do {
        value_min = std::min(value, value_min);
        printf("Entrez un entier positif pour continuer ou négatif pour finir : ");
        scanf_s("%d", &value);
    } while (value >= 0);

    printf("Valeur minimale  = %d\n", value_min);

    return EXIT_SUCCESS;
}

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 18 Juil 2014, 08:03

Bonjour,

Tout d'abord, il te manque une condition très importante dans ta boucle while qui te permettrait de définir le minimum

Code: Tout sélectionner
while(val>=0)
{
min=val;
printf("donner un entier positif pour continuer ou negatif pour finir\n");
scanf("%d",&val);
}


Dans cette boucle, tu associes le minimum (variable min) à la valeur saisie par l'utilisateur, pour tous les cas où val > 0.

Or ce que tu cherches c'est plutôt pour chaque valeur saisie, il faut que je vérifie si la valeur est supérieur au minimum actuel et je la remplace sinon je passe mon chemin.

Code: Tout sélectionner
if (min > val) {
    min = val;
}


Ensuite (même si le code n'est pas en C mais en C++) le code Cliffe contient 2 astuces.

* L'utilisation de la boucle "do while" te permet d'effectuer la boucle AU MOINS UNE FOIS.
Code: Tout sélectionner
do {
   if (min = 0);





* L'initialisation de min avec une très grande valeur

Si tu mets min = 0 au début forcément tu vas avoir quelques problèmes pour la suite.

Tu as donc 2 techniques possibles :

1) Initialiser min avec une valeur négative (-1) par exemple et rajouter une condition pour traiter le cas.

Code: Tout sélectionner
/* Si min vaut -1 ou si min est plus grand que val, alors on remplace */
if (min == -1 || min > val) {
    min = val;
}


ou alors initialiser min avec une valeur max.
Code: Tout sélectionner
int min = 100000;


Il est toutefois préférable de passer par
Code: Tout sélectionner
#include  /* Nécessaire pour INT_MAX */
int min=INT_MAX; /* valeur maximum que peut prendre un int */


Je n'ai bien sûr par écrit tout le code. Essaye de modifier ce qui ne va pas à partir de ce qu'on a pu te dire.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 18 Juil 2014, 08:40

Je connaissais pas la lib limits.h, je sens qu'elle va me servir celle là :ptdr:
Je suppose qu'elle contient tout un tas de constantes uniquement., vais aller voir ça^^
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 18 Juil 2014, 09:43

Pour plus d'info pour ce header, tu peux aller voir ici : http://www.unix.com/man-page/opensolaris/3head/limits.h/ ^^

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite