Trouver le plus grande nombre parmi trois valeurs
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Trouver le plus grande nombre parmi trois valeurs



  1. #1
    invitee38d9e00

    Trouver le plus grande nombre parmi trois valeurs


    ------

    Bonjour,

    J'ai écrit un programme sur C++, ça donne le résultat mais je sais pas pourquoi qu'il y a une ligne

    "max 55"

    pouvez-vous m'aider à supprimer cette ligne, mon programme est :


    Code:
    #include<stdio.h>
    #include<stdlib.h>
    
    int main(void)
    {
    int ia,ib,ic,imax;
        printf("entrez la vl a:");
        scanf("%d",&ia);
        printf("entrez la vl b:");
        scanf("%d",&ib);
        printf("entrez la vl c:");
        scanf("%d",&ic);
    if(ia>ib)
           
           printf("max %d \n",ia);
    else
           printf("max %d \n",ib);
    if(imax>ic)
          printf("max %d\n",imax);
    else
           printf("max %d \n",ic);
    system("pause");
    return 0;
    }
    Merci beaucoup.

    -----
    Dernière modification par JPL ; 22/01/2011 à 16h04. Motif: Ajout de la balise Code (#)

  2. #2
    Jack
    Modérateur

    Re : Trouver le plus grande nombre parmi trois valeurs

    hou la la! Il y a du boulot ...

    Pour commencer, un programme doit être indenté pour faciliter sa lecture. Pour faire apparaitre cette indentation dans ton message, il faudra utiliser les balises code, ce qui donnera:
    Code:
    #include<stdio.h>
    #include<stdlib.h>
     
    int main(void)
    {
        int ia,ib,ic,imax;
        printf("entrez la vl a:");
        scanf("%d",&ia);
        printf("entrez la vl b:");
        scanf("%d",&ib);
        printf("entrez la vl c:");
        scanf("%d",&ic);
     
        if (ia>ib)
            printf("max %d \n",ia);
        else
            printf("max %d \n",ib);
        if (imax>ic)
            printf("max %d\n",imax);
        else
            printf("max %d \n",ic);
        system("pause");
        return 0;
    }
    C'est mieux, non?

    Maintenant, ton code est truffé d'erreur:
    Code:
        if (ia>ib)
            printf("max %d \n",ia);
    C'est faux: tu affiches le max alors que tu n'as pas encore testé la 3ème valeur
    Code:
        if (imax>ic)
    Comment peux-tu comparer ic à imax alors que tu n'as donné aucune valeur à imax?

    Au boulot! La nuit va être longue. Enfin pas pour moi car il est tard.

  3. #3
    danyvio

    Re : Trouver le plus grande nombre parmi trois valeurs

    Je ne te donne pas le code, mais une méthode :
    Initialise ton imax à -1000 par exemple ou autre valeur très petite compatible avec ton calculateur.
    A chaque entrée de valeur, tu la compares avec imax, que tu "écrases" par la valeur entrée si cette dernière est supérieure à imax.
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  4. #4
    bzh_nicolas

    Re : Trouver le plus grande nombre parmi trois valeurs

    Salut, ton algorithme est faux.
    Tu ne vas pas sortir la plus grande valeur que tu vas trouver mais le plus grand entre ia et ib et le plus grand entre imax et ic. Mais tu ne vérifies jamais le plus grand entre le résultat de ses 2 comparaisons.

    La solution la plus simple (à mon sens) et qui te permettra d'adapter facilement ton code si tu veux comparer plus de 3 valeurs.
    Il faut utiliser une boucle. Pour cela place les valeurs lues dans un tableau (pas obligatoire mais plus souple pour une adaptation ultérieure). ensuite tu initialise imax avec la première valeur lue puis, à chaque tour de boucle, si la valeur lue que tu traites est supérieure à imax tu remplaces la valeur de imax par celle de la valeur lue. Quand tu as traité toutes les valeurs lue, tu affiche imax qui contiendra la plus grande.

    La méthode de danyvio est correcte seulement si tu as un contrôle absolu des valeurs entrées. Par exemple si tu connais la valeur minimale que ton programme aura à traiter. Mais là comme il s'agit de valeur saisie par l'utilisateur...
    Dans ce genre de cas initialiser une variable avec une valeur en te disant que "personne ne donnera de valeur aussi petite" est risqué car il y aura toujours un petit malin qui donnera une valeur plus basse. Dans ce cas tu pourrais initialiser à INT_MIN, une constante définie dans limits.h qui représente le plus petit entier disponible, mais il ne faudra vérifier que ton code fonctionne dans le cas de l'égalité.

  5. A voir en vidéo sur Futura
  6. #5
    ProgVal

    Re : Trouver le plus grande nombre parmi trois valeurs

    Bonjour,

    Pourquoi ne pas écrire une fonction max() qui retourne le maximum de deux valeurs, puis afficher max(max(ia, ib), ic) ?

    Cordialement,
    ProgVal

  7. #6
    doul11

    Re : Trouver le plus grande nombre parmi trois valeurs

    bonjour,

    Citation Envoyé par bzh_nicolas Voir le message
    La méthode de danyvio est correcte seulement si tu as un contrôle absolu des valeurs entrées. Par exemple si tu connais la valeur minimale que ton programme aura à traiter. Mais là comme il s'agit de valeur saisie par l'utilisateur...
    Dans ce genre de cas initialiser une variable avec une valeur en te disant que "personne ne donnera de valeur aussi petite" est risqué car il y aura toujours un petit malin qui donnera une valeur plus basse. Dans ce cas tu pourrais initialiser à INT_MIN, une constante définie dans limits.h qui représente le plus petit entier disponible, mais il ne faudra vérifier que ton code fonctionne dans le cas de l'égalité.
    si on fait une saisie par un int et que l'on fait une boucle de rechercher du maximum avec un float initialisé a -1E+20, il est impossible qu'un nombre saisis soit inférieur.

    on peut fixer un maximum a -1E+99 ce qui fait -inf (), mais ça ne marche pas sur tout les implémentations, ce comportement n'est pas fixé par la norme.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  8. #7
    invitee38d9e00

    Re : Trouver le plus grande nombre parmi trois valeurs

    Rebonjour,

    Je veut juste comparer trois valeurs, pouvez-vous me donner une idéé. Je suis en fait débutant.

    Merci beaucoup.

  9. #8
    danyvio

    Re : Trouver le plus grande nombre parmi trois valeurs

    Citation Envoyé par hoquangtri Voir le message
    Rebonjour,

    Je veut juste comparer trois valeurs, pouvez-vous me donner une idéé. Je suis en fait débutant.

    Merci beaucoup.
    Bon alors méthode bourrine :

    Après avoir entré tes 3 valeurs ia ib ic :
    si ia > ib alors copier ia dans imax sinon copier ib dans imax finsi

    si ic > imax copier ic dans imax finsi
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  10. #9
    Jack
    Modérateur

    Re : Trouver le plus grande nombre parmi trois valeurs

    pour être tranquille avec la valeur initiale de imax, il suffit de l'initialiser avec la 1ère valeur entrée et de comparer les valeurs suivantes à imax, en mettant imax à jour en cas de valeur entrée supérieure à imax.

    A+

  11. #10
    bzh_nicolas

    Re : Trouver le plus grande nombre parmi trois valeurs

    Citation Envoyé par doul11 Voir le message
    bonjour,



    si on fait une saisie par un int et que l'on fait une boucle de rechercher du maximum avec un float initialisé a -1E+20, il est impossible qu'un nombre saisis soit inférieur.

    on peut fixer un maximum a -1E+99 ce qui fait -inf (), mais ça ne marche pas sur tout les implémentations, ce comportement n'est pas fixé par la norme.
    Sans parler des problèmes de conversion de float en int en C (surtout avec des valeurs de float dépassant les limites du int). C'est bien sûr faisable mais on est très loin de simplifier le problème, bien au contraire même...

  12. #11
    doul11

    Re : Trouver le plus grande nombre parmi trois valeurs

    Citation Envoyé par bzh_nicolas Voir le message
    C'est bien sûr faisable mais on est très loin de simplifier le problème, bien au contraire même...
    oui bien sur, la solution de Jack me semble être la meilleure et la plus simple.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  13. #12
    polo974

    Re : Trouver le plus grande nombre parmi trois valeurs

    Citation Envoyé par hoquangtri Voir le message
    Rebonjour,

    Je veut juste comparer trois valeurs, pouvez-vous me donner une idéé. Je suis en fait débutant.

    Merci beaucoup.
    Tu te dis que la première est la plus grande.
    Tu compares la plus grande actuelle à la valeur suivante et tu gardes la plus grande.
    Tu compares la plus grande actuelle à la valeur suivante et tu gardes la plus grande.
    Tu .... (ah ben non, on déjà a fini!)

    Ensuite, à toi de voir si tu veux mettre en boucle ou pas pour si peu de répétition...

    PS: passer par un float pour ... Il y a pourtant plein d'autres métiers ... (petit clin d'oeil rapport à un autre sujet)
    Jusqu'ici tout va bien...

  14. #13
    doul11

    Re : Trouver le plus grande nombre parmi trois valeurs

    Citation Envoyé par polo974 Voir le message
    PS: passer par un float pour ... Il y a pourtant plein d'autres métiers ... (petit clin d'oeil rapport à un autre sujet)
    aucun problème : je ne suis pas un professionnel de l'informatique, a noter que ça fonctionne quand même, aussi tordue que soit la méthode.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  15. #14
    polo974

    Re : Trouver le plus grande nombre parmi trois valeurs

    Pour revenir au float:
    il faut se méfier de ces bidules, les float (les vrais en C) sont codés sur 32 bit, 24 pour la mantisse et 8 pour l'exposant.
    ce qui fait que:
    • ils sont compris entre (environ +/-(1e-38... 1e38) ou 0 (et des valeurs NAN et autres joyeusetés).
    • il n'y a que 24 bit de mantisse, ce qui correspond en gros à 7 chiffres sigificatifs
    donc un int (sur 32 bit) autour de 2000000000 à une chance sur 256 environ d'être différencié de son suivant ! ! !

    il faut également savoir qu'en C, les calculs flottants se font normalement en double, ce qui fait que l'usage de float ralenti les calculs...
    Jusqu'ici tout va bien...

  16. #15
    doul11

    Re : Trouver le plus grande nombre parmi trois valeurs

    bonjour,

    Citation Envoyé par polo974 Voir le message
    donc un int (sur 32 bit) autour de 2000000000 à une chance sur 256 environ d'être différencié de son suivant ! ! !
    en fait mon système a la con ne marche carrément pas puisque un int peut avoir plus de chiffres significatif que le float.


    ce qui fait que l'usage de float ralenti les calculs...
    comment ça ce fait ?

    en tout cas merci pour toutes ces explication.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  17. #16
    jiherve

    Re : Trouver le plus grande nombre parmi trois valeurs

    Bonsoir,
    un calcul en flottant ralenti les calculs sur une machine n'ayant pas d'alu flottante performante ou pas d'alu flottante 64bits ce n'est donc pas une fatalité.
    Ceci dit sur une machine n'ayant ni multiplieur cablé ni FPU cela demande moins de temps de calculer a*b si a et b sont des flottants 32 bits que si ce sont des entiers 32 bits.
    JR
    l'électronique c'est pas du vaudou!

  18. #17
    polo974

    Re : Trouver le plus grande nombre parmi trois valeurs

    Un calcul avec des float plutôt que des double en C est plus lent (sur n'importe quelle machine), car le C spécifie que les calculs sont effectués en double, seul, le stockage se fait en float, donc il faut à chaque opération transcoder de float en double et vice-versa...

    Je précise bien, en C pur, car ensuite, il est possible d'utiliser des extensions du compilateur permettant pas mal de choses (ou un autre langage (fortran par ex), ou juste de l'assembleur)...

    Pour la petite histoire, les flottants du basic des premiers ordi individuels commodore ou trs80 (les vieux de chez vieux) était codé sur 5 octets, pour avoir un nombre pas trop minable de chiffres significatifs (ben oui, c'était plus mauvais que les calculettes de l'époque...).

    Pour la petite petite histoire, il y a eu des gens qui ont tronqué la mantisse d'un double pour lui donner la taille d'un float dans un compilo C sur une machine dont je tairais le nom...
    Jusqu'ici tout va bien...

Discussions similaires

  1. coefficient de frottement où trouver des valeurs
    Par invite0914d5b3 dans le forum Physique
    Réponses: 12
    Dernier message: 25/05/2012, 20h51
  2. Cherche astuce pour trouver le nombre de diviseur naturel d'un nombre
    Par invitefb7818c9 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 27/12/2009, 13h23
  3. DM : trouver trois entiers (TS spé math)
    Par invite110534af dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 25/09/2007, 20h25
  4. Trois coordonées, trouver l'équation
    Par invite48cab7c7 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 23/01/2006, 20h05
  5. Trouver les valeurs réelles de x
    Par invite234d9cdb dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 22/01/2006, 15h25