Partage
  • Partager sur Facebook
  • Partager sur Twitter

Solutions pour les exercices du chapitre 2 de la 2ieme partie ?

Hé ho, y'en a qui commence. ;o)

Anonyme
    17 août 2006 à 21:34:38

    Hi tout le monde,

    Récemment, j’ai eu envie de me mettre au C. J'en suis aux tableaux (les pointeurs m’ont tué à petit feu) et arrivé à la fin du chapitre de ces fameux tableaux, 5 énoncés d’exercices sont proposés dont l’unique but est de nous rendre chauves faire progresser. Malheureusement, aucune correction n’est apportée, juste une petite aide. J’aimerai donc savoir si je peux trouver les corrections à ces énoncés et où. ?_?

    Merci d’avance. :)

    Edit: erreur dans le titre, je veux parler du chapitre 3 et non des pointeurs.
    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2006 à 21:41:53

      Bah, dis nous l'exercice que tu n'arrives pas à faire. Essaie de faire un code et montre nous le.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        17 août 2006 à 21:53:03

        Pour le moment, je n'ai fait que le premier, l'addition. Voila ce que ca donne :

        #include <stdio.h>
        #include <stdlib.h>

        long sommeTableau(long tableau[], long tailleTableau);

        int main(int argc, char *argv[])
        {
                long tableau[4] = { 10, 20, 30, 40 }, i = 0;
                printf("%ld\\n\\n", sommeTableau(tableau, 4));
                system("PAUSE");
                return 0;
        }

        long sommeTableau(long tableau[], long tailleTableau)
        {
                long i;
                long resultat = 0;

                for (i = 0; i < tailleTableau; i++)
                {
                        resultat += tableau[i];
                }
                return resultat;
        }


        Si je demande les solutions c'est pour ne pas vous emcombrez avec mes futiles problèmes et pouvoir m'auto corriger dans mon coin. :)
        • Partager sur Facebook
        • Partager sur Twitter
          17 août 2006 à 21:57:26

          Et bien, ta fonction est correcte, continue ;)
          Vire juste la variable i dans ton main, elle sert à rien
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 août 2006 à 22:29:57

            Merci de tes propos encourageants. ^^
            Je viens de finir le code pour la moyenne, assez facile une fois celui de l'addition finit.

            #include <stdio.h>
            #include <stdlib.h>

            double moyenneTableau(long tableau[], long tailleTableau);

            int main(int argc, char *argv[])
            {
                long tableau[4] = {10, 20, 30, 40};
                printf("%lf\\n\\n", moyenneTableau(tableau, 4));
                system("PAUSE");
                return 0;
            }

            double moyenneTableau(long tableau[], long tailleTableau)
            {
                long i;
                double resultat = 0, resultat2 = 0;

                for (i = 0 ; i < tailleTableau ; i++)
                {
                resultat += tableau[i];
                resultat2 = resultat/4;
                }
                return resultat2;
            }



            Par contre, pour les 3 suivants, je sèche. :euh:
            • Partager sur Facebook
            • Partager sur Twitter
              17 août 2006 à 22:36:33

              Salut,

              Il n'y a pas de solutions, c'est justement pour forcer les lecteurs à travailler et pour qu'ils ne soient pas tenter de regarder les solutions.

              Ton addition semble bonne, par contre ta moyenne non. Deux variables résultat ça me semble pas logique, il faut effectuer la division APRES toutes les additions (or là tu additionnes puis tu divises, puis tu réadditionnes et tu redivises).

              D'autre part, ta moyenne ne fonctionne que pour un tableau à 4 cases (tu fais une division par 4, mais si c'est un tableau à 5 cases ça ne marchera plus !).

              Bon courage, corrige-toi et passe à la suite une fois que c'est assimilé ;)
              • Partager sur Facebook
              • Partager sur Twitter

              If you'd like to join us, read "How do we work at OpenClassrooms"! :)

              Anonyme
                18 août 2006 à 0:19:12

                Citation : M@teo21

                Deux variables résultat ça me semble pas logique, il faut effectuer la division APRES toutes les additions (or là tu additionnes puis tu divises, puis tu réadditionnes et tu redivises).

                D'autre part, ta moyenne ne fonctionne que pour un tableau à 4 cases (tu fais une division par 4, mais si c'est un tableau à 5 cases ça ne marchera plus !).



                Corrigé (du moins, je l'espère :D ) :

                double moyenneTableau(long tableau[], long tailleTableau)
                {
                    long i;
                    double resultat = 0;

                    for (i = 0 ; i < tailleTableau ; i++)
                    {
                    resultat += tableau[i];
                    }
                    resultat = resultat/tailleTableau;
                    return resultat;
                }


                Pour le troisième éxercice, on ne va pas dire que je ne trouve pas, juste que je n'arrive pas à la solution. Malgré le fait que je ne comprend pas correctement l'éxercice, j'ai essayé, ca donne ceci :

                #include <stdio.h>
                #include <stdlib.h>

                void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau);

                int main(int argc, char *argv[])
                {
                    long tableauOriginal[4] = {10, 20, 30, 40}, tableauCopie[4] = {0, 0, 0, 0};
                    system("PAUSE");
                    return 0;
                }

                void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau)
                {   
                   
                    long i;

                    for (i = 0 ; i < tailleTableau ; i++)
                    {
                    tableauOriginal[i] = tableauCopie[i];
                    printf("%ld\\n", tableauCopie[i]);
                    }
                }


                Je ne sais même pas si ma fonction vaut 1 sous...
                S'il vous plait, on ne se moque pas. :lol:
                • Partager sur Facebook
                • Partager sur Twitter
                  18 août 2006 à 0:28:48

                  Salut,

                  Ta fonction moyenne est bonne, tu as compris :)

                  Pour la copie, tu as aussi compris (c'était pas difficile).
                  Si je puis me permettre une remarque : ta fonction n'a aucune raison de faire un printf, tu devrais le supprimer (c'était peut-être pour tes tests). Si tu fais un printf, fais-le dans le main c'est plus logique.

                  Pourquoi plus logique ?
                  Parce que si tu appelles ta fonction "copie" tu t'attends à ce qu'elle copie, pas qu'elle affiche des choses à l'écran ;)

                  Voilà c'est tout, bon courage pour la suite, de mémoire je crois que le dernier exercice est un peu plus corsé ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                    18 août 2006 à 0:35:17

                    Utilises le type int pour tes variables. Le tuto C du sdz donne la mauvaise habitude de mettre des long et autre long double partout.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 août 2006 à 0:52:42

                      Knarf2 --> On s'écarte du sujet et je tenais simplement à signaler que maintant c'est presque exactement la même chose de mettre des long que des int... Perso j'utilise des int mais après c'est l'habitude de chacun.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        18 août 2006 à 1:43:02

                        Citation : M@teo21

                        Ta fonction moyenne est bonne, tu as compris :)



                        Ah ! Ca fait plaisir à lire. ^^

                        Citation : M@teo21

                        Pour la copie, tu as aussi compris (c'était pas difficile).
                        Si je puis me permettre une remarque : ta fonction n'a aucune raison de faire un printf, tu devrais le supprimer (c'était peut-être pour tes tests). Si tu fais un printf, fais-le dans le main c'est plus logique.

                        Pourquoi plus logique ?
                        Parce que si tu appelles ta fonction "copie" tu t'attends à ce qu'elle copie, pas qu'elle affiche des choses à l'écran ;)



                        Une fois que le grand manitou a validé ton code, oui, c'était facile :lol:
                        Merci pour ces conseils qui font toute la chose, et la font bien.

                        Hop, pour la fonction maximum :

                        #include <stdio.h>
                        #include <stdlib.h>

                        void maximumTableau(long tableau[], long tailleTableau, long valeurMax);

                        int main(int argc, char *argv[])
                        {
                            long tableau[4] = {10, 20, 30, 40}, i = 0;
                            system("PAUSE");
                            return 0;
                        }

                        void maximumTableau(long tableau[], long tailleTableau, long valeurMax)
                        {   
                           
                            long i;
                            for (i = 0 ; i < tailleTableau ; i++)
                            {
                                long valeurMax = 25;
                                if (tableau[i] > valeurMax)
                                {
                                      tableau[i] = 0;
                                }

                            }
                        }


                        Est-ce bon ?
                        Pour ce qui est de la dernière fonction, la fameuse "ordonnerTableau", la nuit porte conseil hein. :-°

                        PS : Knarf2 > désolé de faire confiance à l'auteur du tuto. ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 août 2006 à 1:51:40

                          Ta fonction est bonne je pense.
                          Mais pourquoi donnes-tu une valeur fixe à valeurMax (que tu initialises en plus !) alors qu'elle est déjà initialisée et déterminée dans l'appel de la fonction ?
                          long valeurMax = 25;
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            18 août 2006 à 2:19:25

                            Faut bien dire à la fonction "si une des valeurs du tableau est supérieure à x" alors "cette valeur vaut maintenant 0" ? Donc faut bien fixer un plafond (qui, là, est x) ? Non ? Sinon comment sait-on qu'une ou plusieurs valeurs du tableau dépassent la "valeurMax" si on ne s'est pas ce que vaut cette valeur maximale ?

                            Je peux me tromper, je recherche juste la solution au problème. :)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 août 2006 à 10:50:17

                              Oui oui,
                              Enfin moi j'aurai fait ça, je parcours le tableau et je remplace toutes les entrées supérieures à valeurMax par 0.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 août 2006 à 11:07:29

                                Ta déclaration de valeurMax est en effet inutile vu que tu l'envoies en dernier paramètre.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 août 2006 à 12:02:04

                                  La méthode pour la fonction maximum n'est pas bonne. Tu supposes que ton tableau possède des valeurs supérieures à 25, ce qui n'est pas du tout du tout efficace dans tous les cas tu t'en doutes.

                                  Même si tu initialisais la variable à 0, comment ferais-tu si le tableau ne contenait que des valeurs négatives ?

                                  Le mieux est d'initialiser cette variable "valeurmax" en lui donnant la valeur du premier élément du tableau (dès le début de la fonction). Ensuite, tu parcours le tableau et si tu trouves une valeur supérieure, ben tu la remplaces dans valeurmax :)

                                  Attention aussi, grosse erreur : tu as déclaré ta variable valeurmax dans la boucle, en C on doit déclarer ses variables au début de la fonction.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                                  Anonyme
                                    18 août 2006 à 12:20:06

                                    Arf, pourtant je vois assez bien ce que demande l'énoncé et ce que l'on attend de la fonction... :euh:
                                    J'ai essayé ca (mais apparement ça ne marche pas) :

                                    #include <stdio.h>
                                    #include <stdlib.h>

                                    void maximumTableau(long tableau[], long tailleTableau, long valeurMax);

                                    int main(int argc, char *argv[])
                                    {
                                        long tableau[4] = {10, 20, 30, 40}, i = 0;
                                        for (i = 0 ; i < 4 ; i++)
                                        {
                                            printf("%ld\\n", tableau[i]);
                                        }
                                        system("PAUSE");
                                        return 0;
                                    }

                                    void maximumTableau(long tableau[], long tailleTableau, long valeurMax)
                                    {   
                                        valeurMax = tableau[0];
                                        long i;
                                        for (i = 0 ; i < tailleTableau ; i++)
                                        {
                                            if (tableau[i] > valeurMax)
                                            {
                                                  tableau[i] = 0;
                                            }
                                        }
                                    }


                                    Maintenant valeurMax vaut tableau[0] (soit 10) donc théoriquement, tableau[1], tableau[2] et tableau[3] devraient être égals à 0, non ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 août 2006 à 12:23:19

                                      Euh non, celà ne sert à rien d'initialiser valeurMax dans la fonction. Mais ton probléme c'est que dans ton main, tu n'appelles pas ta fonction, elle ne va pas s'appeler toute seule
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        18 août 2006 à 12:33:04

                                        Citation : Octal

                                        Euh non, celà ne sert à rien d'initialiser valeurMax dans la fonction. Mais ton probléme c'est que dans ton main, tu n'appelles pas ta fonction, elle ne va pas s'appeler toute seule



                                        #include <stdio.h>
                                        #include <stdlib.h>

                                        void maximumTableau(long tableau[], long tailleTableau, long valeurMax);

                                        int main(int argc, char *argv[])
                                        {
                                            long tableau[4] = {10, 20, 30, 40}, i = 0;
                                            long valeurMax = 0;
                                            valeurMax = tableau[0];
                                            void maximumTableau();
                                               
                                            for (i = 0 ; i < 4 ; i++)
                                            {
                                                printf("%ld\\n", tableau[i]);
                                            }
                                            system("PAUSE");
                                            return 0;
                                        }

                                        void maximumTableau(long tableau[], long tailleTableau, long valeurMax)
                                        {   
                                            long i;
                                            for (i = 0 ; i < tailleTableau ; i++)
                                            {
                                                if (tableau[i] > valeurMax)
                                                {
                                                      tableau[i] = 0;
                                                }
                                            }
                                        }


                                        Un peu près comme ceci ? (ou pas ? :lol: )
                                        Là, je ne vois plus trop...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 août 2006 à 13:42:55

                                          Je te conseille de relire le cours sur les fonctions, tu ne l'as apparament pas assimilé. Essaie de le relire et si tu as des interrogations, n'hésite pas.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 août 2006 à 14:59:59

                                            ta fonction n'est pas censé retourner ta valeur maximale ?

                                            dans ce cas, au lieu de mettre
                                            void maximumTableau
                                            met plutôt
                                            long maximumTableau
                                            dans ta définition. Tu renvois la valeur max en faisant un return <ta variable>; dans ta fonction maximumTableau.

                                            Ensuite, dans les arguments de ta fonction maximumTableau, l'un d'entre eux est inutile :
                                            - tu peux trouver la variable "valeurMax" (qui est, si j'ai bien compris, une initialisation avec la première valeur de ton tableau) dans ta fonction. La ligne qui fait celà dans ton main, met là dans ta fonction (n'oublie pas d'instancier "valeurMax" dans ta fonction)

                                            Ensuite, pour appeler ta fonction, tu met dans le main :
                                            ValeurMaximum = maximumTableau(tableau,NbTabElement);
                                            où ValeurMaximum est le résultat de ta fonction, tableau est ton tableau et NbTabElement est le nombre de case de ton tableau
                                            Avec ce que je viens de te mettre, tu pourra un peu épurer ton main.

                                            Bon, ça c'était juste pour la partie appel de fonction.
                                            Ensuite, il y a une erreur dans ton main, dans la boucle for :
                                            printf("%ld\\n", tableau[i]);
                                            Tu met deux "\" à suivre et ton "n" ensuite. Je suppose donc que c'est parce que tu veux faire un retour à la ligne, c'est bien ça ?
                                            Comme tu as mis "\\", printf pensera que tu veux qu'il affiche un "\", et c'est ce qu'il fait. Donc actuellement, ton programme affichera
                                            10\n20\n30\n40\n

                                            Il faut donc que tu en supprime un pour avoir un retour à la ligne.

                                            Si vraiment tu sèches, je peux te mettre la solution.
                                            Pour information, je fais ça en 15 lignes (juste du code, je retire les lignes où je met des accolades et les #include).
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              18 août 2006 à 15:02:50

                                              Non, je ne crois pas que le but de cette fonction sois de retourner la valeur maximale. Le but est de mettre à 0 tous les nombres du tableau dépassant une certaine valeur. Le type void convient parfaitement.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                18 août 2006 à 15:24:05

                                                ah oups oui boulette :euh::-°:euh::lol: en fait après avoir lu ce qu'a écrit M@teo21 un peu plus haut, j'avais compris que c'était le but de cette fonction.

                                                bon ben euuuu tu oublies ce que j'ai mis concernant le fait qu'un paramètre ne sert à rien, le type de la fonction et le return. Celà dit le reste (c'est à dire l'erreur avec le printf et la manière d'appeler ta fonction, sauf que tu ne met pas "ValeurMaximum = ") est toujours valable.

                                                Et ta fonction est bonne, ne la touche pas.
                                                Donc il y a juste deux chose à voir :
                                                - la manière d'appeler ta fonction
                                                - le printf
                                                Ensuite ça roule et faut recommencer à se casser la tête pour le cinquième exo ;)(mais pas si compliqué que ça rassure-toi ! )
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  18 août 2006 à 17:10:47

                                                  Hi,

                                                  Pour les anti-slash, je ne sais pas de quoi cela est du mais chez moi il y a toujours un anti-slash pour un "n" ou un "t". Un bug du site quand on c/c ?
                                                  Je pense avoir suivit tes conseils Master Thor mais il me met une erreur à la ligne 11. Le code :

                                                  #include <stdio.h>
                                                  #include <stdlib.h>

                                                  void maximumTableau(long tableau[], long tailleTableau, long valeurMax);

                                                  int main(int argc, char *argv[])
                                                  {
                                                      long tableau[4] = {10, 20, 30, 40}, i = 0;
                                                      long valeurMaximum = 0, valeurMax = 0;
                                                      valeurMax = tableau[0];
                                                      valeurMaximum = maximumTableau(tableau, 4);
                                                     
                                                      printf("%ld\\n", valeurMaximum);

                                                      system("PAUSE");
                                                      return 0;
                                                  }

                                                  void maximumTableau(long tableau[], long tailleTableau, long valeurMax)
                                                  {   
                                                      long i;
                                                      for (i = 0 ; i < tailleTableau ; i++)
                                                      {
                                                          if (tableau[i] > valeurMax)
                                                          {
                                                                tableau[i] = 0;
                                                          }
                                                      }
                                                  }


                                                  J'ai créer une nouvelle varaible ; mauvais choix ? On peut réunir valeurMaximum et valeurMax en une seule variable ?
                                                  C'est rageant d'être presque au but et de bloquer quand on pense avoir révolutionné la progrmmation. :lol:

                                                  PS : le message d'erreur est le suivant :

                                                  11 too few arguments to function `maximumTableau'
                                                  11 void value not ignored as it ought to be
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    18 août 2006 à 17:12:16

                                                    Il manque un argument dans
                                                    valeurMaximum = maximumTableau(tableau, 4);

                                                    La fonction demande 3 arguments ;)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      18 août 2006 à 17:27:25

                                                      Tu as relu le cours sur les fonctions. Tu essaies de récupérer le retour de ta fonction dans ton main alors qu'elle renvoie un void. Il y a un problème donc.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        18 août 2006 à 17:32:23

                                                        Si vous vous contredisez, je vais avoir une crise cardiaque moi. :D

                                                        Le troisième argument c'est la valeurMax ?

                                                        valeurMaximum = maximumTableau(tableau, 4, valeurMax);


                                                        Ca ne veut toujours pas compiler, youpie. :euh:
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          18 août 2006 à 17:34:40

                                                          Bah oui, je t'ai signalé ton erreur. Tu tentes de stoquer dans une variable le retour de la fonction alors que ta fonction est de type void. C'est normal que ça ne veuille pas compiler. Réfléchis, tu vas y arriver.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Anonyme
                                                            18 août 2006 à 17:41:10

                                                            Franchement là, c'est le vide autour de moi... *_*
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              18 août 2006 à 17:42:29

                                                              Tout bête : Secret (cliquez pour afficher)
                                                              #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))

                                                              long maximumTableau(long tableau[])
                                                              {   
                                                                  long i, valeurMax = 0;
                                                                  for (i = 0 ; i < ARRAY_SIZE(tableau) ; i++)
                                                                  {
                                                                      if (tableau[i] > valeurMax)
                                                                      {
                                                                            valeurMax = tabeau[i];
                                                                      }
                                                                  }
                                                                  return valeurMax;
                                                              }
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Solutions pour les exercices du chapitre 2 de la 2ieme partie ?

                                                              × 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