Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parCharles Godefroy Modifié depuis plus de 9 années
1
11/05/05SE Info2 - S. L'haire UNIGE1 TP 9 structure EmployeEltPtr* = POINTER TO ABSTRACT RECORD (LhaireInfo2Lists.DblListEltPtr) nom*, prenom* : Chaine; tel*, salaire* : INTEGER; END; AdminPtr* = POINTER TO RECORD (EmployeEltPtr) service* : Chaine;END; DevPtr* = POINTER TO RECORD (EmployeEltPtr) application*, specialite* : Chaine; END; ComPtr* = POINTER TO RECORD (EmployeEltPtr) chiffre*, nbclients* : INTEGER; END;
2
11/05/05SE Info2 - S. L'haire UNIGE2 PROCEDURE (el : ListEltPtr)Compare*(elt2 : ANYPTR): INTEGER, NEW,ABSTRACT; Proc é dures g é n é riques PROCEDURE (l : DblListPtr)InsererEnOrdre*(el : ANYPTR): BOOLEAN; VAR temp : ListEltPtr; BEGIN WITH el : DblListEltPtr DO IF (l.EstVide()) OR (l.tete.Compare(el) > 0) THEN RETURN l.InsererTete(el) ELSIF l.queue.Compare(el) <=0 THEN RETURN l.InsererQueue(el); ELSE temp := l.tete; WHILE (temp.suivant # NIL) & (temp.suivant.Compare(el) <0) DO temp := temp.suivant; END; el.precedent := temp(DblListEltPtr); el.suivant := temp.suivant; IF temp.suivant # NIL THEN temp.suivant(DblListEltPtr).pr ecedent := el(DblListEltPtr); END; temp.suivant := el; l.crt := el; INC(l.taille); RETURN TRUE; END; RETURN FALSE; END InsererEnOrdre;
3
11/05/05SE Info2 - S. L'haire UNIGE3 Insertion en ordre PROCEDURE (el : EmployeEltPtr)Compare*(elt2 : ANYPTR): INTEGER; (*Impl é mentation de la m é thode abstraite: RETOURNE 1 si el > elt2 0 si el = elt2 -1 si el < elt2 *) VAR i : INTEGER; BEGIN WITH elt2 : EmployeEltPtr DO i := LhaireInfo2Compare.Compare(el.nom,elt2.nom); IF (i 0) THEN RETURN i ELSE RETURN LhaireInfo2Compare.Compare(el.prenom,elt2.prenom); END; ELSE HALT(99) END; END Compare;
4
11/05/05SE Info2 - S. L'haire UNIGE4 Initialisation des elts de liste Une proc é dure non export é e initialise les é l é ments communs aux 3 types d'employ é s PROCEDURE (el : EmployeEltPtr)InitEmpl(IN n, p : Chaine; t, s : INTEGER), NEW; BEGIN el.suivant := NIL; el.precedent := NIL; el.nom := n$; el.prenom := p$;el.tel := t; el.salaire := s; END InitEmpl; Une proc é dure export é e initialise les types d'employ é s PROCEDURE (el : DevPtr)Init*(IN n, p : Chaine; t, s : INTEGER; IN a, sp : Chaine),NEW; BEGIN el.InitEmpl(n,p,t,s); el.application := a$; …
5
11/05/05SE Info2 - S. L'haire UNIGE5 Proc é dure d'insertion PROCEDURE NouveauAdministratif*; VAR a: AdminPtr; BEGIN NEW(a); a.Init(dialog.employ é.nom, dialog.employ é.pr é nom, dialog.coordonn é es.t é l é phone,dialog.coordonn é es.salaire,dialog.ADMINISTRATIF.service); IF liste.InsererEnOrdre(a) THEN …
6
11/05/05SE Info2 - S. L'haire UNIGE6 Affichage PROCEDURE (el : EmployeEltPtr)EcrireEmplEltLog, NEW; BEGIN StdLog.String("Nom: "); StdLog.String(el.nom); StdLog.String(" Prenom: ") ;StdLog.String(el.prenom); … END EcrireEmplEltLog; PROCEDURE (el : AdminPtr)EcrireEltLog*; BEGIN el.EcrireEmplEltLog; StdLog.String(" ADMINISTRATION Service: ") ; StdLog.String(el.service); StdLog. Ln; END EcrireEltLog;
7
11/05/05SE Info2 - S. L'haire UNIGE7 Insertion sp é cifique PROCEDURE (l : ListeEmployesPtr)InsererEmploye*(el : EmployeEltPtr): BOOLEAN, NEW; VAR ok : BOOLEAN; BEGIN IF ~l.EstVide() THEN IF ((LhaireInfo2Compare.Compare(el.nom,l.queue(EmployeEltPtr). nom) > 0) OR ((LhaireInfo2Compare.Compare(el.nom, l.queue(EmployeEltPtr).nom) = 0) & (LhaireInfo2Compare.Compare(el.prenom, l.queue(EmployeEltPtr).prenom) >= 0))) THEN RETURN l.InsererQueue(el); …
8
11/05/05SE Info2 - S. L'haire UNIGE8 Recherche sp é cifique PROCEDURE (l : ListeEmployesPtr)RechEmploye*(IN n, p : Chaine): BOOLEAN, NEW; VAR ok :BOOLEAN; BEGIN IF (~l.EstVide()) & (LEN(n$) >0) THEN IF l.AllerDebut() THEN IF LEN(p$) > 0 THEN ok := FALSE; REPEAT IF ((LhaireInfo2Compare.Compare(n, l.crt(EmployeEltPtr).nom) = 0) & (LhaireInfo2Compare.Compare(p, l.crt(EmployeEltPtr).prenom)= 0)) THEN ok := TRUE; END; UNTIL (ok) OR (~l.AllerSuivant()); … idem si le pr é nom est vide
9
11/05/05SE Info2 - S. L'haire UNIGE9 Type proc é dure On d é finit un type g é n é rique de proc é dure avec des param è tres d é finis RechProc* = PROCEDURE (search, el : ANYPTR) : BOOLEAN ; Utile pour parcours de structures (liste) ou pour recherche Une proc é dure d é clare un param è tre de type RechProc (comme une variable) et l'utilise dans son algorithme
10
11/05/05SE Info2 - S. L'haire UNIGE10 Recherche g é n é rique 1) Dans Info2Lists RechProc* = PROCEDURE (search, el : ANYPTR) : BOOLEAN ; PROCEDURE (l : ListPtr)RechercheFirst*(proc : RechProc; key : ANYPTR): BOOLEAN, NEW, EXTENSIBLE; VAR temp : ListEltPtr; ok : BOOLEAN; BEGIN IF (~l.EstVide()) THEN IF l.AllerDebut() THEN temp := l.crt; REPEAT IF proc(key, l.crt) THEN RETURN TRUE END; UNTIL (~l.AllerSuivant()); l.crt :=temp; RETURN FALSE; …
11
11/05/05SE Info2 - S. L'haire UNIGE11 Recherche g é n é rique (2) PROCEDURE RechercheEmploye*(search, el : ANYPTR):BOOLEAN; (*même en-tête que type RechProc de la page pr é c é dente*) BEGIN ASSERT(el # NIL); ASSERT(search # NIL); WITH search : RechercheKey DO WITH el : EmployeEltPtr DO IF LhaireInfo2Compare.Compare(el.nom, search.nom) # 0 THEN RETURN FALSE; ELSE IF LEN(search.prenom$) >0 THEN IF LhaireInfo2Compare.Compare(el.prenom, search.prenom) # 0 THEN RETURN FALSE; END; … RechercheKey* = POINTER TO RECORD nom*, prenom* : Chaine; END; C'est ç a qui sera ex é cut é à la place de proc(key,l.crt) à la page pr é c é dente
12
11/05/05SE Info2 - S. L'haire UNIGE12 Recherche 3 PROCEDURE Rechercher*; VAR r : RechercheKey; resultats : LhaireInfo2Lists.DblListPtr; BEGIN NEW(r); r.Init(dialog.Recherche.nom,dialog.Recherche.pr é nom ); (*appel de la recherche g é n é rique avec une proc é dure de rech. Sp é cifique*) IF liste.RechercheFirst(RechercheEmploye, r) THEN liste.AfficherCrt(dialog); dialog.message := "Trouv é !!!";
13
11/05/05SE Info2 - S. L'haire UNIGE13 TP 10 Une premi è re approche TAL Avant de donner une structure syntaxique, un analyseur doit isoler une phrase dans un texte puis tous les é l é ments d'une phrase y.c. ponctuation La phrase est d é compos é e en graphe dont les arcs sont num é rot é s de 0 à n 0 Aujourd'hui 1, 2 le 3 chat 4 d' 5 Anne 6 a 7 attrap é 8 deux 9 souris 10. 11
14
11/05/05SE Info2 - S. L'haire UNIGE14 Sortie du graphe Element: Aujourd'hui pos: 0; start: 0; end: 1 Element:, pos: 11; start: 1; end: 2 Element: le pos: 13; start: 2; end: 3 Element: chat pos: 16; start: 3; end: 4 Pos donne l'indice du 1er caract è re de l' é l é ment dans la cha î ne lue Start et end donnent les sommets du graphe
15
11/05/05SE Info2 - S. L'haire UNIGE15 D é limiteurs Apostrophe: fait office de d é limiteur en indice 1 ou 2 de la cha î ne (l' d' qu' etc.), sinon fait partie d'un mot (aujourd'hui) Espace: d é limiteur particulier ! " ( ),.- : ; [ ] : autres d é limiteurs Sinon, ce sont des caract è res de l' é l é ment
16
11/05/05SE Info2 - S. L'haire UNIGE16 TP 10 Utilisez vos listes g é n é riques Utilisez Strings.Extract pour extraire un é l é ment de la cha î ne PROCEDURE Extract (s: ARRAY OF CHAR; pos, len: INTEGER; OUT res: ARRAY OF CHAR) S : chaine originale Pos : indice de d é part de l' é l é ment à copier Len : longueur de la cha î ne à extraire Res: r é sultat de l'extraction
17
11/05/05SE Info2 - S. L'haire UNIGE17 Pourquoi des arcs Jean recouvre les pommes de terre Pomme de terre 1 ou 3 é l é ments? Plusieurs analyses possibles Pomme de terre potato patata Kartoffel John is covering the potatoes John is covering the apples with earth.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.