Presentation is loading. Please wait.

Presentation is loading. Please wait.

08/06/05SE Info2 - S. L'haire UNIGE1 Administratif Pas de TP le 15 juin S é bastien dans son bureau de 9h à 10h.

Similar presentations


Presentation on theme: "08/06/05SE Info2 - S. L'haire UNIGE1 Administratif Pas de TP le 15 juin S é bastien dans son bureau de 9h à 10h."— Presentation transcript:

1 08/06/05SE Info2 - S. L'haire UNIGE1 Administratif Pas de TP le 15 juin S é bastien dans son bureau de 9h à 10h

2 08/06/05SE Info2 - S. L'haire UNIGE2 TP 11 Reprendre le TP 10 et stocker les mots (pas les d é limiteurs) dans un arbre binaire Si le mot existe d é j à, incr é mentez un compteur Attention: petit bug automate corrig é.

3 08/06/05SE Info2 - S. L'haire UNIGE3 Arbres g é n é riques TYPE Noeud* = POINTER TO ABSTRACT RECORD parent*, gauche*, droite* : Noeud; END; Arbre* = POINTER TO ABSTRACT RECORD racine* : Noeud END; RechProc* = PROCEDURE (el, search: ANYPTR): INTEGER;

4 08/06/05SE Info2 - S. L'haire UNIGE4 Arbres sp é cifiques Noeud* = POINTER TO RECORD (LhaireInfo2Arbres.Noeud) mot* : Word; occurrences* : INTEGER; END; Arbre* = POINTER TO RECORD (LhaireInfo2Arbres.Arbre) END;

5 08/06/05SE Info2 - S. L'haire UNIGE5 M é thodes sp é cifiques PROCEDURE (n: Noeud) Compare* (n2: ANYPTR): INTEGER; BEGIN WITH n2 : Noeud DO RETURN LhaireInfo2Compare.Compare(n.mot,n2.mot) ELSE HALT(33); RETURN(33); END; END Compare;

6 08/06/05SE Info2 - S. L'haire UNIGE6 M é thodes suite PROCEDURE (n: Noeud)Ecrire*; BEGIN StdLog.String(n.mot); StdLog.String(" : "); … END Ecrire; PROCEDURE (dest : Noeud)RemplaceDonneesPar*(from: ANYPTR); BEGIN WITH from : Noeud DO dest.mot := from.mot$; dest.occurences := from.occurences; ELSE HALT(66); END; END RemplaceDonneesPar;

7 08/06/05SE Info2 - S. L'haire UNIGE7 Proc é dure recherche PROCEDURE RechercheArbre (el, search: ANYPTR): INTEGER; BEGIN WITH search : Search DO WITH el : Noeud DO RETURN LhaireInfo2Compare.Compare(e l.mot, search.mot) ELSE HALT(33); RETURN - 1; END ELSE HALT(33);RETURN -1; END; END RechercheArbre; PROCEDURE (a : Arbre)Recherche*(search : ANYPTR; proc : RechProc; VAR res : ANYPTR), NEW; PROCEDURE Rech(n: Noeud; search : ANYPTR; proc : RechProc; VAR res : ANYPTR); BEGIN (*proc é dure r é cursive*) IF n = NIL THEN res := NIL; ELSIF proc(n, search) > 0 THEN Rech(n.gauche, search, proc, res); ELSIF proc(n, search) < 0 THEN Rech(n.droite, search, proc, res); ELSE res := n;END; END Rech; BEGIN Rech(a.racine, search, proc, res); END Recherche;

8 08/06/05SE Info2 - S. L'haire UNIGE8 Proc é dure recherche simple PROCEDURE (a : Arbre)RechercheSimple*(cle : ANYPTR):ANYPTR, NEW; PROCEDURE Rech(n: Noeud; cle : ANYPTR): Noeud; BEGIN (*proc é dure r é cursive*) WITH cle : Noeud DO IF n = NIL THEN RETURN NIL ELSIF n.Compare(cle) > 0 THEN RETURN Rech(n.gauche,cle); ELSIF n.Compare(cle) < 0 THEN RETURN Rech(n.droite, cle); ELSE RETURN n END; ELSE HALT(88) END; END Rech; BEGIN RETURN Rech(a.racine, cle); END RechercheSimple

9 08/06/05SE Info2 - S. L'haire UNIGE9 Insertion PROCEDURE (arbre: Arbre) InsererDansArbre(mot : ARRAY OF CHAR), NEW; VAR n : Noeud; res : ANYPTR; BEGIN NEW(n); n.Initialiser(mot); res := arbre.RechercheSimple(n); IF res # NIL THEN WITH res : N œ ud DO INC(res.occurences); END; ELSE arbre.Inserer(n) END; END InsererDansArbre; AUTRE SOLUTION: VAR n : Noeud; s : Search; res : ANYPTR; BEGIN NEW(s); s.mot := mot$; arbre.Recherche(s, RechercheArbre, res); IF res # NIL THEN WITH res : Noeud DO INC(res.occurences); ELSE HALT(33) END; ELSE NEW(n); n.Initialiser(mot); arbre.Inserer(n);


Download ppt "08/06/05SE Info2 - S. L'haire UNIGE1 Administratif Pas de TP le 15 juin S é bastien dans son bureau de 9h à 10h."

Similar presentations


Ads by Google