Partage
  • Partager sur Facebook
  • Partager sur Twitter

Encore les tableaux

Avis

Sujet résolu
    9 avril 2006 à 12:37:17

    Voila j'en suis au tableau et j'aimerais avoir votre avis pour optimiser mon tableau et me dis comment écrire plus "correctement":

    [EDIT] : J'ai posté les autres tableaux un peu plus bas.

    Ah oui j'ai oublié de le mettre en secret pour ceux qui n'ont pas fini DSL :-°
    Secret (cliquez pour afficher)
    //////////////////////////////////
    //        LES TABLEAUX          //
    //////////////////////////////////

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


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

    int main(int argc, char *argv[])
    {
        long tableau[4] = {10, 15, 3}; // initialisation du tableau
        long i = 0;

        sommeTableau(tableau, 4); // appelle du prototype

    getchar();
    return 0;
    }   

    long sommeTableau(long tableau[], long tailleTableau)
    {
         long i;
         long resultat = 0;
                     
         for (i = 0; i < tailleTableau; i++)
         { 
            printf("%ld\t", tableau[i]);
            resultat = resultat + tableau[i];//J'ajoute au résultat
         }
         printf(" = ");
         printf("%ld", resultat);       
    }
       


    Merci

    [EDIT] J'ai regardé les corredtions misent sur le forum (jusqu'à la page 54) aucune n'est possible a mon niveau (je pense à celle avec sizeof)
    J'ai aussi utilisé la barre de recherche mais aucun résultat satisfaisant.
    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2006 à 16:57:11

      Citation : Honor

      Voila j'en suis au tableau et j'aimerais avoir votre avis pour optimiser mon tableau et me dis comment écrire plus "correctement":


      • Dans main(), la variable i n'est pas utilisée.
      • Commentaire étrange (et inutile). On 'appelle' pas pas un prototype. On appelle une fonction.
      • Le tableau fait 4 mais il est initialisé avec 3 valeurs. Se souvenir que les autres valeurs seront 0.
      • Le 'getchar() ne sert à rien. DEV-C++ n'est plus maintenu et Code::Blocks corrige ce problème...
      • Il manque un '\n' à la fin de la ligne du dernier 'printf()'
      • Il n'est pas cohérent de définir une fonction qui retourne une valeur et de ne rien retourner...

      Corrigé. Pose des questions si tu ne comprends pas.
      Secret (cliquez pour afficher)

      /* main.c */
      /* LES TABLEAUX */

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

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

         for (i = 0; i < tailleTableau; i++)
         {
            /* J'ajoute au resultat */
            resultat += tableau[i];
         }

         return resultat;
      }

      int main(int argc, char *argv[])
      {
         /* initialisation du tableau */
         long tableau[4] =
            {
               10, 15, 3
            } ;

         long resultat = sommeTableau(tableau, sizeof tableau / sizeof * tableau);

         printf("resultat = %ld\n", resultat);

         return 0;
      }
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        9 avril 2006 à 20:44:52

        Merci de m'avoir répondu :)

        Citation : -ed-

        Dans main(), la variable i n'est pas utilisée.


        Tout a fait d'accord.

        Citation : -ed-

        Commentaire étrange (et inutile). On 'appelle' pas pas un prototype. On appelle une fonction.


        Mea culpa ! Pourtant j'ai relu le cours mais c'est vrai qu'il nous manque un index ou un dico.

        Citation : -ed-


        Le tableau fait 4 mais il est initialisé avec 3 valeurs. Se souvenir que les autres valeurs seront 0.



        C'est fait exprès ^^ J'ai repris les valeur de M@teo. Mais c'est vrai que c'est inutile.

        Citation : -ed-


        Le 'getchar() ne sert à rien. DEV-C++ n'est plus maintenu et Code::Blocks corrige ce problème...


        C'est parce que je lis partout qu'il faut utiliser getchar(); pour la portabilité du code (même si je ne compte pas le diffuser)

        Citation : -ed-

        Il manque un '\n' à la fin de la ligne du dernier 'printf()'


        Oui mais il n'y a rien après.

        Citation : -ed-


        Il n'est pas cohérent de définir une fonction qui retourne une valeur et de ne rien retourner...



        C'est vrai !! :euh: Tu viens de mettre le doigt sur MON GROS problème.
        J'ai lu les cours mais je n'ai pas compris 'return'. J'ai relu les cours fait des exos mais impossible de comprendre.
        [EDIT] Je ne comprend pas non plus sizeof, j'ai déjà lu des trucs la dessus mais a vrai dire je ne suis pas allé plus loin que les tableaux.

        ENCORE Merci beaucoup ça m'a vraiment aidé
        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2006 à 20:48:28

          Citation : Honor


          Citation : -ed-

          Il manque un '\n' à la fin de la ligne du dernier 'printf()'


          Oui mais il n'y a rien après.


          Mauvaise réponse.

          http://mapage.noos.fr/emdel/notes.htm#fflush_stdout
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            10 avril 2006 à 13:03:01

            Euh juste une remarque: Code Blocks n'ajoute pas de getchar(); dans le programme, il met seulement au moment du test dans l'IDE une pause au moment ou le programme renvoie 0, mais si on lance le programme en dehors de Code Blocks ce petit truc disparait, il faut donc quand même un getchar();...
            (Biensur je parle pour ceux qui ont une 'console de merde' (dixit je sais plus qui) qui se ferme toute seule quand le programmeest fini... ^^ )
            • Partager sur Facebook
            • Partager sur Twitter
              10 avril 2006 à 14:06:37

              Citation : Ze Killer-Whale

              mais si on lance le programme en dehors de Code Blocks ce petit truc disparait, il faut donc quand même un getchar();...


              Non. Il faut apprendre à configurer la console Windows ou le raccourci et à désactiver "Fermer en quittant".
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                10 avril 2006 à 19:09:50

                Peut-on m'aider pour le return, j'ai édité mon premiers message, parce que je n'ai pas compris.
                Merci
                • Partager sur Facebook
                • Partager sur Twitter
                  10 avril 2006 à 19:50:12

                  Citation : Honor

                  Peut-on m'aider pour le return, j'ai édité mon premiers message, parce que je n'ai pas compris.
                  Merci


                  Il manque return 'quelquechose d'intelligent' à la fin de la fonction sommeTableau(), et dans le main(), récupérer la valeur.

                  J'ai posté une correction, c'est pas clair ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    10 avril 2006 à 20:41:30

                    La correction c'est bon mais je ne comprend pas comment marche return en GENERAL par exemple quant tu met 'return resultat' ça fait quoi ?
                    • ça met la valeur de la fonction dans l'autre (j'ai réussi la meme chose avec une variable).
                    • ça sert à directement mettre la valeur dans le printf.
                    • OU autre chose.


                    Voilà je ne comprend pas mais pourtant c'est une notion importante que je ne trouve pas dans les cours du Sdz ni dans les livres que je me suis acheté. (si vous le voyez dans les cours prevenez moi)

                    Merci
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 avril 2006 à 21:29:23

                      Citation : Honor

                      La correction c'est bon mais je ne comprend pas comment marche return en GENERAL par exemple quant tu met 'return resultat' ça fait quoi ?


                      Ca permet d'écrire
                      int var = fonction();

                      C'est à dire de récupérer la valeur retournée par la fonction.

                      Si dans la fonction, il y a

                      int fonction (void)
                      {
                         return 123;
                      }

                      on récupère 123 dans var. Rien de mystérieux.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        11 avril 2006 à 7:42:10

                        C'est déjà beaucoup plus claire, enfin j'ai compris 'return'.
                        Je vais essayer d'en améliorer mon programme.

                        Merci beaucoup

                        PS : voici ma correction (bien que la tienne -ed- soit mieux, celle-ci est plus de mon niveau)

                        Secret (cliquez pour afficher)
                          //////////////////////////////////
                         //        LES TABLEAUX          //
                         //       version corrigée       //
                         //////////////////////////////////

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


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

                        int main(int argc, char *argv[])
                        {
                            long tableau[4] = {10, 15, 3}; // initialisation du tableau
                           

                            long resultat = sommeTableau(tableau, 4); // appelle du prototype
                            printf("resultat = %ld\n", resultat);

                        getchar();
                        return 0;
                        }   

                        long sommeTableau(long tableau[], long tailleTableau)
                        {
                             long i;
                             long resultat = 0;
                                         
                             for (i = 0; i < tailleTableau; i++)
                             { 
                                printf("%ld\t", tableau[i]);
                                resultat += tableau[i];//J'ajoute au résultat
                             }
                        return resultat;
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 avril 2006 à 9:18:10

                          Citation : Honor

                          voici ma correction


                          Cest bien. Juste une remarque de conception. Le 'printf()' dans la fonction sommeTableau() doit être considéré comme une 'trace' (debug). Dans le réalité, elle serait désactivée, par exemple comme ceci :

                          #define DBG 0 /* 0 | 1 */

                          /* ... */

                          #if DBG
                                  printf("%ld\t", tableau[i]);
                          #endif

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            11 avril 2006 à 13:32:12

                            Tient... Je connaissait pas ce principe du debug, c'est pas mal comme truc, moi je rajoutait des printf dans mon code quand ça plantait et je les retirais après à chaque fois mais c'est vrai que demander de compiler avec ou sans debug ça peut être pratique...
                            Juste merci -ed- pour cette astuce à laquelle je n'aurais pas pensé, parceque c'est vrai que sur les gros projets devoir tout remodifier pour voir où ça bug ça doit être un peu hard ^^
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 avril 2006 à 13:57:48

                              Citation : Ze Killer-Whale

                              Tient... Je connaissait pas ce principe du debug, c'est pas mal comme truc,



                              Il y a d'autres méthodes plus légères à base de


                              #ifndef H_DBG
                              #define H_DBG

                              /* dbg.h */

                              #define STR_(x) #x
                              #define STR(x) STR_(x)
                              #define REF __FILE__":"STR(__LINE__)" "

                              #ifndef DBG
                              #error "DBG must be define to 0 or 1"
                              #else
                              #if DBG
                              #include <stdio.h>
                              #define PRINTF(a) printf a
                              #else
                              #define PRINTF(a)
                              #endif
                              #endif

                              #endif /* guard */


                              /* main.c */
                              #define DBG 0
                              #include "dbg.h"

                              int main (void)
                              {
                                 PRINTF ((REF "error\n"));
                                 return 0;
                              }


                              main.c:8 error
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                11 avril 2006 à 20:40:08

                                Bonsoir à tous !

                                Je vois que ce topic est corrigé. Seulement, et ce dans le but de réellement progressé, je me vois obligé de vous fournir mon code en ce qui concerne le premier exercice à faire dans le chapitre sur les Tableaux (un peu normal de parler de tableaux dans un post concernant ces derniers, non ?).

                                Enfin bref, je tente une petite approche, légèrement différente de la votre, mais qui s'en rapproche quand même. Seulement paf, première fois que je tente réellement un truc sans l'aide du professeur M@teo et je me retrouve avec une erreur à la compilation.

                                Si quelqu'un pouvait m'expliquer pourquoi dans mon code au niveau de la compilation, Code::Block me signale que ma variable somme n'est pas déclaré ? D'avance, merci...

                                Norrecix

                                P.S. Je suis tête en l'air moi ce soir, j'oubliais le plus important, mon code (ne riez pas svp).

                                /*
                                Chapitre sur les Tableaux
                                Exercice n°1
                                */


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

                                long sommeTableau(long *tableau, long tailleTableau); // Prototype de la Fonction

                                int main()
                                {
                                    long tableau[7] = {15, 65, 84, 0, 645}, i = 0, resultat = 0; // Initialisation du Tableau
                                    resultat = affiche(tableau, 7); // Appel de la fonction
                                    printf("Le resultat est : %ld\n", resultat); // On affiche le résultat
                                        return 0;
                                }

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

                                    for (i = 0 ; i < tailleTableau ; i++) // On fait une boucle qui ajoute à "resultat" la valeur de la case correspondante
                                    {
                                        sommme += tableau[i];
                                    }
                                    return somme; // On renvoie la variable "somme"
                                }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  11 avril 2006 à 21:38:52

                                  Citation : Norrecix

                                  Si quelqu'un pouvait m'expliquer pourquoi dans mon code au niveau de la compilation, Code::Block me signale que ma variable somme n'est pas déclaré ?


                                  Arf ! Je te l'agrandis :
                                  sommme += tableau[i];
                                  Compte les jambes et divise par 3 !
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Music only !
                                    12 avril 2006 à 9:50:36

                                    Oops, je devais être fatigué moi hier soir... :-°

                                    Un grand merci -ed- ! :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 avril 2006 à 14:53:17

                                      Voilà je vous présente les 2 tableaux suivants (je suis TRES lent ^^ ) :

                                      Tableau de moyenne :

                                      Secret (cliquez pour afficher)
                                      #include <stdio.h>
                                      #include <stdlib.h>

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

                                      int main ()
                                      {
                                       long tableau [4] = {20, 42, 33, 2};

                                       double resultat = moyenneTableau(tableau, 4);

                                              printf("le resultat = %f", resultat);

                                      getchar();
                                      }
                                       
                                      double moyenneTableau(long tableau[], long tailleTableau)
                                      {
                                       int i; 
                                       double resultat = 0;
                                       
                                             for(i = 0; i < tailleTableau; i++)
                                             {
                                             resultat += tableau[i];
                                             printf("%d\t", tableau[i]);
                                             }
                                        resultat = resultat / i;
                                      return resultat;
                                      }


                                      Tableau copie :


                                      Secret (cliquez pour afficher)
                                      #include <stdio.h>
                                      #include <stdlib.h>

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

                                      int main(int argc, char *argv[])
                                      {
                                        long tableauOriginal [4] = {7, 8, 3, 6};
                                        long tableauCopie [4];

                                      copie(tableauOriginal, tableauCopie, 4);

                                        getchar();   
                                        return 0;
                                      }

                                      void copie(long tableauOriginal[], long tableauCopie[], long tailleTableau)
                                      {
                                           int i;
                                           
                                           for(i = 0; i < tailleTableau; i++)
                                           {
                                                 tableauCopie[i] = tableauOriginal[i];
                                                 printf("le nombre du tableau original est : %d\t", tableauOriginal[i]);
                                                 printf("le nombre copie est : %d\n", tableauCopie[i])
                                                 }
                                      }


                                      Mais comme il ne retourne rien je pourrai aussi écrire ça :
                                      Secret (cliquez pour afficher)

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

                                      int main(int argc, char *argv[])
                                      {
                                        long tableauOriginal [4] = {7, 8, 3, 6};
                                        long tableauCopie [4];
                                       int i;
                                       
                                       for(i = 0; i < 4; i++)
                                           {
                                                 tableauCopie[i] = tableauOriginal[i];
                                                 printf("le nombre du tableau original est : %d\t", tableauOriginal[i]);
                                                 printf("le nombre copie est : %d\n", tableauCopie[i])
                                           }

                                      getchar();     
                                        return 0;
                                      }


                                      Voilà si vous pouviez me dire ce qui n'est pas correct, MERCI.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 avril 2006 à 10:26:09

                                        J'aimerais surtout avoir une correction pour le tableauCopie.
                                        MErci :)

                                        Et voila mon tableauMaximum :

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

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

                                        int main(int argc, char *argv[])
                                        {
                                            long tableau [6] = {4, 23, 42, 12, 73, 40};
                                            long valeurMax = 40;
                                           
                                         maximumTableau(tableau, 6, valeurMax);
                                         
                                          system("PAUSE");     
                                          return 0;
                                        }

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

                                             for(i = 0; i < 6; i++)
                                             {
                                                   if ( tableau [i] > valeurMax)
                                                   {
                                                        tableau [i] = 0;
                                                   }
                                             printf("la valeur est : %d\n", tableau[i]);
                                             }
                                        }
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Encore les tableaux

                                        × 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