[C]Fonction supprimer...

Fonction supprimer... [C] - C++ - Programmation

Marsh Posté le 16-05-2002 à 20:49:40    

Bonjour a tous, j'ai un petit programme a faire en C pour l'ecole. C'est un fichier avec des noms d'eleves triés...Ca j'ai reussi a faire sans trop de probleme.
 
Voilà le code.
 

Citation :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
/***********  Macro pour en-tête de page d'écran  ******************/
#define HEADER(s)    printf("\nPage %d\n",s);\
                     printf("No.\t\tNom\t\tPrenom\n" );\
                     for(j = 0; j < 55; j++) printf("_" )
main()
{
     
    typedef struct etudiant
       {
          char name[21];
          char name2[21];
         // long num;
          struct etudiant *pre;            /* pointeur vers élément précédent */
          struct etudiant *suiv;             /* pointeur vers élément suivant */
       } listelement;
     
    listelement *deb;                         /* pointeur vers début de liste */
    listelement *fin;                           /* pointeur vers fin de liste */
    listelement * nouv;                       /* pointeur vers nouvel élément */
    listelement *der;            /* pointeur vers dernier l'expression inséré */
    listelement * a;                                  /* variable de contrôle */
    char buffer [81];                           /* pour contrôle de la saisie */
    int i;                                      /* compteur d'enregistrements */
    char s,rep; //= 1;                                           /* compteur de pages */
    int j, num;                                   /* variables de contrôle */
     
/******************** allocation mémoire pour premier élément  ****************/
     
    if ((deb = (listelement *) malloc(sizeof(listelement))) == NULL)
       {
          printf("\nPlus de mémoire libre.\n" );
          exit(1);                                           /* fin programme */
       }
    i = 0;
    fin = nouv = der = deb;                           /* initialise pointeurs */
    deb->pre = deb->suiv = NULL;
    printf("****CREATION D'UNE STRUCTURE ETUDIANT****\n" );
   
/************************  saisie des enregistrements  ************************/
    do
       {
          printf("Enregistrement no %d\n", i+1);
          printf("Nom de l etudiant, (fin par \"0\" ) : " );
          gets(buffer);
          while (strlen(buffer) > 20)                 /* contrôle désignation */
             {
                printf("Nom trop long.\n" );
                printf("Nom de l'etudiant (20 caractères max., fin par \"0\" ) : " );
                gets(buffer);
             }
          strcpy(nouv->name, buffer);      /* ajout désignation dans la liste */
          if (strcmp(nouv->name, "0" ))               /* si désignation != "0" */
             {
                printf("Prénom de l'etudiant : " );
                scanf("%s", &nouv ->name2);
                while (getchar() != '\n';)          /* vidage tampon de saisie */
                        ;
     
                /*****************  insertion nouvel élément ******************/
 
                if (strcmp(nouv->name, deb->name) <= 0) /* nouveau <= premier */
                   {
                      if (nouv != deb)    /* si au moins 1 élément dans liste */
                         {
                           nouv->pre = NULL; /* insertion nouveau premier elt */
                           nouv->suiv = deb;
                           deb->pre = nouv;
                           deb = nouv;
                         }
                   }
                else if (strcmp(nouv->name, fin->name) >= 0)
                                                        /* nouveau >= dernier */
                   {
                      if (nouv != deb)       /* si au moins 1 él. dans liste  */
                         {
                            nouv->pre = fin; /* insertion nouveau dernier élt */
                            nouv->suiv = NULL;
                            fin->suiv = nouv;
                            fin= nouv;
                         }
                   }
                else if (strcmp(nouv->name, der->name) >= 0)  
                                                 /* nouveau >= dernier inséré */
                   {
                      if (nouv != deb)           /* au moins 1 él. dans liste */
                         {
     
                          /***** calcul de la position du nouvel élément  *****/
                            for(a = der; strcmp(a->suiv->name, nouv->name) < 0;
                                   a = a->suiv)
                                           ;
                            nouv->pre = a;        /* insertion nouvel élément */
                            nouv->suiv = a->suiv;
                            a->suiv->pre = nouv;
                            a->suiv = nouv;
                         }                            
                   }
               else                               /* nouveau < dernier inséré */
                   {
     
                    /******** calcul de la position du nouvel élément  ********/
                      for(a = der; strcmp(nouv->name, a->pre->name) < 0;
                          a = a->pre)
                                 ;
                      nouv->pre = a->pre;         /* insertion nouvel élément */
                      nouv->suiv = a;
                      a->pre->suiv = nouv;
                      a->pre = nouv;
                   }
     
               der = nouv;         /* actualise pointeur vers dernier élément */
                 
                     /********  allocation mémoire pour nouvel élément  *******/
     
               if ((nouv = (listelement *) malloc(sizeof(listelement))) == NULL)
                  {
                     printf("\nPlus de mémoire. <Entrée> pour continuer.\n" );
                     getch();        
                     i++;                          /* actualise compteur enr. */
                     break;                               /* sortie de boucle */
                  }
               i++;
             
             }    /* fin if(strcmp(...)) supérieur */
     
          else    /* si fin de saisie */
             der= nouv;                        /* tester le dernier nom saisi */
                                               /* dans la condition de boucle */
       } while (strcmp(der->name, "0" ));
 
 /***************  affichage des enregistrements  *****************************/
     
    if (i > 0)                             /* au moins 1 enregistrement saisi */
       {
         printf("\nNombre d'enregistrements saisis : %d\n", i);
         printf("AFFICHER LES ENREGISTREMENTS :\n" );
         printf("Triés en ordre ascendant\t\t(a)\n" );
         printf("Triés en ordre descendant\t\t(d)\n" );
         printf("Fin par appui sur une touche quelconque\n" );
         printf("Votre choix : " );
         rep = getche();
     
        switch (rep)
           {
              case 'a':    
                  HEADER(s);                                       /* en-tête */
                  for (a = deb, num = 1; a != NULL; a = a->suiv, num++)
                      {
                         printf("\n%d\t\t%s\t\t%s\n", num, a->name,a->name2);
                         if ((num%9) == 0 && num != i)
                            {
                               printf("\n<Entrée> pour page suivante." );
                               getch();
                               s++;                      /* compteur de pages */
                               HEADER(s);
                            }
                      }
                  break;
              case 'd':    
                  HEADER(s);                                       /* en-tête */
                  for (a = fin, num = 1; a != NULL; a = a->pre, num++)
                      {
                         printf("\n%d\t\t%s\t\t%s\n", num, a->name, a->name2);
                         if ((num%9) == 0 && num != i)
                            {
                               printf("\n<Entrée> pour page suivante.\n" );
                               getch();
                               s++;                      /* compteur de pages */
                               HEADER(s);
                            }
                      }
                  break;
              default:
                       ;
           }
 
 
 /*******************  libération de la mémoire  ************************/
     
        for (a = deb; a != NULL; a = nouv)
            {
               nouv = a->suiv;                /* sauve adresse suivante avant */
                                    /* libération de l'élément actuel contenu */
                              /* dans cette adresse. Autrement, cette adresse */
                            /* serait perdue et l'accès à la liste impossible */
               free(a);
            }
   
       }                                                      /* fin if i > 0 */
getch();
}                                                               /* fin main */


 
Mais j'ai un petit prob...Je dois y ajoutter deux fonctions de suppretion dedans.
 
