Vous êtes sur la page 1sur 4

Exercice 1 : (8pts)

Type Magasin= Enregistrement CodMag, CodProd : Entier; PxAchat, PxVente : Reel; QteV : entier ; Fin;
FichMag = Fichier de Magasin;
1- Ecrire une action paramétrée MaxSection qui, à partir du fichier FEtud, retourne la meilleure moyenne
d’une section donnée. // 2.75 Pts
Procédure MaxBénéfice (E/S F :FichMag, Mag:entier ;S/MaxBenef :réel, CdProd :entier); //0.25
Var E:Magasin; Max, Bénef : Reel; CdPr :entier ; //0.25
Debut
MaxBenef 0;// cas fichier vide // assignation est supposée faite dans l'algorithme
Relire(F); //0.25
Tant Que NON(FDF(F) Faire //0.5
Lire(F, E); //0.25
Si (E.CodMag = Mag) alors //0.25 Benef (E.PxVente-E.PxAchat)*E.QteV ; //0.25
Si(MaxBenef < Benef) alors MaxBenef <-- Benef; CdProdE.CodProd ; Fsi //0.50
Fsi ;
Fait :
Fermer(F); //0.25
Fin;
2. En utilisant MaxBenefice, écrire une action paramétrée permettant de créer un fichier G contenant pour
chaque magasin le produit ayant le meilleur bénéfice et la valeur de ce bénéfice. Chaque élément du fichier G
est structuré comme suit : CodeMagasin, CodeProduit et MaxBnf.
// 3.75 Pts
BestBenef= Enregistrement Mag,Prod: Entier; Val ;réel; Fin; FichBest = Fichier de BestBenef; //0.25

Procedure CreationFileG (E/S F:FichMag, G: FichBest)//0.25 Pt


Var F1, F2: FichMag; X, Y: Magasin; Z : BestBenef; // 0.25 Pt
Debut
Assigner(F1, "Tempo1"); Assigner(F2, "Tempo2"); // assignation des fichiers temporaires F1 et F2
// recopier F dans F1
Relire(F); Reecrire(F1);
Tant Que (NON(FDF(F)) Faire Lire(F, X); Ecrire(F1, X); Fait
Fermer(F); Fermer(F1);
Relire(F1); //0.25
Reecrire(G); //0.25
Tant Que(NON(FDF(F1))) Faire //0.25
Lire(F1, X); Reecrire(F2); //0.25
Z.Mag <-- X.CodMag; //0.25 // chercher le Meilleur Bénéfice du premier magasin lu ds le fichier F1
MaxBenefice(F1, Z.Mag, Z.Val, Z.Prod); //0.25
Ecrire (G, Z) ;
// Revenir au debut de F1 car F1 a ete ouvert et ferme par la procedure MaxBenefice
Relire(F1); //0.25
Tant Que(NON(FDF(F1))) Faire //0.25
Lire(F1, X); //0.25
Si (X.CodMag <> Z.Mag) alors // ecrire les enregistrements des autres magasins dans F2 //0.25
Ecrire(F2, X);
Fsi ;
Fait ;
Fermer(F1); Fermer(F2); // recopier F2 dans F1 //0.25
Relire(F2); Reecrire(F1); Tant Que (NON(FDF(F2))) Faire Lire(F2, X); Ecrire(F1, X); Fait
Fermer(F1); Fermer(F2);
Relire(F1); //0.25 Et ainsi on revient à la première boucle tant que
Fait
Fermer(F1); Fermer(G);
Fin;
PROCEDURE Trie-G ( E/S : G : FichBest) ; //1.50
Var F1, F2, H : FichBest; Max: réel ; X, Y,Z : BestBenef ;
Début
Assigner (F1, ‘‘tempo1’‘) ; Assigner (F2, ‘‘tempo2’‘) ;Assigner (H, ‘‘Filetrié’‘) ;
Réécrire (H) ; Basculer ←vrai ;
// recopier G dans F1
Relire(G); Reecrire(F1);
Tant Que (NON(FDF(G)) Faire Lire(G, X); Ecrire(F1, X); Fait

Tant que (non FDF (F1))


lire(F1,X) ; ZX ; Réécrire(F2)
Tant que (non FDF (F1))
Lire (F1,Y) ;
Si (Y.Val>Z.Val) alors Z←Y Fsi ;
Fait ;
Fermer(F1) ; Relire (F1) ;
Reecrire(F2);

/* ECRITURE DE TOUS LES Magasins dont le code magasin # du magasin ayant le Max Bénéfice DANS F1
Tant que (non FDF (F1))
Lire (F1,X) ;
si (X.CodMag<>Z.Mag) alors ecrire (F2,X) ; Fsi ;
Fait ;
/* ECRITURE du Max Bénéfice trouvé dans le fichier G dansFichier trié H
Ecrire (H,Z) ;

Si (basculer = vrai) alors


Assigner (F1, ‘‘TEMPO2‘) ; Assigner (F2,’‘Tempo1‘) ; basculer←faux ;
Sinon
Assigner (F1,’‘Tempo1‘) ; Assigner (F2, ‘‘Tempo2‘); basculer←vrai ;
Fsi ;
Fermer(F1) ; Fermer(F2) ;
Relire (F1) ;
Fait ;
/* CAS où le FICHIER F EST VIDE FDF(G) = VRAI
Sinon Ecrire (‘’fichier vide’’)
Fsi ;
Fin.
Exercice No 2 : (12pts)

1. Soit NBR un entier strictement positif, ecrire une action parametree permettant de creer une liste L a partir
de NBR, avec le premier chiffre de NBR comme dernier element de la liste et le dernier chiffre de NBR comme
premier element de la liste L (voir exemple 1). La liste L represente ainsi le nombre NBR.

2. Soit L une liste representant un nombre entier strictement positif et un entier N compris entre 1 et 9, ecrire
une action parametree permettant de creer une liste LM representant la multiplication de L par N ; sans
proceder a la conversion de la liste L en un nombre (voir exemple 2).

3. Soit L une liste representant un nombre entier strictement positif et un entier N compris entre 0 et 9, ecrire
une action parametree permettant de supprimer de L toutes les occurrences de N (voir exemple 3).

4. Soit une liste L representant un entier NBR strictement positif, ecrire une action parametree permettant de
donner comrne resultat le nombre NBR (voir exemple 4).

Solution

1- Type PList = ^Element; Element = Enregistrement val: Entier; svt: PList;Fin; // 0.25 pt

// Cree liste FiFO: 2.75 pt


Fonction CreationListe(Nbr : Entier) : PList;
Var L, p, prcd: pList;
Debut
Allouer(L); L^.val <- Nbr Mod 10;
prcd <- L; // Liste FiFo: ajouter 1er element
Nbr <- Nbr Div 10;
Tant Que (Nbr > 0) Faire
Allouer(p);
p^.val <- Nbr Mod 10;
prcd^.svt <- p; // liste FiFo ajouter apres prcd
prcd <- p;
Nbr <- Nbr Div 10;
Fait
p^.svt <- NiL;
retourner L; // ou CreationListe <- L;
Fin;

2- // 3.5 pts
Fonction MultiplierLParN(L: pList, int N):pList
Var PList LM, P, prcd; retN, Nbr1: Entier;
Debut
retN <- 0; // initialiser retenue à 0
LM <- NiL;
Si (L <> NiL) alors
Nbr1 <- L^.val * N;
retN <- Nbr1 Div 10;
Nbr1 <- Nbr1 Mod 10;
Allouer(LM);
LM^.val <- Nbr1 ; /* ajouter le 1er element d'indice 1 */
prcd <- LM;
L <- L^.svt;
Tant Que (L <> NiL) Faire
Nbr1 <- L^.val * N + retN;
retN <- Nbr1 Div 10;
Nbr1 <- Nbr1 Mod 10;
Allouer(P); P^.val <- Nbr1; Prcd^.svt <- P; Prcd <- P;
L <- L^.svt;
Fait
Si (retN > 0) alors// ajouter la dernière retenue
Allouer(P); P^.val <- retN; prcd^.svt <-P;
Prcd <- P;
Fsi
P^.svt <- NiL;
Fsi
retourner LM; // ou MultiplierLParN <- LM
Fin;

3-// 3 pts
Fonction SupprimerN(L:PList, N:Entier):PList
Var , Prcd:pList;
Debut
p <- L; // liberer toutes les 1ere occurrences de N s'il y'en a
Tant Que ((L <> NiL) et (L^.val = N)) Faire
P < L; L <- L^.svt;
Liberer(P);
Fait
// supprimer les autres occurrences de N s'il y'en a
Si (L <> NiL ) alors prcd <- L; P <- L^.svt;
Tant Que (P <> NiL) Faire
Si (p^.val = N) alors prcd^.svt <- P^.svt;
Liberer(p); P <- prcd^.svt;
sinon // traverser la liste L pour verifier le prochain
prcd <- P;
P <- P^.svt;
Fsi
Fait
Fsi
retourn L; // ou SupprimerN <- L
Fin;
4-
// 2.50 pts
Fonction ListeANbr(L : PList) : Entier
Var Nbr, pwr : Entier;
Debut
Nbr <- 0; pwr <- 1;
Tant Que (L <> NiL) Faire
Nbr <- Nbr + (L^.val * pwr); pwr <- pwr * 10;
L <- L^.svt;
Fait
retourner Nbr; // ou ListeANbr <- Nbr
Fin;

Vous aimerez peut-être aussi