Académique Documents
Professionnel Documents
Culture Documents
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; CdProdE.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
/* 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) ;
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
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;