Le prof veut une fonction qui permet de supprimer un eleve juste en donnant son num. (num donné lors du tri).
 
Et il veut aussi une fonction qui permet de supprimer un ensemble d'eleve de n1 à n2 (tjs celon les num attribé lors du tri).
 
Donc je seche la dessus, Si quelqu'un a un peu de temps a me consacrer...
 
merci.


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 16-05-2002 à 20:49:40   

Reply

Marsh Posté le 16-05-2002 à 21:55:21    

Ils sont alloués comment tes numéros? (pas dans ton code à première vu)


---------------
Le Tyran
Reply

Marsh Posté le 16-05-2002 à 22:01:47    

letoII a écrit a écrit :

Ils sont alloués comment tes numéros? (pas dans ton code à première vu)  




Lors du tri, chaque eleve recoit un numero (num ds le code) et j'aimerais pouvoir les supp a partir de la, mais je ne trouve tjs pas...


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 16-05-2002 à 22:07:03    

Ben tu met un num dans la structure, lorsque tu insère un étudiant tu lui cole le numéro du gars qu'il remplace, et tu ajoute un aux numéro de ceux qui suivent et enfin tu sauvegardes le derniers buméro pour avoir ton nombre d'étudiant.


---------------
Le Tyran
Reply

Marsh Posté le 16-05-2002 à 22:11:38    

letoII a écrit a écrit :

Ben tu met un num dans la structure, lorsque tu insère un étudiant tu lui cole le numéro du gars qu'il remplace, et tu ajoute un aux numéro de ceux qui suivent et enfin tu sauvegardes le derniers buméro pour avoir ton nombre d'étudiant.  




J'ai deja le nombre d'etudiant...
Car lorsque la liste est trié, elle affiche un numero a gauche.
Je peux pas partir de la?


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 16-05-2002 à 22:16:41    

T'as deux solution, soit tu le fait pendant la création de la liste, ce qui finalement est peut être pas si bien, soit tu reparcours toutes ta liste une fois créée afin de numéroter tes étudiant. D'un autre côté tu peux te passer d'ordoner les numéros, mais pour la supprétion c moin facile.


---------------
Le Tyran
Reply

Marsh Posté le 16-05-2002 à 22:22:38    

Tu pourrais donner un exemple en code stp, car là je suis totalement perdu.
 
Car tu vois lors du tri, j'attribue un num a chaque etudiant.
C'est la variable "num". et donc a la fin on affiche la liste et je voudrais pour supprimer un etudiant en y mettant le numero que l'on voit ds la liste affiché plus haut, c'est a dire grace au num attribué lors du tri.


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 16-05-2002 à 22:24:47    

Désolé mais dans le code que t'as envoyé tu ne le fais pas


---------------
Le Tyran
Reply

Marsh Posté le 16-05-2002 à 22:28:40    

letoII a écrit a écrit :

Désolé mais dans le code que t'as envoyé tu ne le fais pas  




merci pour ton aide
mais je suis perdu ds mon code moi.


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Marsh Posté le 17-05-2002 à 06:51:58    

J'ai vu que l'on avait des erreurs en faisant un copier coller
Donc voici directement le fichier
http://www.leveilleur.net/osd1.c  
 
merci


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed