Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compléter un le programme tri.

    22 novembre 2020 à 16:02:45

    Bonjour je suis débutant en C j'aimerai compléter le programme en bac et j'ai besoin d'un coup  de pouce de mes aînés dans ce langage.

    a)Vérification des entrées

    compléter le programme suivant  afin de permettre un tri alphabétique ou décroissant. (plusieurs solutions possibles) Comment faire pour n'avoir à définir qu'une seule fonction de tri ? (on pourra par exemple s'inspirer de la technique utilisée par la fonction standard qsort() en regardant le manuel interactif de cette fonction).

    b) Vérification des entrées

    • Vérifier la taille du nom et du prenom entrés (tronquer si trop de caractères)
    • Vérifier que l'age est bien numérique (lire l'age sous forme alphabétique puis le tranformer en entier en utilisant la fonction atoi())

    c) Mémoire dynamique

    Généraliser le programme pour un nombre quelconque d'items : utiliser des pointeurs et les fonctions malloc(), realloc() et free().

    d) Sauvegarde et relecture

    Permettre de sauvergarder les données et de les relire dans un fichier./* ===================================================================== *
     *
     * fichier tri.c
     * 
     * ===================================================================== */
    
    #include <stdio.h>
    #include <string.h>
    #include "tri.h"
    #include "donnees.h"
    
    /* ===================================================================== */
    
    void Trier(ITEM items[], int nb_items)
    {
      int i, j;
      ITEM swap;
      
      for (i = 0; i < nb_items; i++)
        for (j = i + 1; j < nb_items; j++)
          if (items[i].age > items[j].age) {
    	swap = items[j];
    	items[j] = items[i];
    	items[i] = swap;
          }
    }
    
    /* ===================================================================== */
    
    void Choix(ITEM items[], int nb_items)
    {
      char cas[10];
    
      while (TRUE) {
        printf("*** Tri :\n");
        printf("- 1 ou A - numerique selon l'Age (croissant)\n");
        printf("- 2 ou D - numerique selon l'age (Decroissant)\n");
        printf("- 3 ou N - alphabetique sur le Nom\n");
        printf("- 4 ou P - alphabetique sur le Prenom\n");
    
        scanf("%s", cas);
    
        switch (cas[0]) {
        case '1': case 'A': case 'a':
          Trier(items, nb_items);
          return;
    
        default:
          printf("! Choix incorrect [%s] : entrer une autre valeur\n\n", cas);
        }
      }
    }
    
    /* ===================================================================== */
    
    int main(int argc, char *argv[])
    {
      ITEM items[MAX_ITEM];
      int nb_items;
    
      Lire(items, &nb_items);
      Choix(items, nb_items);
      Afficher(items, nb_items);
      exit(0);
    }
    
    /* ====================================================== The End ====== */
    
    
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2020 à 16:15:13

      Tu voudrais qu'on te fasse ton exercice, c'est ça ?

      • Partager sur Facebook
      • Partager sur Twitter
        22 novembre 2020 à 16:27:51

        Non du tout j'ai commencé à faire quelque chose et je voudrais un coup de pouce

        c'est moi même qui a ajouté ces lignes de codes

        -
        Edité par labrave 22 novembre 2020 à 16:28:37

        • Partager sur Facebook
        • Partager sur Twitter
          22 novembre 2020 à 16:41:52

          Ah mais alors des indications pour les 2 prochaines étapes.

          1. Écrire une fonction "test_affichage" qui

          • réserve et initialise un tableau d'Items
          • le fait afficher

          2. Écrire une fonction "test_tri_noms croissants" qui

          • réserve et initialise un tableau d'Items
          • le fait afficher (en appelant la fonction précédente)
          • l'ordonne par age croissant (en appelant la fonction de tri)
          • le fait afficher (en appelant la fonction précédente)
          Le dialogue avec l'utilisateur pour remplir le tableau, c'est pas urgent. Et les tests qui obligent à saisir des données, on les fait jamais, et quand on les fait on ne vérifie jamais les résultats. A garder pour la fin, quand il ne restera plus qu'à assembler des fonctions qui ont été bien testées.

          -
          Edité par michelbillaud 22 novembre 2020 à 16:45:29

          • Partager sur Facebook
          • Partager sur Twitter
            22 novembre 2020 à 18:18:18

            Suis bien les conseils de michelbillaud.
            Ton tri n'est pas un quicksort, loin de là. Mais ce n'est sûrement pas ce qu'on te demande.
            C'est un tri par sélection.
            Essaies de trouver une façon de l'optimiser. Tu ne changeras pas le nombre de comparaisons, mais à la rigueur tu réduiras le nombre d'échanges.
            On trouve partout sur le web des algo pour ce tri.
            L'idée est de comparer le courant avec le "meilleur" et de le changer si requis (changement d'indice).
            Et tu fais l'échange seulement à la fin de la boucle intérieure.
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              22 novembre 2020 à 19:08:03

              Le point intéressant est ici

              > (on pourra par exemple s'inspirer de la technique utilisée par la fonction standard qsort() en regardant le manuel interactif de cette fonction).

              qui suggère que la fonction de tri reçoive en paramètre la fonction de comparaison.

              M'est avis que c'est pas une question qui correspond au niveau d'avancement, mais bon.

              Indication

              void Trier(ITEM items[], int nb_items, 
                         bool (*vient_avant) (Item *, Item *))
              {
              
              ....
                   if (vient_avant(& items[j], & items[i])) {
                       ... les échanger
              }
              



              -
              Edité par michelbillaud 22 novembre 2020 à 19:12:11

              • Partager sur Facebook
              • Partager sur Twitter
                23 novembre 2020 à 1:39:28

                @labrave:
                Peux-tu comprendre facilement le code et les explications de michelbillaud?
                As-tu du code qui fonctionne?
                Peux-tu donner ce que tu as déjà?
                Il faudrait qu'on saisisse mieux ce que tu connais bien, et ce que tu ne sais pas comment faire.
                Je crois avoir la même impression que Michel, ça ne semble pas correspondre à ton niveau d'apprentissage.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  25 novembre 2020 à 15:35:47

                  Bonjour oui tout à fait c'est ce que j'ai compris je suis entrain d'y travailler je suis nouveau dans ce domaine. je ne tarderai pas à uploder ce que j'ai fais en cas de blocage. Merci à tous.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Compléter un le programme tri.

                  × 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