Correction Examen ASD2 LFSI1 Session principale-mai 2015 Exercice1 1. Livre=Enregistrement Titre : Chaîne Auteur : Chaîne Année : Entier Enreg Cellule_Liv=Enregistrement Val : Livre Suiv : *Cellule_Liv Enreg Catégorie=Enregistrement Nom : Chaîne Liste_Liv: *Cellule_Liv Enreg Cellule_Cat=Enregistrement Val : Catégorie Nb_Liv : Entier Suiv :*Cellule_Cat Enreg Liste_Cat :Enregistrement Tête : *Catégorie Enreg 2. Procédure Ajout_Cat(L : *Liste_Cat ; C : Catégorie) p,q :*Cellule_Cat q Allouer(1) q Val C q Nb_Liv 0 Si(L Tête=NULL OU Comp(C.Nom, L Tête Val.Nom)<=0) Alors q Suiv L Tête L Tête q Tant que (p Suiv<>NULL ET Comp(C.Nom, p Val.Nom)>0) Faire q Suiv p Suiv p Suiv q 3. Procédure Ajout_Liv(L : *Liste_Cat ; Nom_Cat : Chaîne ;Liv :Livre) p :*Cellule_Cat q1,q2 :*Cellule_Liv C : Catégorie 1
Tant que (p<>null et Comp(p Val.Nom,Nom_Cat)<0) Faire Si(p=NULL OU Comp(p Val.Nom,Nom_Cat)>0) Alors Copier(C.Nom,Nom_Cat) C.Liste_Liv NULL Ajout_Cat(L,C) Tant que (Comp(p Val.Nom,Nom_Cat)<>0) Faire q1 Allouer(1) q1 Val Liv Si(p Liste_Liv=NULL OU Liv.Année<= p Liste_Liv Val.Année) Alors q1 Suiv p Liste_Liv Suiv p Liste_Liv q q2 p Liste_Liv Tant que (q2 Suiv<>NULL ET q2 Suiv Val.Année<L.Année) Faire q2 q2 Suiv q1 Suiv q2 Suiv q2 Suiv q1 p Nb_Liv p Nb_Liv+1 4. Procédure Afficher((L : Liste_Cat ; Nom_Cat : Chaîne) p :*Cellule_Cat q :*Cellule_Liv Tant que (p<>null et Comp(p Val.Nom,Nom_Cat)<0) Faire Si(p<>NULL et Comp(p Val.Nom,Nom_Cat)=0) Alors Si(p Nb_Liv<>0) Alors q p Liste_Liv Tant que(q<>null) Faire Ecrire(q Val.Titre,q Val.Auteur,q Val.Année) q q Suiv Ecrire(«Aucun Livre dans le catégorie», Nom_Cat) Ecrire(«Le catégorie», Nom_Cat, «n existe pas») 5. Fonction Nb_Livres(L : Liste_Cat) :Entier p :*Cellule_Cat q :*Cellule_Liv 2
Nb :Entier Nb 0 p L.Tête Tant que(p<>null) Faire Nb Nb+p Nb_Liv Nb_Livres Nb 6. Procédure Supp_Cat(L :*Liste_Cat ;Nom_Cat :Chaîne) p,p1 :*Cellule_Cat q :*Cellule_Liv Tant que (p<>null et Comp(p Val.Nom,Nom_Cat)<0) Faire Si(p<>NULL ET Comp(p Val.Nom,Nom_Cat)=0) Alors Tant que(p Val.Liste_Liv<>NULL) Faire q p Val.Liste_Liv p Val.Liste_Liv q Suiv Libérer(q) Si(p=L Tête) Alors L Tête p Suiv p1 L Tête Tant que(p1 Suiv<>p) Faire p1 p1 Suiv p1 Suiv p Suiv Libérer(p) Ecrire(«Le catégorie», Nom_Cat, «n existe pas») 3
Exercice 2 1. Médicament=Enregistrement Nom : Chaîne QT : Entier Prix : Réel Enreg Nœud=Enregistrement Val : Médicament FG : *Nœud FD :*Nœud Enreg Arbre : enregistrement Racine :*Nœud Enreg 2. Procédure Vente(A : Arbre ; Nom_Med :Chaîne ;Q :Entier) AG,AD :Arbre Si(A.Racine=NULL) Alors Ecrire(«Médicament inexistant») Si(Comp(Nom_Med, A.Racine Val.Nom)=0) Alors Si(A.Racine Val.QT>=Q)Alors A.Racine Val.QT A.Racine Val.QT-Q Si(A.Racine Val.QT<=5) Alors Ecrire(«Seuil minimal du», Nom_Med, «atteint») si Ecrire(«Quantité insuffisante») Si(Comp(Nom_Med, A.Racine Val.Nom)<0) Alors AG.Racine A.Racine FG Vente(AG,Nom_Med,Q) AD.Racine A.Racine FD Vente(AD,Nom_Med,Q) 3. Procédure Ajout(A :*Arbre ;M :Médicament) AG,AD :Arbre q :*Nœud Si(A Racine=NULL) Alors q Allouer(1) q Val M q FG NULL q FD NULL 4
A Racine q Si(Comp(M.Nom, A.Racine Val.Nom)<0) Alors AG.Racine A Racine FG Ajout(AG,M) AD.Racine A Racine FD Ajout(AD,M) Procédure Achat(A :*Arbre ; M :Médicament) AG,AD : Arbre Si(A Racine=NULL) Alors Ajout(A,M) Si(Comp(M.Nom,A Racine Val.Nom)=0)Alors A Racine Val.QT A Racine Val.QT+M.QT A Racine Val.Prix M.Prix Si(Comp(M.Nom, A Racine Val.Nom)<0) Alors AG.Racine A Racine FG Achat(AG,M) AD.Racine A Racine FD Achat(AD,M) 4. Fonction Prix_Stock(A :Arbre) :Réel AG,AD :Arbre Si(A.Racine=NULL) Alors Prix_Stock 0 AG.Racine A.Racine FG AD.Racine A.Racine FD Prix_Stock A.Racine Val.QT*A.Racine Val.Prix+Prix_Stock(AG)+Prix_Stock(AD) 5
5. 6