Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.47 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. /* À COMPLÉTER PAR LES EN-TÊTES (PROTOTYPES) DES SOUS-PROGRAMMES
  4.  * DE MANIPULATION DE LA FIFO */
  5.  
  6.  
  7. #define nmax 100
  8.  
  9.  
  10.   /* On crée la file de type file */
  11.   typedef struct {
  12.     int f[nmax]; /* la file */
  13.     int tete; /* la tête de la file */
  14.     int queue; /* la queue de la file */
  15.     int taille; /* la taille de la file */
  16.    } File ;
  17.  
  18.  
  19. void initialiser (File * uneFile);
  20. int enfiler (File * uneFile, int e);
  21. int defiler(File * uneFile, int * e);
  22. void afficher(File * uneFile);
  23.  
  24.  
  25.  
  26. int main() {
  27.  
  28.   int op = 0;
  29.   int nb_item;
  30.  
  31.  
  32.   /* À COMPLÉTER PAR LA DÉCLARATIONS DE NOUVELLES VARIABLES */
  33.   /* POUR REPRÉSENTER LA FIFO */
  34.  
  35.     int  x;
  36.     File uneFile;
  37.  
  38.   /* boucle du menu */
  39.   do {
  40.     printf("terminer    (0) \n");
  41.     printf("initialiser (1) \n");
  42.     printf("enfiler     (2) \n");
  43.     printf("défiler     (3) \n");
  44.     printf("afficher    (4) \n");
  45.  
  46.     /* boucle de saisie de l'opération à effectuer */
  47.     do {
  48.       printf("\nopération ? \n");
  49.       nb_item = scanf("%d", &op);
  50.       while( getchar() != '\n' ){
  51.         /* empty */;
  52.       }
  53.     } while ( nb_item != 1 );
  54.    
  55.     printf("opération choisie : %d\n",op);
  56.  
  57.     /* traitement de l'opération choisie */
  58.     switch (op) {
  59.       case 0 :   printf("Au revoir \n\n");
  60.                  break;
  61.       case 1 :   printf("initialiser \n\n");
  62.                 /* initialiser(& uneFile); */
  63.                 initialiser(&uneFile);
  64.                 break;
  65.                
  66.       case 2 :  printf("enfiler \n\n");
  67.                 printf("Quelle valeur enfiler ?");
  68.                 scanf("%d", &x);
  69.                 enfiler(&uneFile, x);
  70.                 break;
  71.                
  72.       case 3 :   printf("défiler \n\n");
  73.                 defiler(&uneFile, &x);
  74.                 //printf("On a défiler : %d\n",&x);
  75.                  break;
  76.       case 4 :   printf("afficher \n\n");
  77.                  afficher(&uneFile);
  78.                  break;
  79.       default  : printf(" \n\n\007opération non conforme\n\n");
  80.                  break;
  81.     }
  82.   } while (op != 0);
  83.  
  84.   return 0;
  85. }
  86.  
  87. /* À COMPLÉTER AVEC L'IMPLANTATION DES SOUS-PROGRAMMES DE MANIPULATION
  88.  * DE LA FIFO */
  89.  
  90. void initialiser (File * uneFile){
  91.  
  92.   uneFile->tete=0;
  93.   uneFile->queue=-1;
  94.   uneFile->taille=0;
  95.  
  96. }
  97.  
  98. int enfiler (File * uneFile, int  e){
  99.   /* La file est pleine */
  100.   if(uneFile->taille == nmax){
  101.     printf(" La file est pleine");
  102.     return -1;
  103.   }
  104.   /* On enfile normalement */
  105.   else{
  106.     uneFile->queue=(uneFile->queue+1)%nmax;
  107.     uneFile->f[uneFile->queue]=e;
  108.     uneFile->taille++;
  109.   }
  110.   return 0;
  111. }
  112.  
  113. int defiler(File * uneFile, int * e){
  114.  
  115.   /* La file est vide */
  116.   if(uneFile->taille == 0){
  117.     printf("On ne défile pas la file vide");
  118.     return -1; /* pas sur */
  119.   }
  120.   /* On defile normalement */
  121.   else{
  122.    // e->(uneFile->f[uneFile->tete]);
  123.     uneFile->tete= (uneFile->tete +1)%nmax;
  124.     uneFile->taille-=1;
  125.   }
  126.   return 0;
  127. }
  128.    
  129. void afficher(File * uneFile){
  130.  
  131.   int i; /* indice de boucle */
  132.  
  133.  
  134.   /* La file est vide */
  135.   if(uneFile->taille==0){
  136.     printf("Erreur : La file est vide");
  137.   }
  138.   else if(uneFile->queue < uneFile->tete){
  139.     for(i=uneFile->tete;i<=nmax;i++){
  140.       printf("%d\n",uneFile->f[i]);
  141.     }
  142.     for(i=0;i<=uneFile->queue;i++){
  143.       printf("%d\n",uneFile->f[i]);
  144.     }
  145. }
  146.    
  147.     else{
  148.         for(i=uneFile->tete;i<=uneFile->queue;i++){
  149.             printf("%d\n",uneFile->f[i]);
  150.         }
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement