Partage
  • Partager sur Facebook
  • Partager sur Twitter

C cours/tableaux/exercice 5

Sujet résolu
    16 avril 2006 à 17:53:04

    bonjour,
    ça fait 2h que je suis sur l'exercice 5 que donne à faire mateo et je n'y arrive pas, pourrais-je avoir une piste?

    voila le code que j'ai fait pour l'instant je sais qu'il n'est pas bon:
    #include <stdio.h>
    #include <stdlib.h>


    void ordonnerTableau(long tableau[], long tailleTableau); //prototypes
    void verification(long tableau[], long *pointeurValeurAVerifier, long *pointeurValeurCaseActuelle, long nombreDeTour);

    int main(int argc, char *argv[])
    {
        long i, tableau[4] = {2,0,1,3}, tailleTableau = 4;

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

        printf("\n\n");

        ordonnerTableau(tableau, tailleTableau);

       system("PAUSE");
       return 0;
    }
    // boucle qui test si la valeur étudiée est plus petites que les autres valeurs du tableau
    void ordonnerTableau(long tableau[], long tailleTableau)
    {
        long i, j;

        for(i = 0; i < tailleTableau; i++) //case du tableau qu'on test
        {
            for(j = 0; j < tailleTableau; j++) //boucle qui passe toutes les valeurs du tableau au test
            {
              if(i != 0) //si ce n'est pas le premier tour on fait la vérification suivante
              {
                verification(tableau, &tableau[j], &tableau[i], i);
              }
              else//sinon on ne la fait pas
              {
                if(tableau[j] <= tableau[i])
                    tableau[i] = tableau[j];
              }
            }
        }

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

    void verification(long tableau[], long *pointeurValeurAVerifier, long *pointeurValeurCaseActuelle, long nombreDeTour)
    {
        long k, i = nombreDeTour, test1 = 0, test2 = 0;

        for(k = 0; k < i; k++)
        {
            if(*pointeurValeurCaseActuelle == tableau[k]) //vérifie si la case ne contient pas une valeur déjà ordonnée
                test1 += 1;
        }

        if(test1) //si la valeur de la case à deja été ordonné on la remplace par la valeur qu'on veut vérifier
           *pointeurValeurCaseActuelle =  *pointeurValeurAVerifier;

        for(k = 0; k < i; k++)
        {
            if(*pointeurValeurAVerifier > *pointeurValeurCaseActuelle || *pointeurValeurAVerifier == tableau[k])//vérifie si la valeur n'est pas égale au(x) valeur(s) déjà ordonnée(s)
                test2 += 1;
        }

        if(!test2) //si la valeur qu'on veux vérifier n'a pas déjà étée ordonné et si elle plus petite que la valeur de la case actuelle on la remplace
          *pointeurValeurCaseActuelle = *pointeurValeurAVerifier;
    }

    Citation : resultat

    2
    0
    1
    3

    0
    1
    3
    3



    Et quand je change l'ordre des numéraux dans le tableaux: tableau[4] = {3,0,1,2}

    Citation : resultat

    2
    0
    1
    3

    0
    1
    2
    2

    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2006 à 23:18:17

      Citation : patxiku

      ça fait 2h que je suis sur l'exercice 5 que donne à faire mateo et je n'y arrive pas, pourrais-je avoir une piste?


      Algorithme 'tri-bulle' (bubble sort)
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        16 avril 2006 à 23:25:43

        Quand tu as fini ça, tu peux attaquer l'algorithme 'tri-rapide' (quick sort).

        Wikipedia pour les algo ;)
        • Partager sur Facebook
        • Partager sur Twitter
          17 avril 2006 à 11:26:38

          Au final,
          je n'ai qu'à l'adapter en changeant les noms, je me demende si il y en a qui ont trouvé.. surement. Merci beaucoup

          Mais j'ai une question que veux dire cette ligne de code:
          typedef int tab_entiers[MAX];
          • Partager sur Facebook
          • Partager sur Twitter
            17 avril 2006 à 11:45:11

            Salut,

            Je t'envoie vers mon post si tu veux une correction (je ne sais pas quel algo j'utilise hehe, je l'ai imaginé).

            Il parait que ma technique n'est pas la meilleure. En fait, moi je test la première valeur de la table, et je la mets à la place qui lui convient dans la table.

            Voilà le lien vers mon post : ->hOp<-

            On m'a dit que ma technique n'est pas la plus simple.
            La technique la plus simple (viable jusqu'à une centaine de valeurs, après, trop long) est la technique dite de la permutation, aussi appellée tri par échange, ou tri-bulles (d'après ce que j'ai compris).

            ->hOp<-

            @+
            • Partager sur Facebook
            • Partager sur Twitter
              17 avril 2006 à 12:12:41

              Citation : patxiku

              Au final,
              je n'ai qu'à l'adapter en changeant les noms, je me demende si il y en a qui ont trouvé.. surement. Merci beaucoup

              Mais j'ai une question que veux dire cette ligne de code:

              typedef int tab_entiers[MAX];

              Définit un surnom de type (alias) nommé tab_entiers signifiant 'tableau de MAX int'.

                 tab_entiers tab;

                 tab[0] = 123;
                 tab[MAX - 1] = 456;

              Cette notation est rarement utilisée...
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !

              C cours/tableaux/exercice 5

              × 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