Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide sur excercice avec tableau et pointeur

    13 mai 2017 à 21:57:49

    Bonjour,

    J’apprends le langage C.

    Je requiers un peu d’aide pour cet exercice avec les pointeurs et tableau.

    L’énoncé de l’exercice est :

    1/Écrire un programme, qui lit au clavier un nombre n.

    2/qui est un nombre de notes.

    3/ Ensuite, le programme lit n notes au clavier.

    4/ Il affiche la moyenne des notes et ensuite

    5/ il affiche les n notes qu'il a lues au clavier.

    Les notes sont des float , la moyenne aussi.

    Si une note entrée n'est pas comprise entre 0 et 20,

    votre programme ne doit pas en tenir compte et la redemander.

    Les n+1 derniers nombres affichés doivent être la moyenne,

    puis les n notes.

    J’ai commencé à écrire la fonction moyenne mais pas encore mise en œuvre.

    Sinon dans le main je n’arrive pas à déterminer pourquoi il ne passe pas dans la boucle if.

    #include <stdio.h>
    
    float moyenne(){
        int i;
        int nombrenote = 0;
        float tableaunote [nombrenote];
        float somme = tableaunote[0];
        for(i=0; i < nombrenote; i++)    {
            somme = tableaunote[i] + somme ;
        }
        return (float) somme/ (float) nombrenote;
    }
    
    int main() 
    {
     int somme = 0;
     int nombrenote = 0;
     float nombre1 = 0;
     float note = 0;
     float moyenne = 0;
     float moyennenote = 0;
     float tableaunote [nombrenote];
     int i,j;
     printf("combien de note a inserer\n");
     scanf("%d",&nombrenote);
     printf ( "le nombre de note a renseigner est %d\n", nombrenote);
        for (i=0; i<nombrenote; i=i+1){
        printf ("Veuillez renseigner les notes\n");
        scanf ("%f, &note");
            if (note<0 || note>20) {
            printf ("veuiller saisir à nouveau la note\n");
            scanf ("%f, &note");
            }
            else {
            tableaunote[i]=note;
            }
        }
     
     return 0;
    }
    
    
    
    


    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2017 à 22:00:07

      Hello,

      YT1 a écrit:

       int nombrenote = 0;
       float tableaunote [nombrenote];
      

      Tu déclares un VLA ( Variable Length Arrays ) de taille nulle comme nombrenote est égal à zéro.

      Pour tes connaissances tu peux à la limite faire :

      int nombrenote = 0;
      scanf("%d", &nombrenote);
      float tableaunote[nombrenote];

      YT1 a écrit:

      scanf ("%f, &note"); // Ligne 29 et ligne 32.
      
      Rien ne te choque sur ces lignes ?
      #Edit, je n'entre pas dans les détails par pure flemmardise :ange:

      -
      Edité par ASW_ 13 mai 2017 à 22:18:49

      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2017 à 22:23:59

        Hello

        Merci

        Je viens de comprendre mon erreur.

        C'est gros et je ne l'ai pas vu.

            for (i=0; i<nombrenote; i=i+1){
            printf ("Veuillez renseigner les notes\n");
            scanf ("%f", &note);
                if (note<0 || note>20) {
                printf ("veuiller saisir à nouveau la note\n");
                scanf ("%f", &note);
                tableaunote[i]=note;
                }
                else {
                tableaunote[i]=note;
                }
            }

        J'ai quelques difficulté pour la fonction moyenne.

        La fonction doit récupérer toutes les valeurs entrées, faire la somme et diviser par le nombre de note.

        #Edit, tu as raison ça restera dans ma mémoire.

        Yohan

        -
        Edité par YT1 13 mai 2017 à 22:25:03

        • Partager sur Facebook
        • Partager sur Twitter
          13 mai 2017 à 22:31:59

          Hello,

          Tu as une erreur d'organisation dans ton code: que se passe-t-il si, en ligne 6, je rentre un nombre <0 ou >20 ? M'est avis que placer quelque part un do....while pour vérifier que la note entrée soit correcte ne serait pas du luxe.

          Pour la moyenne: une boucle for pour additionner les éléments du tableau, et le résultat est divisé par le nombre d'éléments (et pourquoi pas: créer une fonction qui le fait....)

          • 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

            13 mai 2017 à 22:54:06

            Salut,

            Je te conseille de découper ton code en fonctions que tu pourras tester facilement pour écrire ton code.

            int main(void)
            {
                int nombre_notes = obtenir_nombres_notes();
                double notes[nombre_notes] = {0};
                int i = 0;
                for(i = 0; i < nombre_notes; i++)
                    notes[i] = saisir_notes();
                double moyenne = calculer_moyenne(notes, nombre_notes);
                printf("%lf", moyenne);
                for(i = 0; i < nombre_notes; i++)
                    printf(" %lf", notes[i]);
                return 0;
            }
            

            On peut encore améliorer, mais c’est une bonne base.

            -
            Edité par yo@n97one 13 mai 2017 à 22:57:14

            • Partager sur Facebook
            • Partager sur Twitter
            Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
              14 mai 2017 à 19:52:32

              Bonjour,

              J'ai ajouté la boucle do .. while.

              Par contre j'ai un soucis avec la fonction moyenne.

              #include <stdio.h>
              
              float sommetotale = 0; 
              
              float moyenne(){
                  int i;
                  int nombrenote = 0;
                  float tableaunote [nombrenote];
                  float somme = tableaunote[0];
                  for(i=0; i < nombrenote; i++)    {
                      somme = tableaunote[i] + somme ;
                  }
                  sommetotale = somme/nombrenote;
                  return sommetotale;
              }
               
              int main()
              {
               int somme = 0;
               int nombrenote = 0;
               float nombre1 = 0;
               float note = 0;
               float notemoyenne = 0;
               float notemoyennenote = 0;
               float tableaunote[nombrenote];
               int i,j;
               printf("combien de note a inserer\n");
               scanf("%d",&nombrenote);
               printf ( "le nombre de note a renseigner est %d\n", nombrenote);
                  for (i=0; i<nombrenote; i=i+1){
                  printf ("Veuillez renseigner les notes\n");
                  scanf ("%f", &note);
                      do  {
                      printf ("veuiller saisir à nouveau la note\n");
                      scanf ("%f", &note);
                      tableaunote[i]=note;
                      }
                      while (note<0 || note>20);
                  }
                printf ("la moyenne est %f\n", sommetotale );
               return 0;
              }
              
              
              

              Vous pouvez me dire ce qui ne va pas avec ma fonction ?

              Yohan

              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2017 à 19:57:20

                Relis un cours sur les fonctions et sur la portée des variables. Les variables tableaunote de ta fonction moyenne et de ta fonction note n’ont rien à voir. Même chose pour les variables sommetotale. Tu dois passer le tableau en paramètre à ta fonction. Regarde par exemple mon code plus haut et essaye de le compléter en écrivant les fonctions manquantes.

                • Partager sur Facebook
                • Partager sur Twitter
                Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                  14 mai 2017 à 20:29:02

                  Et la c'est mieux ?

                  #include <stdio.h>
                  
                  float sommetotale = 0; 
                  
                  float moyenne(){
                      int i;
                      int nombrenote = 0;
                      float tableaunote [nombrenote];
                      float somme = tableaunote[0];
                      for(i=0; i < nombrenote; i++)    {
                          somme = tableaunote[i] + somme ;
                      }
                      sommetotale = somme/nombrenote;
                      return sommetotale;
                  }
                   
                  int main()
                  {
                   int somme = 0;
                   int nombrenote = 0;
                   float nombre1 = 0;
                   float note = 0;
                   float notemoyenne = 0;
                   float notemoyennenote = 0;
                   float tableaunote[nombrenote];
                   int i,j;
                   printf("combien de note a inserer\n");
                   scanf("%d",&nombrenote);
                   printf ( "le nombre de note a renseigner est %d\n", nombrenote);
                      for (i=0; i<nombrenote; i=i+1){
                      printf ("Veuillez renseigner les notes\n");
                      scanf ("%f", &note);
                          do  {
                          printf ("veuiller saisir à nouveau la note\n");
                          scanf ("%f", &note);
                          tableaunote[i]=note;
                          }
                          while (note<0 || note>20);
                      }
                      
                    sommetotale = moyenne (nombrenote)   ;
                    //printf ("la moyenne est %f\n", sommetotale );
                   return 0;
                  }
                  
                  
                  

                  Au passage, j'ai relu ce chapitre

                  https://openclassrooms.com/courses/apprenez-a-programmer-en-c/les-fonctions-1

                  Yohan

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 mai 2017 à 20:33:05

                    Non, on va commencer par plus simple, fais une fonction qui renvoie le double d’un entier.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                      22 novembre 2017 à 13:55:25

                      Après qlques modif 

                      ça me donne ça :

                      #include <stdio.h>
                      
                      float sommetotale = 0;
                      
                      float moyenne(float nb, float *tabn[]){
                          int i;
                          float *tableaunote;
                          int nombrenote = nb;
                          tableaunote = tabn;
                          float somme = tableaunote[0];
                          for(i=1; i < nombrenote; i++)    {
                              somme += tableaunote[i];
                          }
                          sommetotale = somme/nombrenote;
                          return sommetotale;
                      }
                      
                      int main()
                      {
                       int somme = 0;
                       int nombrenote = 0;
                       float nombre1 = 0;
                       float note = 0;
                       float notemoyenne = 0;
                       float notemoyennenote = 0;
                       float tableaunote[nombrenote];
                       int i,j;
                       printf("nombre de note\n");
                       scanf("%d",&nombrenote);
                       printf ( "le nombre de note a renseigner est %d\n", nombrenote);
                         for (i=0; i<nombrenote; i=i+1)
                         {
                          printf ("Veuillez renseigner les notes\n");
                          scanf ("%f", &note);
                              while (note<0 || note>20)
                              {
                              printf ("veuiller saisir à nouveau la note\n");
                              scanf ("%f", &note);
                              }
                              tableaunote[i]=note;
                          }
                      
                        sommetotale = moyenne(nombrenote, tableaunote);
                        printf ("la moyenne est %f\n", sommetotale );
                        for (i=0; i<nombrenote; i++)
                          printf("%f\n", tableaunote[i]);
                       return 0;
                      }



                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 novembre 2017 à 14:42:20

                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c||In function 'moyenne':|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|9|warning: assignment from incompatible pointer type|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c||In function 'main':|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|43|warning: passing argument 2 of 'moyenne' from incompatible pointer type|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|5|note: expected 'float **' but argument is of type 'float *'|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|27|warning: unused variable 'j'|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|25|warning: unused variable 'notemoyennenote'|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|24|warning: unused variable 'notemoyenne'|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|22|warning: unused variable 'nombre1'|
                        D:\Developpement\CodeBlocks\GCC\ConsoleC\main.c|20|warning: unused variable 'somme'|
                        ||=== Build finished: 0 errors, 7 warnings ===|
                        
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Aide sur excercice avec tableau et pointeur

                        × 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