La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

20/04/05SE Info2 - S. L'haire UNIGE1 TP 8: Solution 1 AgendaPtr = POINTER TO RECORD jour, heure: INTEGER; sujet: Chaine; precedent, suivant: AgendaPtr.

Présentations similaires


Présentation au sujet: "20/04/05SE Info2 - S. L'haire UNIGE1 TP 8: Solution 1 AgendaPtr = POINTER TO RECORD jour, heure: INTEGER; sujet: Chaine; precedent, suivant: AgendaPtr."— Transcription de la présentation:

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


Télécharger ppt "20/04/05SE Info2 - S. L'haire UNIGE1 TP 8: Solution 1 AgendaPtr = POINTER TO RECORD jour, heure: INTEGER; sujet: Chaine; precedent, suivant: AgendaPtr."

Présentations similaires


Annonces Google