Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C]Pb à l'exécution de mon script

Excercice de m@teo21sur les tableaux :)

Sujet résolu
    6 février 2006 à 16:58:11

    Bonjour

    Je suis hyper novice dans le domaine du C.
    Donc je me suis m'y au cours de m@teo21 :D. Je suis actuellement sur les tableaux ^^ . Je pense l'avoir bien étudié :-° et donc je me suis mis à codé les ptits exos à la fin de ce chapitre.
    Je vous met un copié collé de mon code, j'espère qu'il est assez clair.


    #include <stdio.h>
    #include <stdlib.h>
    double sommeTableau (double tableau[],double tailleTableau);
    double moyenneTableau (double tableau[],double taille);
    void copieTableau (double tableau[],double taille);
    void effacementTableau (double tableau[], double taille);
    void effacementChiffre (double tableau[], double taille);
    void triTableau (double tableau[], double taille);
    void afficheTableau (double tableau[], double taille);


    int main(int argc, char *argv[])
    {
       
      double tableau[5]={1,2,3,4,5};
      double taille=5,compteur=0;
      long choix=0;
     
      do
      {
        printf (" \n \n");
        printf ("********************* || Menu || ******************************************* \n \n");
        printf ("* 1: Calculer la somme du Tableau                                          *\n");
        printf ("* 2: Calculer la moyenne du Tableau                                        *\n");
        printf ("* 3: Initialiser le Tableau en copiant son contenu dans un second Tableau  *\n");
        printf ("* 4: Initialiser le Tableau                                                *\n");
        printf ("* 5: Initialiser les valeurs supèrieures a un maximum choisi               *\n");
        printf ("* 6: Classer les valeurs du Tableau par ordre croissant                    *\n");
        printf ("* 7: Afficher le tableau                                                   *\n\n");
        printf ("* 8: Quitter                                                               * \n");
        printf ("**************************************************************************** \n \n");
        printf ("Veuillez saisir votre choix \n ");
        scanf ("%ld", choix);
       
        switch (choix)
        {
               case 1:
                  printf ("L'addition des nombres contenus dans le tableau est de: %ld \n  *",  sommeTableau(tableau,taille));
                  break;
       
               case 2:
                   printf ("La moyenne du tableau est: %lf \n", moyenneTableau (tableau,taille));
                   break;
               
               case 3:
                    copieTableau (tableau,taille);
                    break;
               
               case 4:
                    effacementTableau (tableau,taille);
                    break;
                   
               case 5:
                    effacementChiffre (tableau,taille);
                    break;
               
               case 6:
                     triTableau (tableau,taille);
                    break;
                   
               case 7:
                    afficheTableau (tableau,taille);
                    break;
                   
               default:
                    {
                     printf ("Votre numéro ne correspond pas à un menu \n");
                     break;
                     }         
        }
       
      } while (choix != 8 );
     
      system("PAUSE");     
      return 0;
    }

    double sommeTableau (double tableau[],double tailleTableau)
    {
         long compteur=0;
         double addition=0;
         for (compteur=0; compteur<tailleTableau; compteur=compteur+1)
         {
             addition=tableau[compteur]+addition;
         }
         return addition;
    }

    double moyenneTableau (double tableau[],double taille)
    {
         return (sommeTableau(tableau,taille)/taille);
    }

    void copieTableau (double tableau[],double taille)
    {
           double tableau2[5];
           long compteur=0;
           for (compteur=0;compteur<taille;compteur=compteur+1)
           {
               tableau2[compteur]=tableau[compteur];
           }
           printf ("La copie s'est effectuee correctement ! \n");
    }

    void effacementTableau (double tableau[], double taille)
    {
         long compteur=0;
         for (compteur=0;compteur<taille;compteur=compteur+1)
         {
             tableau[compteur]=0;
         }
         printf ("Le tableau a ete initialisé corectement ! \n");
    }

    void effacementChiffre (double tableau[], double taille)
    {
         long chiffre=0;
         long compteur=0;
         long ligne=0;
         printf ("Veuillez saisir un maximum \n");
         scanf ("%d",chiffre);
         for ( compteur=0;compteur<taille;compteur=compteur+1)
         {
             ligne=tableau[compteur];
             if (ligne > chiffre)
             {
                       tableau[compteur]=0;
             }
         }
         printf ("Effacement terminé ! \n");
    }                   

    void triTableau (double tableau[], double taille)
    {
         long compteur=0,compteur2=0,temp=0;
         for (compteur=0;compteur<taille;compteur=compteur+1)
         {
             for (compteur2=0;compteur2<taille-1;compteur2=compteur2+1)
                 {
                     if (tableau[compteur]>tableau[compteur+1])
                     {                   
                          temp=tableau[compteur];
                          tableau[compteur]=tableau[compteur+1];
                          tableau[compteur+1]= temp;

                     }                       
                 }
         }
         printf ("Tri effectue ! \n");
    }

    void afficheTableau (double tableau[], double taille)
    {
         long compteur=0;
         for (compteur=0;compteur<taille;compteur=compteur+1)
         {
             printf ("%ld \n", tableau[compteur]);
         }
    }         
           


    Mon soucis que je rencontre ce trouve à l'excution de mon script (Quand je saisi un chiffre et que je valide, un fenetre s'ouvre et me dit que "tableau.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru." Pb de mémoire ? je vois vraiment pas là? dois je modifier mon script si oui où et comment?

    Je vous remercie par avance de l'aide que vous pourriez m'apporter ;)
    • Partager sur Facebook
    • Partager sur Twitter
      6 février 2006 à 17:05:41

      regarde ton premier scanf...normalement tu aurais dû mettre
      scanf("ld",&choix);
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        6 février 2006 à 17:15:15

        Oui, et c'est pour tout les scanf
        Note: on dit code, pas script
        • Partager sur Facebook
        • Partager sur Twitter
          7 février 2006 à 9:53:41

          Merci beaucoup, j'ai un peu honte car c'est pas la première fois que l'on me le dit (sacré & )

          Sinon je m'étais trompé dans le tri au lieu de compteur2 j'ai mis compteur 1.

          J'ai par contre un soucis avec les types; je comprend pas pq quand je met le type double j'ai que des valeur 0 dans mon tableau alors qu'avec le type long cela fonctionne bien o_O ?

          Autre ptit soucis se situe au niveau de la moyenne, j'ai comme résultat toujours "0" o_O , pourtant la fonction est bonne non?

          Et juste pour ma culture perso pq code et non script ^^ ?

          Merci d'avance pour vos précisions ;)
          • Partager sur Facebook
          • Partager sur Twitter
            7 février 2006 à 9:59:39

            Pour te répondre :

            - je ne l'ai pas dit expréssément mais je voulais que vous travailliez avec des nombres entiers (long) et non des décimaux (double). En informatique on utilise des entiers autant que possible, les double c'est vraiment quand on n'a pas d'autre choix, ça complique les choses sinon :p
            Il faudrait certainement que tu déclares ton tableau en rajoutant une virgule (enfin un point) pour créer un "nombre décimal" :
            double tableau[5]={1.0,2.0,3.0,4.0,5.0};

            Mais je te recommande de tout changer en long, de même pour les prototypes de tes fonctions. D'autant plus que ton double tailleTableau est une aberration (depuis quand y a-t-il des tableaux d'une taille de 4.7 ? :lol: ). La taille est entière.


            En passant TOUT ton code sur des long (les types de retour de fonction aussi, n'oublie rien) tu n'auras plus de problème de calcul.

            Pourquoi on dit code et pas script ? Parce qu'un script, c'est un bout de code qui s'insère dans quelque chose de particulier : par exemple un javascript, c'est un bout de code dans une page HTML.
            En revanche, on parle de code C parce qu'il n'y a que ça : du code, pour faire un programme. Pas de HTML autour ni rien ;)
            • Partager sur Facebook
            • Partager sur Twitter

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

              7 février 2006 à 10:28:49

              Merci d'avoir pris le temps de me répondre c'est sympa :)

              Merci pour l'explication de la différence code /script.

              En fait j'ai utilisé les doubles pour la moyenne que j'ai un peu extrapolé à tout mon code je dois l'avouer :euh: car j'avais en tête que la division utilisé dans la moyenne entraine en nombre décimal ^^ .

              Donc en effet j'ai rectifié mon code en ne mettant que des long et l'essentiel de mon code fonctionne sauf la moyenne qui m'affiche à chaque fois 0.00000 et je sais pas trop pq? :(

              ^^
              • Partager sur Facebook
              • Partager sur Twitter
                7 février 2006 à 10:39:34

                Chuis con.
                Pour la moyenne c'est forcément un double que tu dois renvoyer, bien sûr :) Ca peut très bien être une moyenne de 3.5 :p

                Pour tout le reste, tu prends et renvoies des long de partout en tout cas ;)
                • Partager sur Facebook
                • Partager sur Twitter

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

                  7 février 2006 à 10:53:58

                  Remerci :)

                  Ahh c'est deja mieux :) j'ai plus de 0.0000 :)

                  Maintenant je vais essayer de comprendre pq j'ai que des arrondis à la valeur inférieur (par exemple somme = 99 et moyenne me donne 19 au lieu de 19.8) mais j'ai vu ca dans un de tes cours je vais me replonger dessus :)

                  Merci beaucoup par ta réactivité ^^

                  P.S cool j'ai trouvé comme un grand :p j'ai transformé le type long de la fonction somme en double et là ca marche ^^

                  Ahh ca commence à rentrer bon vais attaquer les caractères maintenant :)

                  Merci encore ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [C]Pb à l'exécution de mon script

                  × 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