Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6685 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C]Fonction supprimer...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C]Fonction supprimer...

n°140098
Le Veilleu​r
Posté le 16-05-2002 à 20:49:40  profilanswer
 

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
mood
Publicité
Posté le 16-05-2002 à 20:49:40  profilanswer
 

n°140121
LetoII
Le dormeur doit se réveiller
Posté le 16-05-2002 à 21:55:21  profilanswer
 

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


---------------
Le Tyran
n°140123
Le Veilleu​r
Posté le 16-05-2002 à 22:01:47  profilanswer
 

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
n°140127
LetoII
Le dormeur doit se réveiller
Posté le 16-05-2002 à 22:07:03  profilanswer
 

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
n°140130
Le Veilleu​r
Posté le 16-05-2002 à 22:11:38  profilanswer
 

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
n°140131
LetoII
Le dormeur doit se réveiller
Posté le 16-05-2002 à 22:16:41  profilanswer
 

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
n°140132
Le Veilleu​r
Posté le 16-05-2002 à 22:22:38  profilanswer
 

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
n°140133
LetoII
Le dormeur doit se réveiller
Posté le 16-05-2002 à 22:24:47  profilanswer
 

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


---------------
Le Tyran
n°140135
Le Veilleu​r
Posté le 16-05-2002 à 22:28:40  profilanswer
 

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
n°140197
Le Veilleu​r
Posté le 17-05-2002 à 06:51:58  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C]Fonction supprimer...

 

Sujets relatifs
[C] Existe-t-il une fonction standart de tri alphabétique ?Cookies et php: je débute et la fonction de recherche est morte :D
Méthode ou fonction dans une requête[C++] Definition de fonction avec un & ???
[PHP] supprimer les '\n' du début d'une variableASP : RE-recupérer la valeur que renvoi une fonction
ASP - recupérer la valeur que renvoit une fonction[Delphi] Fermer un service : fonction CloseServiceHandle & co
Problème avec la fonction qsort() en langage C ![javascript] fonction onChange=onBlur ?
Plus de sujets relatifs à : [C]Fonction supprimer...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)