Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice debutant l'appel de fonction

cours les tableaux exercice 4

Sujet résolu
    21 juin 2019 à 14:20:46

    bonjour,je bute sur un probleme ma fonction maximumTableau ne s'éffectue pas!

    j'ai fait une ligne test ligne 26 et rien du tout.

    il y a quelque chose qui m'échappa je ne vois pas quoi. merci

    #include <stdio.h>
    #include <stdlib.h>
    
    void maximumTableau(int tableau[],int seuilMaxi,int tailleTableau);     //prototype de la fonction
    int main (int argc ,char *argv[])
    
    
    
    {
        int tableau[6] = {2,4,6,8,10,12},seuilMaxi = 6,tailleTableau = 6;   // initialisation du tableau
    
        void maximumTableau(int tableau[],int seuilMaxi,int tailleTableau); //appel de la fonction
        int i = 0;
        for(i = 0;i < tailleTableau;i ++)
        {
            printf("tableau 1 %d seuil maxi %d\n",tableau[i],seuilMaxi);    // affichage de résultat
        }
        return 0;
    }
    
    
    
    void maximumTableau(int tableau[],int seuilMaxi, int tailleTableau)     // début de la fonction
    {
        int j = 0;
        printf("test");                                                     //cette lignene s'affiche jamais
        for (j = 0;j < tailleTableau;j ++)
        {
            if( tableau [j] > seuilMaxi);
            {
                tableau [j] = 0;
            }
        }
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2019 à 15:42:23

      Bonjour,

      La ligne 12 ne contient pas un appel de fonction, mais une déclaration de fonction. Elle est d'ailleurs identique à la ligne 4.

      Pour appeler une fonction, il faut faire comme aux lignes 16 et 26 (qui appellent la fonction printf).

      -
      Edité par Marc Mongenet 21 juin 2019 à 15:42:53

      • Partager sur Facebook
      • Partager sur Twitter
        21 juin 2019 à 15:47:58

        Et la ligne29 ne va pas faire ce que tu souhaites ...
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2019 à 15:51:13

          merci de la réponse mais dans ce cas j’obtiens une erreur

          ||=== Build file: "no target" in "no project" (compiler: unknown) ===|
          |In function 'main':|
          |11|error: expected expression before 'int'|
          |11|error: too few arguments to function 'maximumTableau'|
          4|note: declared here|
          ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

          • Partager sur Facebook
          • Partager sur Twitter
            21 juin 2019 à 17:55:53

            zirconien a écrit:

            merci de la réponse mais dans ce cas j’obtiens une erreur

            Dans quel cas ? et tu sur de bien avoir fait ce qu'on t'a dit ?

            Le mieux c'est de poster ta correction !

            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2019 à 21:29:04

              >>magma

              ha oui en décrivant le fonctionnement de la boucle et de la condition je me suis rendu  compte que j n'atteind pas taille tableau il faut <=.

              merci mais pour l'instant je ne passe pas par ma fonction j'ai une erreur de compilation

              >>rouloule

              dans ce cas :

              modification retrait de void ligne

              mise a 7 de tailleTableauligne 10 en vu de la validite du test if ligne 28 sur tous le tableau

              #include <stdio.h>
              #include <stdlib.h>
              
              void maximumTableau(int tableau[],int seuilMaxi,int tailleTableau);     //prototype de la fonction
              int main (int argc ,char *argv[])
              
              
              
              {
                  int tableau[6] = {2,4,6,8,10,12},seuilMaxi = 6,tailleTableau = 7;   // initialisation du tableau
                  maximumTableau(int tableau[],int seuilMaxi,int tailleTableau); //appel de la fonction
                  int i = 0;
                  for(i = 0;i < tailleTableau;i ++)
                  {
                      printf("tableau 1 %d seuil maxi %d\n",tableau[i],seuilMaxi);    // affichage de résultat
                  }
                  return 0;
              }
              
              
              
              void maximumTableau(int tableau[],int seuilMaxi, int tailleTableau)     // début de la fonction
              {
                  int j = 0;
                  printf("test");                                                     //cette ligne ne s'affiche jamais
                  for (j = 0;j <6;j ++)
                  {
                      if( tableau [j] > seuilMaxi)
                      {
                          tableau [j] = 0;
                      }
                  }
              }
              



              énoncé de l'exercice :

              Créez une fonction maximumTableau qui aura pour rôle de remettre à 0 toutes les cases du tableau ayant une valeur supérieure à un maximum. Cette fonction prendra en paramètres le tableau ainsi que le nombre maximum autorisé (valeurMax). Toutes les cases qui contiennent un nombre supérieur àvaleurMaxdoivent être mises à 0. Prototype :

              void maximumTableau(int tableau[], int tailleTableau, int valeurMax);
              merci de votre attention. il n'y a pas de correction sinon j'aurais bucher dans mon coin,

              -
              Edité par zirconien 22 juin 2019 à 10:34:08

              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2019 à 3:11:02

                Ligne 11, ton appel de fonction n'est  toujours pas bon. 

                Il faut revoir ton cours sur les fonctions.

                Édit : tu n'as pas non plus corrigé la ligne 28.

                Et tu as rajouté une erreur ligne 26.

                -
                Edité par rouloude 22 juin 2019 à 3:17:00

                • Partager sur Facebook
                • Partager sur Twitter
                  22 juin 2019 à 10:36:08

                  ok merci je comprend pas je reprend le cours.

                  ligne 28 j'ai enlevé le point virgule

                  ligne 26 j'ai rétablis ma ligne originelle

                  c'est pas encore rentré la syntaxe....

                  edit :

                  merci pour votre attention ~(;o])>

                  correction :

                  #include <stdio.h>
                  #include <stdlib.h>
                  
                  void maximumTableau(int tableau[],int seuilMaxi,int tailleTableau);     //prototype de la fonction
                  int main (int argc ,char *argv[])
                  
                  
                  
                  {
                      int tableau[6] = {2,4,6,8,10,12},seuilMaxi = 6,tailleTableau = 6;   // initialisation du tableau
                      maximumTableau(tableau, seuilMaxi, tailleTableau); //appel de la fonction
                      int i = 0;
                      for(i = 0;i < tailleTableau;i ++)
                      {
                          if (tableau[i]> seuilMaxi)
                          {
                  
                  
                          tableau[i] = 0;
                          }
                          printf("tableau 1 %d seuil maxi %d\n",tableau[i],seuilMaxi);    // affichage de résultat
                      }
                      return 0;
                  }
                  
                  
                  
                  void maximumTableau(int tableau[],int seuilMaxi, int tailleTableau)     // début de la fonction
                  {
                      int j = 0;                                                    //cette ligne ne s'affiche jamais
                      for (j = 0;j <tailleTableau;j ++)
                      {
                          if( tableau [j] > seuilMaxi)
                          {
                              tableau [j] = 0;
                          }
                      }
                  }
                  

                  -
                  Edité par zirconien 22 juin 2019 à 11:57:19

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juin 2019 à 13:25:58

                    Ça fonctionne, mais tu traites deux fois tes données. D'abord dans la fonction maximumTableau puis dans la fonction main.

                    (Pour l'affichage du tableau tu devrais utiliser une fonction).

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 juin 2019 à 16:00:58

                      ouf j'avance un peu mais je bute sur des trucs la que je comprend pas j'ai creé un header détaché le programme en fonction.

                      cela allais jusqu'a ce que je créé saisietableau.

                      elle fonctionne quand je colle son code sur un main.

                      je l'ai déclaré correctement dans le header( enfin je pense)

                      et je l'appel aussi correctement ( enfin je pense).

                      a la compilation j'ai cette erreur:

                      Build: Debug in maximum tableau (compiler: GNU GCC Compiler)
                      obj\Debug\main.o||In function `main':
                      undefined reference to `saisietableau'
                      error: ld returned 1 exit status
                      Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s))

                      voici le main.h :

                      void saisietableau(int tableau[],int tailleTableau,int seuilMaxi);
                      void maximumTableau(int tableau[],int seuilMaxi,int tailleTableau);
                      void affichetableau(int tableau[],int tailleTableau,int seuilMaxi);
                      int saisiedonnees();

                      et le main.c :

                      #include <stdio.h>
                      #include <stdlib.h>
                      #include "main.h"
                      
                          //prototype de la fonction
                      int main (int argc ,char *argv[])
                      
                      
                      
                      {
                          int tableau[6] = {2,4,6,8,10,12}, seuilMaxi = 0, tailleTableau = 0, donneesaisies = 0;   // initialisation des variables
                          printf("saisie du seuil \n-> ");
                          seuilMaxi = saisiedonnees();
                          saisietableau(tableau, tailleTableau, seuilMaxi);                                          //appel de la fonction saisie
                          printf("saisie de la dimension du tableau\n-> ");
                          tailleTableau = saisiedonnees();
                          maximumTableau(tableau, seuilMaxi, tailleTableau);                                       //appel de la fonction maximize
                          affichetableau(tableau,tailleTableau,seuilMaxi);                                         //appel de la fonction affichage
                      
                      
                      void saisietableau(int tableau[],int tailleTableau,int seuilMaxi)                           // remplissage du tableau
                      {
                      
                      
                          int i = 0;
                          for(i = 0;i < tailleTableau;i ++)
                          {
                              if(i == 0)
                              {
                                  printf("saisie du premier terme\n-> ");
                              }
                              else
                                  printf("saisie du terme suivant\n-> ");
                              scanf("%d",&tableau[i]);
                              affichetableau(tableau,tailleTableau,seuilMaxi);                                        // affichage de l’encours de saisie
                          }
                      }
                          return 0;
                      }
                      
                      
                      
                      void maximumTableau(int tableau[],int seuilMaxi, int tailleTableau)                              // maximisation
                      {
                          int j = 0;
                          for (j = 0;j <tailleTableau;j ++)
                          {
                              if( tableau [j] > seuilMaxi)
                              {
                                  tableau [j] = 0;
                              }
                          }
                      }
                      void affichetableau(int tableau[],int tailleTableau,int seuilMaxi)
                      {
                          int i = 0;
                          for(i = 0;i < tailleTableau;i ++)
                          {
                      
                              printf("tableau 1 terme %d %d seuil maxi %d\n",i,tableau[i],seuilMaxi);                    // affichage du tableau maximisé
                          }
                          return 0;
                      }
                      int saisiedonnees(int donneesaisies)
                      {
                          //printf ("entrez le seuil \n-> ");
                          scanf("%d",&donneesaisies);
                          printf("seuil %d\n",donneesaisies);
                          return(donneesaisies);
                      }




                      merci

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 juin 2019 à 16:15:54

                        Tu ne trouve plus le bouton code </> ?

                        Le prototype de la fonction saisiedonnees est différent de sa définition !

                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 juin 2019 à 16:16:52

                          non mais j'ai été jeté pour spam!!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 juin 2019 à 16:18:48

                            Ton post entre les deux miens à disparu. C'est un bug du forum !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 juin 2019 à 16:22:31

                              pourtant c'est du copier collé et je viens de refaire le copier collé mais même résultat

                              main.h :

                              void saisietableau(int tableau[],int tailleTableau,int seuilMaxi);
                              void maximumTableau(int tableau[],int seuilMaxi,int tailleTableau);
                              void affichetableau(int tableau[],int tailleTableau,int seuilMaxi);
                              int saisiedonnees(int donneesaisies);

                              main.c :

                              #include <stdio.h>
                              #include <stdlib.h>
                              #include "main.h"
                              
                              
                              int main (int argc ,char *argv[])
                              
                              
                              
                              {
                                  int tableau[6] = {2,4,6,8,10,12}, seuilMaxi = 0, tailleTableau = 0, donneesaisies = 0;   // initialisation des variables
                                  printf("saisie du seuil \n-> ");
                                  seuilMaxi = saisiedonnees(donneesaisies);
                                  saisietableau(tableau, tailleTableau, seuilMaxi);                                          //appel de la fonction saisie
                                  printf("saisie de la dimension du tableau\n-> ");
                                  tailleTableau = saisiedonnees(donneesaisies);
                                  maximumTableau(tableau, seuilMaxi, tailleTableau);                                       //appel de la fonction maximize
                                  affichetableau(tableau,tailleTableau,seuilMaxi);                                         //appel de la fonction affichage
                              
                              
                              void saisietableau(int tableau[],int tailleTableau,int seuilMaxi)                           // remplissage du tableau
                              {
                              
                              
                                  int i = 0;
                                  for(i = 0;i < tailleTableau;i ++)
                                  {
                                      if(i == 0)
                                      {
                                          printf("saisie du premier terme\n-> ");
                                      }
                                      else
                                          printf("saisie du terme suivant\n-> ");
                                      scanf("%d",&tableau[i]);
                                      affichetableau(tableau,tailleTableau,seuilMaxi);                                        // affichage de l'encours de saisie
                                  }
                              }
                                  return 0;
                              }
                              
                              
                              
                              void maximumTableau(int tableau[],int seuilMaxi, int tailleTableau)                              // maximisation
                              {
                                  int j = 0;
                                  for (j = 0;j <tailleTableau;j ++)
                                  {
                                      if( tableau [j] > seuilMaxi)
                                      {
                                          tableau [j] = 0;
                                      }
                                  }
                              }
                              void affichetableau(int tableau[],int tailleTableau,int seuilMaxi)
                              {
                                  int i = 0;
                                  for(i = 0;i < tailleTableau;i ++)
                                  {
                              
                                      printf("tableau 1 terme %d %d seuil maxi %d\n",i,tableau[i],seuilMaxi);                    // affichage du tableau maximisé
                                  }
                                  return 0;
                              }
                              int saisiedonnees(int donneesaisies)
                              {
                                  //printf ("entrez le seuil \n-> ");
                                  scanf("%d",&donneesaisies);
                                  printf("seuil %d\n",donneesaisies);
                                  return(donneesaisies);
                              }
                              

                              erreur :

                              Build: Debug in maximum tableau (compiler: GNU GCC Compiler)
                              obj\Debug\main.o||In function `main':|
                              14|undefined reference to `saisietableau'|
                              error: ld returned 1 exit status|
                              Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s))


                              -
                              Edité par zirconien 22 juin 2019 à 16:28:26

                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 juin 2019 à 16:25:40

                                rouloude a écrit:

                                Le prototype de la fonction saisiedonnees est différent de sa définition !

                                Revois ton cours sur les fonction !!!

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 juin 2019 à 16:26:05

                                  j'ai corrige saisiedonnées pourtant elle fonctionnais .

                                  mais même résulat

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 juin 2019 à 16:26:52

                                    Tu as corrigé quoi ? on n'est pas des devins !!!
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      22 juin 2019 à 18:14:13

                                      Par rapport au dernier programme, je crois que c'est un problème de copier-coller : les lignes 38-39 font partie de la fonction main et doivent être déplacées juste après la ligne 19.

                                      Sans quoi la fonction main n'est toujours pas terminée lorsqu'arrive la définition de la fonction saisietableau qui se retrouve ainsi définie à l'intérieur du main. Outre que ce n'est normalement pas permis (mais ça dépend peut-être des options du compilateur ?), ça en fait (je crois) une deuxième fonction saisietableau qui n'est pas la même que celle déclarée dans le fichier .h. Aussi le compilateur cherche-t-il en vain la définition de cette dernière.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 juin 2019 à 18:51:19

                                        zirconien, évites de modifier ton code quand il y a eu des réponses, sinon, on n'y comprend plus rien, et les réponses n'on plus de sens !
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 juin 2019 à 9:57:49

                                          merci

                                          ok louloude, je faisait cela par habitude.

                                          robun en effet.

                                          il faut que j'apprenne a m'organiser quand j’écris le code cela m'évitera des erreurs, regardant le portée des instructions, comme celle là.

                                          merci

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          exercice debutant l'appel de fonction

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          • Editeur
                                          • Markdown