Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parMaxence Carrière Modifié depuis plus de 9 années
1
20/04/05SE Info2 - S. L'haire UNIGE1 TP 8: Solution 1 AgendaPtr = POINTER TO RECORD jour, heure: INTEGER; sujet: Chaine; precedent, suivant: AgendaPtr END; Liste = POINTER TO RECORD tete, queue, courant: AgendaPtr; (l: Liste) CourantSurTete (): BOOLEAN, NEW; (l: Liste) DetruireCourant (): BOOLEAN, NEW; (lis: Liste) EstVide (): BOOLEAN, NEW; (lis: Liste) Initialiser, NEW; (l: Liste) Inserer (j, h: INTEGER; IN s: Chaine), NEW; (l: Liste) ModifierCourant (j, h: INTEGER; IN s: Chaine): BOOLEAN, NEW END;
2
20/04/05SE Info2 - S. L'haire UNIGE2 TP 8: solution 1 (suite) Insertion: 1) IF l.EstVide() THEN insertion 1er élt. 2) ELSIF (l.tete.jour > j) OR ((l.tete.jour = j) & (l.tete.heure > h)) THEN insertion en tête 3) ELSIF (j > l.queue.jour) OR ((l.queue.jour = j) & (h > l.queue.heure)) THEN Insertion queue 4) ELSE temp := l.tete; WHILE (temp.suivant # NIL) & ((nouveau.jour > temp.suivant.jour) OR ((nouveau.jour = temp.suivant.jour) & (nouveau.heure > temp.suivant.heure))) DO temp := temp.suivant; END; nouveau.precedent := temp; nouveau.suivant := temp.suivant; temp.suivant.precedent := nouveau; temp.suivant := nouveau;END; l.courant := nouveau;
3
20/04/05SE Info2 - S. L'haire UNIGE3 TP8 Solution 2 AgendaEltPtr = POINTER TO RECORD (DblListEltPtr(ListEltPtr)) suivant: ListEltPtr; precedent: DblListEltPtr; jour, heure: INTEGER; sujet: Chaine; (el: AgendaEltPtr) EcrireLog END; AgendaPtr = POINTER TO RECORD (DblListPtr(ListPtr)) tete, queue, crt: ListEltPtr; (lis: ListPtr) AllerSuivant (): BOOLEAN, NEW; (l: ListPtr) CrtSurTete (): BOOLEAN, NEW; (l: ListPtr) Ecrire, NEW; (lis: ListPtr) EstVide (): BOOLEAN, NEW; (lis: ListPtr) Initialiser, NEW; (lis: DblListPtr) AllerPrecedent (): BOOLEAN; (l: DblListPtr) DetruireCourant (): BOOLEAN; (l: AgendaPtr) Inserer (j, h: INTEGER; IN s: Chaine), NEW; (l: AgendaPtr) ModifierCourant (j, h: INTEGER; IN s: Chaine): BOOLEAN, NEW END;
4
20/04/05SE Info2 - S. L'haire UNIGE4 TP8 2e solution: écriture PROCEDURE (el : ListEltPtr)EcrireLog*(), NEW, EXTENSIBLE; BEGIN HALT(33); END EcrireLog; PROCEDURE (el : AgendaEltPtr)EcrireLog*(); BEGIN IO.WriteString("Jour: ") ; ….. END EcrireLog; PROCEDURE (l:ListPtr)Ecrire*(), NEW; VAR temp : ListEltPtr; BEGIN IF (~l.EstVide()) THEN temp:= l.crt; IF l.CrtSurTete() THEN REPEAT l.crt.EcrireLog(); UNTIL ~l.AllerSuivant(); END; l.crt := temp; END; END Ecrire;
5
20/04/05SE Info2 - S. L'haire UNIGE5 TP8 fin Insertion: comme dans l'autre solution Voir aussi la conception objet: 2 méthodes pour détruire ou pour reculer
6
20/04/05SE Info2 - S. L'haire UNIGE6 ABSTRACT ListEltPtr* = POINTER TO ABSTRACT RECORD suivant* : ListEltPtr END; DblListEltPtr* = POINTER TO ABSTRACT RECORD (ListEltPtr) precedent* : DblListEltPtr;END; Définit une classe abstraite qui n'est pas destinée à être utilisée en tant que telle Un type abstract peut être étendu
7
20/04/05SE Info2 - S. L'haire UNIGE7 ABSTRACT (2) Une classe définie en ABSTRACT peut contenir des méthodes normales… PROCEDURE (lis : ListPtr)Initialiser*(), NEW; BEGIN lis.tete := NIL;lis.queue := NIL;… … mais aussi des méthodes abstraites qui doivent être instanciées par la classe qui étend une classe abstraite PROCEDURE (el : ListEltPtr)EcrireEltLog*, NEW,ABSTRACT;
8
20/04/05SE Info2 - S. L'haire UNIGE8 Instruction ASSERT Permet de s'assurer que des données sont bien instanciées, ou des conditions remplies sinon déclenche un TRAP ASSERT(t # NIL); ASSERT(l.taille > 0); Etc.
9
20/04/05SE Info2 - S. L'haire UNIGE9 Insertion générique PROCEDURE (l : ListPtr)InsererTete*(new : ListEltPtr): BOOLEAN, NEW,EXTENSIBLE ; BEGIN ASSERT(new # NIL); new.suivant := NIL; IF l.EstVide() THEN l.queue:=new; ELSE new.suivant := l.tete; END; l.tete := new;l.crt := new; INC(l.taille);RETURN TRUE; END InsererTete; Les listes sont abstraites ListEltPtr* = POINTER TO ABSTRACT RECORD suivant* : ListEltPtr END; DblListEltPtr* = POINTER TO ABSTRACT RECORD (ListEltPtr) precedent* : DblListEltPtr;END; On déclare insertion au niveau liste et liste double, quel que soit le contenu Le nouvel élément sera créé ailleurs (v. transpas suivants)
10
20/04/05SE Info2 - S. L'haire UNIGE10 Insérer (suite) PROCEDURE (l : DblListPtr)InsererTete*(new : ListEltPtr): BOOLEAN; BEGIN ASSERT(new # NIL); WITH new: DblListEltPtr DO new.suivant := NIL; new.precedent := NIL; IF l.EstVide() THEN l.queue:=new; ELSE l.tete(DblListEltPtr).precedent := new; new.suivant := l.tete; END; l.tete := new; l.crt := new; INC(l.taille); RETURN TRUE; END; END InsererTete;
11
20/04/05SE Info2 - S. L'haire UNIGE11 Insérer (fin) PROCEDURE (el : AgendaEltPtr)Init*(j, h : INTEGER; IN sujet : Chaine),NEW; BEGIN el.suivant := NIL; el.precedent := NIL; el.sujet := sujet$; … END Init*; …. VAR newElt : AgendaEltPtr; agenda : AgendaPtr; BEGIN … NEW(newElt); newElt.Init(6,4, "nouvel elt"); agenda.InsererTete(newElt);
12
20/04/05SE Info2 - S. L'haire UNIGE12 TP9 Une société informatique gère ses employés Trois types Administratif Développement Commerciaux Utilisez les méthodes vues aujourd'hui Faites une librairie pour vos listes et importez-la dans votre programme principal
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.