Corrigé exercice1 #include <stdio.h> #include <stdlib.h> typedef struct maillon
Corrigé exercice1 #include <stdio.h> #include <stdlib.h> typedef struct maillon *ptr; typedef struct maillon { int val; ptr lien;}; void Initialiser(ptr *L) { *L = NULL; } /*ptr Initialiser(ptr L) { return (L= NULL); }*/ void Inserer(ptr *L1 ,long e, ptr *pred ) //Insertion à la fin de la liste chainée L { ptr q; q = (ptr)malloc(sizeof(struct maillon)); q->val = e; q->lien = NULL; if (*pred == NULL) { *L1 = q; } else { (*pred)->lien = q; } *pred = q; } void Afficher(ptr L) { ptr p; p=L; while(p!=NULL) { printf("%d ",p->val); p = p->lien; } printf("\n"); } void Construire(ptr *L, int n) { int i; Long e; ptr pred = NULL; for(i=1;i<=n;i++) { printf("donner l'element de la liste \n"); scanf("%ld",&e) ; Inserer(L,e,&pred); } } void Min_Max(ptr L, int *min, int *max) { ptr p; *min = (*L).val; *max= (*L).val; //Initialiser *min et *max // par la valeur du premier maillon p= (*L).lien; // deuxième maillon while(p != NULL) { if ((*p).val < *min) *min = (*p).val; else if ((*p).val > *max) *max = (*p).val; p = p->lien; } } long fact (int e) { int i; long F=1; for (i=2;i<=e;i++) F = F*i; return F; } void Fact_list(ptr L, ptr *L1) { ptr pp, pred; pp = L; *L1 = NULL; pred=NULL; while (pp != NULL) { Inserer(L1,fact(pp->val), &pred); pp = pp->lien; } } main() { int n,e,c; ptr L,L1,pred; pred = NULL; int min, max; Initialiser(&L); // ou L = NULL; initialisation de la liste L printf("donner le nombre d‘elements a inserer dans la liste L : "); scanf("%d",&n); Construire(&L,n); Afficher(L); if (L != NULL ) { Min_Max(L, &min,&max); printf("le min est %d le max est %d \n",min,max); } Fact_list(L,&L1); Afficher(L1); } Corrigé exercice2 #include <stdio.h> #include <stdlib.h> typedef struct maillon *ptr; typedef struct maillon {int val; ptr lien;}; //Pile manipulée avec la stratégie LIFO (Last In First Out) void Initialiser(ptr *P) { *P = NULL ; } //Procédure Empiler qui insert un élément à la tête de la Pile chainée P void Empiler( ptr *P, int e) { ptr q; q = (ptr)malloc(sizeof(struct maillon)); q->val = e; q->lien = *P;// Insertion en-tête de la Pile P. *P = q ; } //Procédure Depiler qui supprime le sommet de la Pile P chainée void Depiler(ptr *P) { ptr q; if (*P != NULL) { q = *P; *P = (*P)->lien; free(q) ; q=NULL; } } //Procédure qui affiche tous les éléments de la Pile chainée. On utilise une autre pile P1 intermédiaire pour ne pas perdre les éléments de la pile P void afficher (ptr *P) { ptr P1; //Déclaration de la pile P1 intermédiaire P1=NULL; //Ou Initialiser(&P1); while(*P !=NULL) { printf("element de la pile %d\n",(*P)->val); Empiler(&P1,(*P)->val); Depiler(P); } while(P1 !=NULL) { Empiler(P,P1->val); Depiler(&P1); } printf("\n"); } //Procédure pour la construction de la pile P contenant n éléments void construire(ptr *P, int n) { int i,e; for(i=1;i<=n;i++) { scanf("%d",&e); Empiler(P,e); } } void Supprime_neg(ptr *P) { ptr P1; Initialiser(&P1); while(*P !=NULL) { if ((*P)->val >= 0) Empiler(&P1,(*P)->val); //Une seule instruction pour if Depiler(P); } while(P1 !=NULL) { Empiler(P,P1->val); Depiler(&P1); } printf("\n"); } main() { ptr P; int n; P = NULL; //ou Initialiser(&P) printf("donner le nombre d'elements a empiler dans la pile P : "); scanf("%d",&n); construire(&P,n); afficher(&P); Supprime_neg(&P); afficher(&P); } Corrigé exercice 3 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> // Déclaration de la structure file typedef struct maillon *ptr; typedef struct maillon{ int val; ptr lien;}; typedef struct FILE{ ptr first; ptr last;}; void filevide(struct FILE *F) { (*F).first= NULL; (*F).last = NULL; } bool estvideF(struct FILE F) { return (F.first == NULL && F.last == NULL); } void enfiler(struct FILE *F,int e) { ptr p; p = (ptr)malloc(sizeof(struct maillon)); p->val= e; p->lien= NULL; if ((*F).first == NULL) { (*F).first = p; (*F).last = p; } else { ((*F).last)->lien = p; (*F).last = p; } } void defiler(struct FILE *F) { ptr p; if((*F).first != NULL) //ou if (!estvideF(*F) ) { p=(*F).first; (*F).first = p->lien; if(p->lien== NULL) (*F).last = NULL; //dans le cas où la file // contenait un seul maillon et qu’on a supprimé free(p); p==NULL; } } void construire(struct FILE *F, int n) { int i,e; for(i=1;i<=n;i++) { scanf("%d",&e); enfiler(F,e); } } void afficher(struct FILE *F) { struct FILE F1; filevide(&F1); while((*F).first !=NULL) { printf("%d ", ((*F).first)->val); enfiler(&F1,((*F).first)->val); defiler(F); } while(F1.first != NULL) { enfiler(F,(F1.first)->val); defiler(&F1); } printf("\n\n"); } void construire_F1_F2(struct FILE *F,struct FILE *F1,struct FILE *F2) { filevide(F1); filevide(F2); while((*F).first !=NULL) { if (((*F).first->val)% 2 == 0) { enfiler(F1,((*F).first)->val) ; defiler(F); } else { enfiler(F2,((*F).first)->val) ; defiler(F); } } } main() { int n; struct FILE F; struct FILE F1, F2; filevide(&F); printf("Donner la taille de la file \n "); scanf("%d",&n); construire(&F,n); afficher(&F); construire_F1_F2(&F,&F1,&F2); printf("affichage de F apres separation\n\n"); afficher(&F); printf("affichage de F1 apres separation\n\n"); afficher(&F1); printf("affichage de F2 apres separation\n\n"); afficher(&F2); } uploads/s1/ corrige-fiche-tp1.pdf
-
28
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 18, 2022
- Catégorie Administration
- Langue French
- Taille du fichier 0.1710MB