Partage
  • Partager sur Facebook
  • Partager sur Twitter

exo 5 des tableaux

pas de pb car .........pas de code

    23 juillet 2006 à 14:43:53

    Sqalut, je suis actuellemet les cours de m@teo sur le c, et g essayé de refaire l'exo 5 sur les tableaux, mais je n'arrive à rien, le but est de classer les valeurs par ordre croissant d'un tableau.

    Je n'ais même pas réussi à faire l'algo :( , vous ave quelques pistes??? :-°




    J'ai regardé quelques topic dessus, mais j'ai pas vu grand-chaoes.



    @+ :soleil:
    • Partager sur Facebook
    • Partager sur Twitter
      23 juillet 2006 à 15:06:13

      Salut ^^ je suis nouveau
      Je suis moi aussi en train de suivre les cours de C, et jsutement je vient tout juste de faire les exos sur les tableaux (ce matin).

      A priori mes codes sont bon, vu que les resultats sont cohérent.

      je peut te donner deux ou trois pistes (ou mon code si tu veut mais bon, après l'exercice perd de son interet ) :lol:

      Déja, moi, pour reussir, j'ai eu besoin de créer un deuxième tableau ( de même taille ) dans lequel je stocke les valeur ordonnées.
      Ensuite il te faut faire des comparaison entre les différente valeurs de ton tableau.
      Pour cela, j'ai pris, par exemple, la première valeur de mon tableau et je l'ai comparer a chacune des valeur du tableau, puis idem pour la seconde entrée, etc...
      bon comme ça on peut penser que ça ne sert a rien ^^ mais rajoute un "compteur" lors des comparaisons, un compteur qui, en s'incrementant, te donne, en fin de boucle, la position a laquelle tu doit placer ta valeur pour quelle soit ordonnée.

      quand tu aura fait ça, tu aura un tableau ordonné et ton tableau d'origine, donc utilise une des focntions que tu as deja utilisée pour mettre les valeurs ordonnées dans ton tableau d'origine^^
      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2006 à 15:08:31

        ok, merci, il se pourrait que tu m'ais débloquer.

        Pour le deuxième tableau, j'y avais pensé, mais pas au reste, je te dirais si g réussi, et je mettrais mon code pr comparer.


        Edit: T'as essayer de gerer les égalités?



        @+ :soleil:
        • Partager sur Facebook
        • Partager sur Twitter
          23 juillet 2006 à 15:29:29

          la seule comparaison que j'ai se résume a :
            if ( tableau[n] > tableau[i] )


          Après, je ne sais pas si mon code est "beau" et "propre" mais il est fonctionnel
          • Partager sur Facebook
          • Partager sur Twitter
            23 juillet 2006 à 15:56:29

            Bonjour,
            je ne pense pas qu'il soit necessaire de créer un deuxieme tableau (même si ca fonctionne).
            Moi j'ai fait une double boucle for.
            Donc soit i l'index de la premiere boucle et j celui de la deuxieme.
            Dans la premiere boucle (qui va de 0 à taille du tableau -1 )j'initialise une variable qui contient la valeur i du tableau.
            Dans la deuxieme boucle (qui est à l'interieur de la premiere et qui va de i à taille du tableau -1 ) je fais la comparaison entre la valeur que j'ai initialisé dans la premiere boucle et une variable qui contient la valeur du tableau j.
            Si cette comparaison est vrai, j'echange les 2 valeurs et après soit je quitte la boucle dans laquelle je suis, soit je remplace la valeur de la première variable par celle de la deuxieme.

            Cela permet de ne passer en argument a ma fonction Tri_Tableau que le tableau a trier et ca taille.

            Voila si un truc est pas claire ou si vous voulez un bout du code ...
            A+
            • Partager sur Facebook
            • Partager sur Twitter
              23 juillet 2006 à 16:00:21

              je comprend ta méthode^^ a mona vis, même si les deux fonctionnes, la tienne doit être celle qui consomme le moins, car plus simple^^ je vais essayer de la refaire !!
              • Partager sur Facebook
              • Partager sur Twitter
                23 juillet 2006 à 16:04:13

                J'essaierais de faire ça demain au boulot(bientôt finis!!! pardon, je me dissipe :p ), je referais les deux si g le tps, mais déjà une devrait être pas mal.


                @+ :soleil:
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juillet 2006 à 20:51:40

                  Ca y est, g réussi vc la methode de Porki voici le code:


                  main.c:

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

                  int main()
                  {
                    char  chaine[Taillechaine] = {8,10,23,85};



                      ordonner(chaine,Taillechaine);


                          return 0;
                  }







                  affichetableau.c:


                  #include "prototypes.h"



                  void affiche(char chaine2[])
                  {
                      long i;

                      for (i = 0 ; i < Taillechaine; i++)
                      {
                          printf("%ld\n", chaine2[i]);

                      }
                  }


                  ordonner.c:


                  #include <string.h>
                  #include "prototypes.h"



                  char ordonner(char chaine[], long tailleTableau)
                  {
                     char chaine2[Taillechaine];
                      int i;
                      int j;
                      int y;

                      for(i = 0  ; i < Taillechaine; i++)
                      {
                          y = 0;
                          for( j = 0 ; j < ( Taillechaine) ; j++)
                          {

                              if ( chaine[i] <  chaine[j])
                              {



                              }
                              else
                              {
                                  y++;
                              }
                          }

                              y--;
                      chaine2[y] = chaine[i];


                      }
                      strcpy(chaine,chaine2);

                        affiche(chaine2);

                      }









                  prototypes.h:


                  #ifndef Taillechaine// Si la constante n'a pas été définie` le fichier n'a jamais été inclus
                  #define Taillechaine 4 // On définit la constante pour que la prochaine fois le fichier ne soit plus inclus
                  #endif


                  char ordonner(char tableau[], long tailleTableau);
                  void affiche(char tableau[]);









                  Par contre, j'ai pas compris ta méthode ZeroZero, tu pourrais afficher ton code stp? :euh:



                  @+ :soleil:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 juillet 2006 à 12:10:44

                    lord anubis :

                    jai aps trop compris pourquoi tu a ecrit ça :
                        if ( chaine[i] <  chaine[j])
                                {



                                }
                                else
                                {
                                    y++;
                                }


                    o_O
                    rien mettre entre deux accolade, ça sert a rien :lol: .
                    a la place je mettrais ça, ce qui revient exactement au même :)
                    if ( chaine[i] >  chaine[j])
                       y++;


                    et sinon, j'ai juste une question : pourquoi des tableaux de char ? dans tous les prototypes des fonctions du TP, ce sont des tableaux de long ^^ (normal on veut ordonner des nombres, pas des caractères )
                    a moins que j'ai louper un truc .... :lol:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 juillet 2006 à 14:08:47

                      Bonjour, moi je ne maitrise pas le C et je suit les cours de M@teo21 (d'ailleurs je le félicite pour son cours qui est tout bonnement super ;) )

                      Je suis moi meme en train de faire cet exercice et bien que nageant un peu a contre courrant, des choses que tu as écrit (lord anubis) me parraissent bysarres...

                      en premier :
                      #ifndef Taillechaine// Si la constante n'a pas été définie` le fichier n'a jamais été inclus
                      #define Taillechaine 4 // On définit la constante pour que la prochaine fois le fichier ne soit plus inclus
                      #endif


                      char ordonner(char tableau[], long tailleTableau);
                      void affiche(char tableau[]);


                      une question car je ne le sais pas, on doit inclure les librairies aussi dans les fichiers annexes (par exemple pour moi fonction.c et fonction.h) car moi pour les premiers exercices ca marche nikel sans le faire donc je me poser la question vu que personne n'avait fait la remarque

                      en second :
                      char ordonner(char chaine[], long tailleTableau)
                      {
                         char chaine2[Taillechaine];
                          int i;
                          int j;
                          int y;

                      Meme question que Le_porki, pourquoi des tableaux type char ?? o_O
                      et sinon tu met une variable pour la taille du tableau, ca plante pas toi lors de la compilation?
                      sinon pour info tu peut mettre
                      int i, j, y;


                      Bon je retourne chercher une solution ^^

                      PS: désolé si il y a des fautes, j'essaye de me controler mais msn a fait très mal a mon orthographe >_<
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 juillet 2006 à 18:28:13

                        Salut, pour le if, c vrai, mais au début, j'était parti pour faire des trucs dedans, t je l'ais pas up aprés.

                        pout titan, tu n'est pas obligé d'inclure les librairies ormal( stdlib,..." ds les fichiers annexes, c même deconseillé, contente toi d'inclure tes prototypes tout court.

                        J'ai mis des char parce que je suis faigneants, vous voyez pas le rapport hein? :p En fait, strcpy combine deux tableau de types char, au début, j'avais mis long, mais j'avais une erreur de types incohérents entre mes long et les char de srtcpy.

                        Pour la taille du tableau en variable, ça ne plante pas pr tout le monde, c juste <police nom="arial"></police>, mais ici, ce n'est pas une variable, tu dois voir le chapitre sur les defines vt :-° .


                        c vrai que, j'aurais pu tout declarer comme ça, mais comme je l'ais ais pas déclarées en même tps, j'y ais pas pensé, faut que je fasse quand même quand j'aurais 50 int :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 juillet 2006 à 18:48:15

                          :p quelqu'un pourrait-il mettre la réponse histoire de voir ou j'en étais la dedans ce serait une bonne idée que celui qui a le code l'affiche non....enfin moi ca m'avancerait merci et bon code a tous!!!!!! :-°:D
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 juillet 2006 à 19:57:41

                            Moi je veut bien mettre le mien mais j'en suis pas sur a 100 % :-°

                            void ordonnerTableau(long tableau[], long tailleTableau)
                            {
                                long tableauOrdonner[4] = {0}, i = 0, j = 0, temp;


                                for(j = 0; j < tailleTableau; j++)
                                {

                                    for(i = 0; i < tailleTableau; i++)
                                    {
                                        if(tableau[i] > tableau[i + 1])
                                        {
                                            temp = tableau[i];
                                            tableau[i] = tableau[i + 1];
                                            tableau[i + 1] = temp;
                                        }

                                    }
                                }


                                affiche(tableau, 4);
                            }


                            Mais j'ai un soucis, après la réalisation de cette fonction ma fonction (des questions précédentes) sommeTableau fait des choses bysarres :

                            voici mon main.c
                            #include <stdio.h>
                            #include <stdlib.h>
                            #include "fonction.h"



                            int main(int argc, char *argv[])
                            {
                                long tableau[4] = {18, 30, 13, 4}, i = 0, tableauCopie[4] = {0};
                                long valeurMax = 23;



                                // On affiche le contenu du tableau
                                affiche(tableau, 4);


                                printf("Somme du tableau : %ld\n", sommeTableau(tableau, 4));
                                printf("Moyenne du tableau : %lf\n", moyenneTableau(tableau, 4));

                                /*copie(tableau, tableauCopie, 4);
                                maximumTableau(tableau, 4, valeurMax);*/


                                ordonnerTableau(tableau, 4);


                                return 0;
                            }


                            et ma fonction sommeTableau et la je comprend pas pourquoi ca marche plus alors que j'y est pas touché depuis (et elle marché avant)
                            double sommeTableau(long tableau[], long tailleTableau)
                            {
                                long i, sommeTab = 0;

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


                            Et ca m'affiche ca :
                            18
                            30
                            13
                            4
                            Somme du tableau : 4
                            Moyenne du tableau : 16.250000
                            4
                            13
                            18
                            30
                            le pire c'est que pour la fonction moyenneTableau je fait appelle a cette fonction sommeTableau pour la diviser par tailleTableau
                            et là, la moyenne est ........ bonne o_O

                            Donc je sais pas si j'ai la meme calculette que mon pc mais bon o_O
                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 juillet 2006 à 21:33:54

                              Salut a tous,
                              je vous poste ma solution pour la fonctions de tri du tableau:

                              void ordonner_Tableau(long tableau[], long tailleTableau){
                                  int     i,j;
                                  long    val1=0,val2=0;
                                  for(i=0;i<tailleTableau;i++){
                                      val1 = tableau[i];
                                      for(j=i;j<tailleTableau;j++){
                                          val2 = tableau[j];
                                          if (val1 > val2){
                                              tableau[i] = val2;
                                              tableau[j] = val1;
                                              val1=val2;
                                          }
                                      }
                                  }
                              }


                              Voila y'a pas de commentaire mais c pas tres long et c'est facile a comprendre.
                              A+
                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 juillet 2006 à 17:21:34

                                Citation : lord anubis

                                En fait, strcpy combine deux tableau de types char, au début, j'avais mis long, mais j'avais une erreur de types incohérents entre mes long et les char de srtcpy.



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


                                tu l'a codée pour des prunes ?

                                mon code :
                                void ordonnerTableau(long tableau[], long tailleTableau)
                                     {
                                         long n, i, rang, tableauOrdonne[4];
                                //tableau de 4 cases... car mon tableau fait 4 cases aussi [pas rigoureux mais bon ...]

                                         for ( n = 0; n < tailleTableau; n++ )
                                         {
                                             rang = 0;
                                             for ( i = 0; i < tailleTableau; i++ )
                                             {
                                                 if ( tableau[n] > tableau[i] )
                                                 rang += 1;
                                             }
                                             tableauOrdonne[rang] = tableau[n];
                                         }
                                         copie( tableauOrdonne, tableau, 4);
                                     }


                                mais il est clair qu'i aurait été préférable de modifier directement le tableau d'origine , plutot que de passer par un "tableau temporaire" ^^ mais ça me paraissait plus simple comme ça :-°
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  27 juillet 2006 à 18:37:14

                                  Salut,
                                  j'ai poster ma solution sans passer par un tableau temporaire, juste au dessus de porki.
                                  Je pense que ma solution est meilleur car pas besoin de dimensionner un nouveau tableau.
                                  Par exemple la fonction de Porki ne fonctionne qu'avec un tableau à 4 valeurs.
                                  Au mieux il faudrait faitre un malloc pour que la fonction soit réutilisable mais c'est bcp de soucci pour pas grand chose.
                                  Si vous voulez des infos complémentaire ba poster.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    27 juillet 2006 à 19:28:38

                                    LOL, je l'ais pas codé cette fonction :-°:p


                                    @+ :soleil: je pars en vacances, ds deux jours, rendez-vous.............à la rentrée :'(
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    exo 5 des 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