Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme C comment l'optimiser?

comment l'optimiser en C et pas en C++

    11 décembre 2018 à 21:34:23

    Bonjour je viens souvent sur les forums pour trouver des problème de mon niveau a résoudre pour m’entraîner et je suis tomber sur ce thread : 

    https://openclassrooms.com/forum/sujet/probleme-en-c-somme-moyen-produit-d-un-nombre-n

    Voici le code que je viens de commencer de faire par rapport a son code :

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        double Amount=0;
        int Lenght=0,i=0,choice=0;
        int Nomber=0,Nomber2=0,Nomber3=0,Nomber4=0,Nomber5=0,Nomber6=0,Nomber7=0;
        printf("Si vous voulez calculer la Somme   Taper 1 \n"
               "Si vous voulez calculer le Produit Taper 2 \n"
               "Si vous voulez calculer la Moyenne Taper 3     ");
        scanf("%d",&choice);
        printf("Taper votre nombre de Nombre   :    ");
        scanf("%d",&Lenght);
        if(choice==1)
        {
            for (i=0;i<Lenght;i++)
            {
                printf("Rentrer votre Nombre a additionner :    ");
                scanf("%d",&Nomber);
                Amount+=Nomber;
            }
            printf("La somme de ces %d nombres est : %f\n",Lenght,Amount);
        }
        else if(choice==2)
        {
            switch(Lenght)
            {
                case 2:
                printf("Rentrer votre Nombre a multiplier :    ");
                scanf("%d",&Nomber);
                printf("Rentrer votre 2eme Nombre a multiplier :    ");
                scanf("%d",&Nomber2);
                Nomber*=Nomber2;
                printf("Le produit de ces %d nombres est : %f\n",Lenght,Nomber);
                break;
                case 3:
                printf("Rentrer votre Nombre a multiplier :    ");
                scanf("%d",&Nomber);
                printf("Rentrer votre 2eme Nombre a multiplier :    ");
                scanf("%d",&Nomber2);
                printf("Rentrer votre 3eme Nombre a multiplier :    ");
                scanf("%d",&Nomber3);
                Amount=Nomber*Nomber2*Nomber3;
                printf("Le produit de ces %d nombres est : %f\n",Lenght,Amount);
                break;
                case 4:
                printf("Rentrer votre Nombre a multiplier :    ");
                scanf("%d",&Nomber);
                printf("Rentrer votre 2eme Nombre a multiplier :    ");
                scanf("%d",&Nomber2);
                printf("Rentrer votre 3eme Nombre a multiplier :    ");
                scanf("%d",&Nomber3);
                printf("Rentrer votre 4eme Nombre a multiplier :    ");
                scanf("%d",&Nomber4);
                Amount=Nomber*Nomber2*Nomber3*Nomber4;
                printf("Le produit de ces %d nombres est : %f\n",Lenght,Amount);
                break;
                case 5:
                printf("Rentrer votre Nombre a multiplier :    ");
                scanf("%d",&Nomber);
                printf("Rentrer votre 2eme Nombre a multiplier :    ");
                scanf("%d",&Nomber2);
                printf("Rentrer votre 3eme Nombre a multiplier :    ");
                scanf("%d",&Nomber3);
                printf("Rentrer votre 4eme Nombre a multiplier :    ");
                scanf("%d",&Nomber4);
                printf("Rentrer votre 5eme Nombre a multiplier :    ");
                scanf("%d",&Nomber5);
                Amount=Nomber*Nomber2*Nomber3*Nomber4*Nomber5;
                printf("Le produit de ces %d nombres est : %f\n",Lenght,Amount);
                break;
                case 6:
                printf("Rentrer votre Nombre a multiplier :    ");
                scanf("%d",&Nomber);
                printf("Rentrer votre 2eme Nombre a multiplier :    ");
                scanf("%d",&Nomber2);
                printf("Rentrer votre 3eme Nombre a multiplier :    ");
                scanf("%d",&Nomber3);
                printf("Rentrer votre 4eme Nombre a multiplier :    ");
                scanf("%d",&Nomber4);
                printf("Rentrer votre 5eme Nombre a multiplier :    ");
                scanf("%d",&Nomber5);
                printf("Rentrer votre 6eme Nombre a multiplier :    ");
                scanf("%d",&Nomber6);
                Amount=Nomber*Nomber2*Nomber3*Nomber4*Nomber5*Nomber6;
                printf("Le produit de ces %d nombres est : %f\n",Lenght,Amount);
                break;
                case 7:
                printf("Rentrer votre Nombre a multiplier :    ");
                scanf("%d",&Nomber);
                printf("Rentrer votre 2eme Nombre a multiplier :    ");
                scanf("%d",&Nomber2);
                printf("Rentrer votre 3eme Nombre a multiplier :    ");
                scanf("%d",&Nomber3);
                printf("Rentrer votre 4eme Nombre a multiplier :    ");
                scanf("%d",&Nomber4);
                printf("Rentrer votre 5eme Nombre a multiplier :    ");
                scanf("%d",&Nomber5);
                printf("Rentrer votre 6eme Nombre a multiplier :    ");
                scanf("%d",&Nomber6);
                printf("Rentrer votre 7eme Nombre a multiplier :    ");
                scanf("%d",&Nomber7);
                Amount=Nomber*Nomber2*Nomber3*Nomber4*Nomber5*Nomber6*Nomber7;
                printf("Le produit de ces %d nombres est : %f\n",Lenght,Amount);
                break;
                default:
                printf("Nombre non-reconnue essayez entre 2 et 7 le programme y est limité ^^");
                break;
            }
        }
        else if(choice==3)
        {
            for (i=0;i<Lenght;i++)
            {
                printf("Rentrer votre Nombre a pour la moyenne:    ");
                scanf("%d",&Nomber);
                Amount+=Nomber;
            }
        Amount/=Lenght;
        printf("La moyenne de ces %d nombres est : %f\n",Lenght,Amount);
        }
    return 0;
    }

    Voila je le refait en nouveau sujet pour ne pas embrouiller les gens.

    MA QUESTION EST : comment l'optimiser en C !! et pas en C++

    -
    Edité par Naitchi 11 décembre 2018 à 23:41:39

    • Partager sur Facebook
    • Partager sur Twitter
      11 décembre 2018 à 23:12:08

      Bonjour ! Est-ce que tu as vu la notion de tableau ? Si pas encore, sache que ce que tu cherches à faire s'utilise naturellement avec des tableaux et permet de compacter les lignes 26 à 101 en deux ou trois instructions.
      • Partager sur Facebook
      • Partager sur Twitter
        11 décembre 2018 à 23:17:48

        oui mais on peu pas faire pour que l'utilisateur déterminer la longueur du tableau en C simple et pas en C++ non ?

        PS: j'ai mis a jour le sujet

        -
        Edité par Naitchi 11 décembre 2018 à 23:42:14

        • Partager sur Facebook
        • Partager sur Twitter
          12 décembre 2018 à 3:11:57

          Nous sommes ici dans le forum consacré au C, je ne sais pas pourquoi tu parles de C++. Les tableaux sont une notion (importante) de C. Donc tu as vu les tableaux en C ? Alors utilise-les pour gérer les différents choix. Est-ce que tu vois comment ou pas ?

          (PS : je n'ai pas compris ton dernier message, je crois qu'il manque des mots. Peux-tu te relire ?)

          • Partager sur Facebook
          • Partager sur Twitter
            12 décembre 2018 à 11:48:27

            Hello,

            Les ligne 27 à 110 peuvent se passer d'un tableau:

            int prd=1;
            for(int i=0;i<nb_elem;i++) {
            	int nbr;
            	printf("Entrez le nombre %d :",i+1);
            	scanf("%d",&nbr);
            	prd*=nbr;
            }
            printf("Produit: %d\n",prd);
            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              12 décembre 2018 à 11:59:17

              Ah oui, c'est encore plus simple !

              (L'idée du tableau, c'était pour se raccorder avec l'exercice classique de calcul de la somme des éléments d'un tableau.)

              -
              Edité par robun 12 décembre 2018 à 12:02:11

              • Partager sur Facebook
              • Partager sur Twitter
                12 décembre 2018 à 12:41:36

                attend du coup sa donnerais ça ? 

                #include <stdio.h>
                #include <stdlib.h>
                
                int main()
                {
                    double AmountSomme=0,AmountProduit=1,AmountMoyenne=0;
                    int Lenght=0,i=1,choice=0;
                    int Tableau[100]={0};
                    int Nomber=0;
                    printf("Si vous voulez calculer la Somme   Taper 1 \n"
                           "Si vous voulez calculer le Produit Taper 2 \n"
                           "Si vous voulez calculer la Moyenne Taper 3     ");
                    scanf("%d",&choice);
                    printf("\nTaper votre nombre de Nombre   :    ");
                    scanf("%d",&Lenght);
                    if(choice==1)
                    {
                        printf("votre calcule est:");
                        scanf("%d",&Nomber);
                        Tableau[0]=Nomber;
                        for(i=1;i<Lenght;i++)
                        {
                            printf("+");
                            scanf("%d",&Nomber);
                            Tableau[i]=Nomber;
                        }
                        for(i=0;i<Lenght;i++)
                        {
                            AmountSomme+=Tableau[i];
                        }
                        printf("\nLa somme de ces %d nombres est : %f\n",Lenght,AmountSomme);
                    }
                    else if(choice==2)
                    {
                               printf("votre calcule est:");
                        scanf("%d",&Nomber);
                        Tableau[0]=Nomber;
                        for(i=1;i<Lenght;i++)
                        {
                            printf("x");
                            scanf("%d",&Nomber);
                            Tableau[i]=Nomber;
                        }
                        for(i=0;i<Lenght;i++)
                        {
                            AmountProduit*=Tableau[i];
                        }
                        printf("\nLa somme de ces %d nombres est : %f\n",Lenght,AmountProduit);
                    }
                    else if(choice==3)
                    {
                        for (i=0;i<Lenght;i++)
                        {
                            printf("Rentrer votre Nombre a pour la moyenne:    ");
                            scanf("%d",&Nomber);
                            AmountMoyenne+=Nomber;
                        }
                    AmountMoyenne/=Lenght;
                    printf("La moyenne de ces %d nombres est : %f\n",Lenght,AmountMoyenne);
                    }
                return 0;
                }

                (et oui pour moi il manquais pas de mot mais j'ai peu être été brouillons

                • Partager sur Facebook
                • Partager sur Twitter
                  12 décembre 2018 à 13:01:29

                  Tu sais, écrire
                  scanf("%d",&Nomber);
                  Tableau[....]=Nomber;
                  
                  revient à écrire
                  scanf("%d",&Tableau[....]);
                  Mais tu n'as pas besoin d'un tableau.

                  -
                  Edité par edgarjacobs 12 décembre 2018 à 13:01:40

                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                    12 décembre 2018 à 13:34:29

                    Tu peux optimiser les noms de variables, en laissant le charabia : length, té, hache. Et à chaque fois on s'embrouille avec weight, hache, té.

                    1) pas de mélange franco-anglais. Choisis ton camp. Pas de mélanges minuscules majuscules.

                    2) une orthographe correcte. Number (en) ou Nombre (fr), mais jamais Nomber.

                    3) éviter les complications,   AmountSomme, qu'on traduirait par MontantSomme, c'est un pléonasme. Une somme, y a qu'à l'appeler somme (parce que c'est forcément un nombre), et une moyenne : Moyenne.

                    ---

                    Important: ce n'est pas une question de goût.  Si tu écris n'importe comment un nom de variable, quand tu travailles sur le code tu dois mobiliser une partie de ton cerveau pour te rappeler ce qu'il faut taper exactement (est-ce que j'ai mis une minuscule ou une majuscule etc). Ce qui fait que tu travailles moins vite en te fatigant davantage, même si tu n'en n'as pas conscience. C'est important.

                    -
                    Edité par michelbillaud 12 décembre 2018 à 13:39:45

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Probleme C comment l'optimiser?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown