2 (*******************************************************************)
\r
3 (*******************************************************************)
\r
5 (** IMPLEMENTATION DE QUEUE DE PRIORITE **)
\r
6 (** REALISATION AVEC ARBRES A.V.L. **)
\r
8 (*******************************************************************)
\r
9 (************** PROJET 1 DE LI1 **********************)
\r
10 (*******************************************************************)
\r
11 (** Annee 1993-1994 REALISE PAR UPPA **)
\r
12 (** GOUGEON Jean-Yves et RICHARD Jerome **)
\r
13 (*******************************************************************)
\r
14 (*******************************************************************)
\r
17 (*************** DEBUT DU PROGRAMME **********************)
\r
19 (****************** UNIT ************************)
\r
21 (****************************************************************************************************)
\r
22 (********** LISTE DES UNITs ***********)
\r
23 (****************************************************************************************************)
\r
24 (********** presentation : page d'acuei ***********)
\r
25 (********** init_graph : contient menu et gestion souris ***********)
\r
26 (********** aide : page d'aide du programme ***********)
\r
27 (********** mousepos : recherche position de souris ***********)
\r
28 (********** message : regroupement des messages ***********)
\r
29 (********** erreur : regroupement des messages d'erreurs ***********)
\r
30 (********** efface : efface une partie de l'
\82cran concernant les messages ***********)
\r
31 (********** ecrit : ecrit le nombre lu au clavier ***********)
\r
32 (********** AVL : d
\82claration de la classe AVL pour initialisation des arbres ***********)
\r
33 (********** PAUSE : pour cr
\82er une pause
\82cran ***********)
\r
34 (********** RG : rotation gauche ***********)
\r
35 (********** RGD : rotation gauche droite ***********)
\r
36 (********** INSERT : insertion dans un arbre ***********)
\r
37 (********** EQUILIBRE : pour
\82quilibrer l'arbre ***********)
\r
38 (********** MEMBER : pour d
\82tecter si l'element est membre de l'arbre ***********)
\r
39 (********** VIDE : teste si l'arbre est vide ou non ***********)
\r
40 (********** AFFICHE : affiche l'arbre (racine gauche droit) ***********)
\r
41 (********** MAX : determine l'element maximum de l'arbre ***********)
\r
42 (********** MIN : determine l'element minimum de l'arbre ***********)
\r
43 (********** DELETE : supprime l'element de l'arbre ***********)
\r
44 (****************************************************************************************************)
\r
46 unit presentation:iiuwgraph procedure;
\r
49 (* creation d'une bordure*)
\r
53 (*creation d'un cadre pour la fenetre*)
\r
57 call draw( 628,340);
\r
62 (*contenu du titre*)
\r
64 call outstring("IMPLEMENTATION D'UNE QUEUE DE PRIORITE");
\r
66 call outstring("METHODE DES ARBRES A.V.L.");
\r
69 call outstring("PROJET NUMERO 1");
\r
72 call outstring("PAR : Mr GOUGEON Jean-Yves et Mr RICHARD Jerome");
\r
74 (*appel de la procedure pause pour passer a la suite*)
\r
77 (*appel de l'effacage de l'ecran*)
\r
81 unit init_graph : iiuwgraph procedure(output chx : integer);
\r
82 var i,b,h,v:integer;
\r
87 (*teste si le driver de la souris est charge*)
\r
93 (*creation d'un cadre pour le menu*)
\r
100 (*contenu du menu*)
\r
101 call outstring(" INSERT SUPPRE RECHRCH VIDE MIN MAX QUIT ? ");
\r
103 call move(400,330);
\r
105 (*montre le curseur de la souris*)
\r
108 call getpress(0,h,v,b,gauche,droit,centre);
\r
109 (*attend un click et detecte le bouton*)
\r
111 if gauche then call mousepos(h,v,chx);
\r
112 (*demande la position de la souris*)
\r
115 (*enleve le curseur et sauve garde l'envirronnement*)
\r
118 (*remet le bouton gauche a false*)
\r
124 call move(150,200);
\r
125 call outstring("VOUS AVEZ BESOIN DE LA SOURIS");
\r
128 (*appel de la procedure pause pour passer a la suite*)
\r
131 (*met chx a 7 pour sortir directement*)
\r
138 unit aide:iiuwgraph procedure;
\r
143 (*creation d'un cadre pour le titre*)
\r
145 call draw(500,100);
\r
146 call draw(180,100);
\r
150 (*contenu du titre*)
\r
151 call outstring("AIDE SUR L'UTILISATION DU PROGRAMME");
\r
154 (*contenu de l'aide*)
\r
155 call outstring(" INSERT : Pour construire et inserer des valeurs dans l'arbre.");
\r
157 call outstring(" SUPPRE : Pour supprimer un element de l'arbre. ");
\r
159 call outstring(" RECHRCH : Pour rechercher un element dans l'arbre. ");
\r
161 call outstring(" VIDE : Pour indiquer si l'arbre est vide ou non vide.");
\r
163 call outstring(" MIN : Pour indiquer le minimum present dans l'arbre.");
\r
165 call outstring(" MAX : Pour indiquer le maximum present dans l'arbre.");
\r
167 call outstring(" QUIT : Pour sortir de ce programme.");
\r
169 call outstring(" ? : Cette page d'aide !");
\r
172 call outstring("Pour selectionner une de ces option il faut placer le cuseur de la");
\r
174 call outstring("souris sur le choix et cliquer sur le bouton gauche.");
\r
180 unit mousepos : iiuwgraph procedure (x,y:integer;output chx : integer);
\r
181 var touche:integer;
\r
183 (*declaration des emplacements du titre pour retourner le choix correspondant*)
\r
184 if((y>0)and(y<25))then
\r
185 if((x<80)and(x>0)) then chx:=1;
\r
187 if((x<160)and(x>88)) then chx:=2;
\r
189 if((x<220)and(x>168)) then chx:=3;
\r
191 if((x<300)and(x>228)) then chx:=4;
\r
193 if((x<350)and(x>308)) then chx:=5;
\r
195 if((x<400)and(x>358)) then chx:=6;
\r
197 if((x<500)and(x>432)) then chx:=7;
\r
199 if((x<639)and(x>580)) then chx:=8;
\r
200 fi; fi; fi; fi; fi; fi; fi; fi;
\r
205 (****** UNIT DE MESSAGE ***********)
\r
206 unit message:iiuwgraph procedure(x:integer);
\r
211 call move(120,330);
\r
212 call outstring("Valider votre choix en cliquant sur le menu ");
\r
219 (*efface les messages*)
\r
222 call outstring("Entrez la valeur
\85 ins
\82rer (taper 100 pour stopper la saisie):");
\r
228 (*efface les messages*)
\r
230 call move(150,330);
\r
231 call outstring("Entrer la valeur
\85 supprimer:");
\r
237 (*efface les messages*)
\r
239 call move(150,330);
\r
240 call outstring("Entrer la valeur
\85 rechercher : ");
\r
246 (*efface les messages*)
\r
248 call move(250,290);
\r
249 call outstring("L'arbre est vide");
\r
252 (*appel de la procedure pause pour passer a la suite*)
\r
259 call move(150,290);
\r
260 call outstring("L'arbre n'est pas vide");
\r
263 (*appel de la procedure pause pour passer a la suite*)
\r
271 call outstring("Au revoir
\85 bient
\93t pour une future utilisation !!!");
\r
274 (*appel de la procedure pause pour passer a la suite*)
\r
279 call outstring("Voi
\87i l'arbre avant r
\82\82quilibrage");
\r
283 call outstring("Voi
\87i l'arbre APRES r
\82\82quilibrage");
\r
288 (*efface les messages*)
\r
290 call move(150,290);
\r
291 call outstring("Voi
\87i l'
\82l
\82ment maximun de l'arbre :");
\r
292 call ecrit(tampon,550,290);
\r
295 (*appel de la procedure pause pour passer a la suite*)
\r
301 (*efface les messages*)
\r
303 call move(150,290);
\r
304 call outstring("Voi
\87i l'
\82l
\82ment minimun de l'arbre :");
\r
305 call ecrit(tampon,500,290);
\r
308 (*appel de la procedure pause pour passer a la suite*)
\r
314 (*efface les messages*)
\r
316 call move(250,290);
\r
317 call outstring(" n'est pas membre de l'arbre");
\r
318 call ecrit(val,200,290);
\r
321 (*appel de la procedure pause pour passer a la suite*)
\r
327 (*efface les messages*)
\r
329 call move(150,290);
\r
330 call outstring(" est membre de l'arbre");
\r
331 call ecrit(val,100,290);
\r
334 (*appel de la procedure pause pour passer a la suite*)
\r
339 (*efface les messages*)
\r
341 call move(250,290);
\r
342 call outstring("L'arbre est vide.");
\r
345 (*appel de la procedure pause pour passer a la suite*)
\r
349 call outstring(" L'ARBRE A.V.L. ACTUEL");
\r
351 call outstring("NOEUD");
\r
353 call outstring("BALANCE");
\r
356 call move(400,330);
\r
359 (********* UNIT ERREUR ********)
\r
360 unit erreur:iiuwgraph procedure(x:integer);
\r
367 (*efface les messages*)
\r
369 call move(100,290);
\r
370 call outstring("L'arbre est vide : IMPOSSIBLE D'EFFECTUER UNE SUPPRESSION");
\r
371 call move(400,330);
\r
376 (*efface les messages*)
\r
378 call move(100,290);
\r
379 call outstring("L'arbre est vide : IMPOSSIBLE D'EFFECTUER UNE RECHERCHE");
\r
380 call move(400,330);
\r
385 unit efface:iiuwgraph procedure;
\r
389 (*efface l'ecran de y=280 a y=330*)
\r
390 for i:=280 step 5 to 330 do
\r
392 call outstring(" ");
\r
396 unit ecrit :iiuwgraph procedure(element : integer, x, y : integer);
\r
397 var length, i : integer;
\r
401 (*convertion du code ascii en chiffre <1000*)
\r
404 call outstring("-");
\r
405 element:=(element*(-1));
\r
408 call Hascii(48 + element div 100);
\r
409 element := element mod 100;
\r
410 call Hascii(48 + element div 10);
\r
411 call Hascii(48 + element mod 10);
\r
412 call move(x-5,y-4);
\r
413 (*creation d'un cadre pour l'element*)
\r
414 call draw(x+28,y-4);
\r
415 call draw(x+28,y+10);
\r
416 call draw(x-5,y+10);
\r
417 call draw(x-5,y-4);
\r
421 var balance,info:real,
\r
425 unit PAUSE:iiuwgraph procedure;
\r
430 var h,b,v,p:integer,
\r
436 (*teste le driver de souris*)
\r
440 call move(150,330);
\r
441 call outstring("Appuyez sur une le bouton droit de la souris...");
\r
442 call move(400,330);
\r
444 (*tantque le bouton droit n'est pas selectionner*)
\r
445 while ( NOT droit) do
\r
446 call getpress(1,h,v,p,gauche,droit,centre);
\r
449 (*efface les messages*)
\r
452 (*restitue la couleur*)
\r
456 (*efface les messages*)
\r
458 call move(150,330);
\r
459 call outstring("APPUYER SUR UNE TOUCHE....");
\r
466 unit RG:procedure(inout sous_arbre:AVL);
\r
469 aux:=sous_arbre.fd;
\r
470 sous_arbre.fd:=aux.fg;
\r
471 aux.fg:=sous_arbre;
\r
475 unit RD:procedure(inout sous_arbre:AVL);
\r
478 aux:=sous_arbre.fg;
\r
479 sous_arbre.fg:=aux.fd;
\r
480 aux.fd:=sous_arbre;
\r
484 unit RGD:procedure(inout sous_arbre:AVL);
\r
486 call RG(sous_arbre.fg);
\r
487 call RD(sous_arbre);
\r
490 unit RDG:procedure(inout sous_arbre:AVL);
\r
492 call RD(sous_arbre.fd);
\r
493 call RG(sous_arbre);
\r
496 unit INSERT:iiuwgraph procedure(x:integer;inout arbre:AVL);
\r
503 (* cr
\82ation de l'objet
\85 ins
\82rer *)
\r
505 noeud_cree:=new AVL;
\r
506 noeud_cree.info:=x;
\r
507 noeud_cree.balance:=0;
\r
508 noeud_cree.fd:=none;
\r
509 noeud_cree.fg:=none;
\r
511 (* si l'arbre est vide *)
\r
518 (* recherche de l'emplacement o
\97 doit s'effectuer l'insertion *)
\r
521 sous_arbre:=new AVL;
\r
523 noeud_courant:=new AVL;
\r
524 pn_courant:=new AVL;
\r
527 noeud_courant:=arbre;
\r
529 while noeud_courant=/=none
\r
532 (* recherche de l'emplacement et m
\82morisation du
\r
533 dernier sous arbre pour lequel il y aura
\r
534 eventuellement desequilibre apr
\8as insertion
\r
535 (valeur actuelle de la balance:+1 ou -1) *)
\r
537 if noeud_courant.balance=/=0
\r
539 sous_arbre:=noeud_courant;
\r
540 ps_arbre:=pn_courant;
\r
542 pn_courant:=noeud_courant;
\r
543 if x<=noeud_courant.info
\r
545 noeud_courant:=noeud_courant.fg;
\r
547 noeud_courant:=noeud_courant.fd;
\r
551 (* ajout du noeud cr
\82\82 *)
\r
553 if x<=pn_courant.info
\r
555 pn_courant.fg:=noeud_cree;
\r
557 pn_courant.fd:=noeud_cree;
\r
560 (* mise
\85 jour des d
\82s
\82quilibres du sous_arbre au
\r
563 noeud_courant:=sous_arbre;
\r
564 while noeud_courant=/=noeud_cree
\r
566 if x<=noeud_courant.info
\r
568 noeud_courant.balance:=noeud_courant.balance+1;
\r
569 noeud_courant:=noeud_courant.fg;
\r
571 noeud_courant.balance:=noeud_courant.balance-1;
\r
572 noeud_courant:=noeud_courant.fd;
\r
576 (* r
\82\82quilibrage *)
\r
581 (*Voi
\87i l'arbre avant r
\82\82quilibrage*)
\r
583 call AFFICHE(arbre,0,649,60);
\r
584 (*appel procedure affichage arbre*)
\r
586 call EQUILIBRE(sous_arbre);
\r
592 if sous_arbre.info<=ps_arbre.info
\r
594 ps_arbre.fg:=sous_arbre;
\r
596 ps_arbre.fd:=sous_arbre;
\r
601 (*appel de la procedure pause pour passer a la suite*)
\r
604 (*appel de l'effacage de l'ecran*)
\r
609 (*Voi
\87i l'arbre APRES r
\82\82quilibrage*)
\r
611 call AFFICHE(arbre,0,649,60);
\r
612 (*appel procedure affichage arbre*)
\r
615 (*appel de la procedure pause pour passer a la suite*)
\r
621 unit EQUILIBRE:procedure(inout sous_arbre:AVL);
\r
628 if (NOT VIDE(sous_arbre)) then
\r
629 if sous_arbre.balance=-1
\r
634 if sous_arbre.balance=-2
\r
638 balance:=sous_arbre.balance;
\r
649 if sous_arbre.fg.balance=-1
\r
653 balance_fg:=sous_arbre.fg.balance;
\r
657 aux1:=sous_arbre.fg;
\r
659 sous_arbre.balance:=1;
\r
661 sous_arbre.fg:=aux2;
\r
662 aux1.fd:=sous_arbre;
\r
665 call RD(sous_arbre);
\r
666 sous_arbre.balance:=0;
\r
667 sous_arbre.fd.balance:=0;
\r
669 call RGD(sous_arbre);
\r
670 if sous_arbre.balance=-1
\r
674 if sous_arbre.balance=1
\r
683 sous_arbre.fg.balance:=0;
\r
684 sous_arbre.fd.balance:=-1;
\r
686 sous_arbre.fg.balance:=1;
\r
687 sous_arbre.fd.balance:=0;
\r
689 sous_arbre.fg.balance:=0;
\r
690 sous_arbre.fd.balance:=0;
\r
692 sous_arbre.balance:=0;
\r
695 if sous_arbre.fd.balance=-1
\r
699 balance_fd:=sous_arbre.fd.balance;
\r
703 call RDG(sous_arbre);
\r
704 if sous_arbre.balance=-1
\r
708 if sous_arbre.balance = 1
\r
717 sous_arbre.fd.balance:=-1;
\r
718 sous_arbre.fg.balance:=0;
\r
720 sous_arbre.fd.balance:=0;
\r
721 sous_arbre.fg.balance:=1;
\r
723 sous_arbre.fd.balance:=0;
\r
724 sous_arbre.fg.balance:=0;
\r
726 sous_arbre.balance:=0;
\r
728 aux1:=sous_arbre.fd;
\r
730 sous_arbre.balance:=-1;
\r
732 aux1.fg:=sous_arbre;
\r
733 sous_arbre.fd:=aux2;
\r
736 call RG(sous_arbre);
\r
737 sous_arbre.balance:=0;
\r
738 sous_arbre.fg.balance:=0;
\r
745 unit MEMBER:function(val:real;
\r
747 output pos_element:AVL):boolean;
\r
752 pos_element:=arbre;
\r
772 unit VIDE:function(arbre:AVL):boolean;
\r
782 unit AFFICHE:iiuwgraph procedure(t:AVL;xmin,xmax,y:integer);
\r
787 w:=((xmin-xmax)/2)+xmax;
\r
788 (*divise la longeur de l'ecran par 2 pour la position*)
\r
791 call ecrit(t.info,w,y);
\r
793 call ecrit(t.balance,w,y+20);
\r
795 call AFFICHE(t.fg,xmin,w,y+60);
\r
796 (*appel procedure affichage arbre avec fils gauche*)
\r
798 call AFFICHE(t.fd,w,xmax,y+60);
\r
799 (*appel procedure affichage arbre avec fils droit*)
\r
804 unit MAX:procedure(input sous_arbre:AVL;output element:AVL);
\r
806 element:=sous_arbre;
\r
807 while element.fd=/=none
\r
809 element:=element.fd;
\r
813 unit MIN:procedure(input sous_arbre:AVL;output element:AVL);
\r
815 element:=sous_arbre;
\r
816 while element.fg=/=none
\r
818 element:=element.fg;
\r
822 unit DELETE:procedure(x:real;input arbre:AVL;input pere:AVL);
\r
824 balance_pere:integer,
\r
825 pere_element,pos_element,element:AVL;
\r
829 (*si x>info de l'arbre aller fils droit*)
\r
830 call DELETE(x,arbre.fd,arbre);
\r
834 (*si x<info aller fils gauche*)
\r
835 call DELETE(x,arbre.fg,arbre);
\r
838 (* on a trouv
\82 x *)
\r
839 (* si la balance de l'objet
\85 supprimer=0 et si il n'a*)
\r
840 (* pas de fils droit par exemple cela veut dire qu'il n'a*)
\r
841 (*pas de sous_arbre*)
\r
843 if (arbre.balance=0 AND arbre.fd=none)
\r
845 balance_pere:=pere.balance;
\r
849 pere.balance:=pere.balance-1;
\r
852 pere.balance:=pere.balance+1;
\r
855 if (arbre.fg=none AND arbre.fd=/=none) OR
\r
856 (arbre.fg=/=none AND arbre.fd=none)
\r
858 balance_pere:=pere.balance;
\r
865 pere.balance:=pere.balance-1;
\r
868 pere.balance:=pere.balance+1;
\r
871 (*le fils gauche est
\85 none *)
\r
875 pere.balance:=pere.balance-1;
\r
878 pere.balance:=pere.balance+1;
\r
884 (*destruction de la feuille*)
\r
885 call EQUILIBRE(pere);
\r
886 (* r
\82\82quilibrage selon la balance *)
\r
894 balance_pere:=pere.balance;
\r
895 pere.balance:=pere.balance-1;
\r
897 balance_pere:=pere.balance;
\r
898 pere.balance:=pere.balance+1;
\r
902 if pere.balance=0 AND balance_pere=/=0
\r
910 (**********************FIN UNIT ****************************)
\r
913 (**************************** DEBUT PRINCIPAL *******************)
\r
915 val,choix,cas,y,valeur,tampon:real,
\r
916 tree,pere_max,elem_max,pere_noeud_supprime,pos_noeud_supprime,pere
\r
917 ,position,recherche:AVL,
\r
918 low,driver,droit,gauche,centre:boolean,
\r
919 nombre_noeud : integer,
\r
924 pref iiuwgraph block
\r
928 call HPAGE(0,639,349);
\r
938 (*** demande choix ***)
\r
940 (*Valider votre choix en cliquant sur le menu*)
\r
942 call init_graph(choix);
\r
951 (*Entrez la valeur
\85 ins
\82rer (taper 100 pour stopper la saisie):*)
\r
953 call move(400,330);
\r
956 while(MEMBER(val,tree,position))do
\r
959 (*est membre de l'arbre*)
\r
961 call move(400,330);
\r
964 (*Entrez la valeur
\85 ins
\82rer (taper 100 pour stopper la saisie):*)
\r
968 nombre_noeud:=nombre_noeud+1;
\r
974 call INSERT(val,tree);
\r
977 (*Voi
\87i l'arbre avant r
\82\82quilibrage*)
\r
980 (*Entrez la valeur
\85 ins
\82rer (taper 100 pour stopper la saisie):*)
\r
982 call move(400,330);
\r
986 while(MEMBER(val,tree,position))do
\r
989 (*est membre de l'arbre*)
\r
991 call move(400,330);
\r
994 (*Entrez la valeur
\85 ins
\82rer (taper 100 pour stopper la saisie):*)
\r
998 nombre_noeud:=nombre_noeud+1;
\r
1001 call move(150,290);
\r
1002 call outstring(" VOUS AVEZ ATTEINT LE MAXIMUM ");
\r
1005 (*appel de la procedure pause pour passer a la suite*)
\r
1008 (*affecte 100 pour sortir de la boucle*)
\r
1021 (*L'arbre est vide : IMPOSSIBLE D'EFFECTUER UNE SUPPRESSION*)
\r
1024 (*appel de la procedure pause pour passer a la suite*)
\r
1029 (*Entrer la valeur
\85 supprimer:*)
\r
1031 call move(400,330);
\r
1033 (*lit nouvelle valeur*)
\r
1035 if member(val,tree,position)
\r
1039 (*Voi
\87i l'arbre avant r
\82\82quilibrage*)
\r
1042 if position.fg=/=none AND position.fd=/=none
\r
1045 call MAX(position.fg,elem_max);
\r
1046 valeur:=elem_max.info;
\r
1047 call DELETE(elem_max.info,tree,pere);
\r
1048 if MEMBER(val,tree,position)
\r
1050 position.info:=valeur;
\r
1057 (*L'arbre est vide.*)
\r
1062 (*appel de l'effacage de l'ecran*)
\r
1065 (*Voi
\87i l'arbre avant r
\82\82quilibrage*)
\r
1067 call AFFICHE(tree,0,649,60);
\r
1068 (*appel procedure affichage arbre*)
\r
1070 call EQUILIBRE(tree);
\r
1073 (*appel de la procedure pause pour passer a la suite*)
\r
1076 (*appel de l'effacage de l'ecran*)
\r
1079 (*Voi
\87i l'arbre APRES r
\82\82quilibrage*)
\r
1081 call AFFICHE(tree,0,649,60);
\r
1082 (*appel procedure affichage arbre*)
\r
1085 (*appel de la procedure pause pour passer a la suite*)
\r
1089 call DELETE(val,tree,pere);
\r
1092 (*appel de l'effacage de l'ecran*)
\r
1095 (*Voi
\87i l'arbre avant r
\82\82quilibrage*)
\r
1097 call AFFICHE(tree,0,649,60);
\r
1098 (*appel procedure affichage arbre*)
\r
1099 call EQUILIBRE(tree);
\r
1101 (*appel de la procedure pause pour passer a la suite*)
\r
1104 (*appel de l'effacage de l'ecran*)
\r
1107 (*Voi
\87i l'arbre APRES r
\82\82quilibrage*)
\r
1109 call AFFICHE(tree,0,649,60);
\r
1110 (*appel procedure affichage arbre*)
\r
1113 (*appel de la procedure pause pour passer a la suite*)
\r
1117 if(VIDE(tree)) then
\r
1120 nombre_noeud:=nombre_noeud-1;
\r
1133 (*L'arbre est vide : IMPOSSIBLE D'EFFECTUER UNE RECHERCHE*)
\r
1135 (*appel de la procedure pause pour passer a la suite*)
\r
1138 (*Entrer la valeur
\85 rechercher :*)
\r
1139 call move(400,330);
\r
1141 if (MEMBER(val,tree,position))
\r
1144 (*est membre de l'arbre*)
\r
1147 (*n'est pas membre de l'arbre*)
\r
1156 (*L'arbre est vide*)
\r
1159 (*L'arbre n'est pas vide*)
\r
1167 (*L'arbre est vide : IMPOSSIBLE D'EFFECTUER UNE RECHERCHE*)
\r
1169 (*appel de la procedure pause pour passer a la suite*)
\r
1172 while(recherche=/=none)
\r
1174 tampon:=recherche.info;
\r
1175 recherche:=recherche.fg;
\r
1178 (*Voi
\87i l'
\82l
\82ment minimun de l'arbre :*)
\r
1186 (*L'arbre est vide : IMPOSSIBLE D'EFFECTUER UNE RECHERCHE*)
\r
1188 (*appel de la procedure pause pour passer a la suite*)
\r
1191 while(recherche=/=none)
\r
1193 tampon:=recherche.info;
\r
1194 recherche:=recherche.fd;
\r
1197 (*Voi
\87i l'
\82l
\82ment maximun de l'arbre :*)
\r
1202 (*Au revoir
\85 bient
\93t pour une future utilisation !!*)
\r
1204 when 8 : (* AIDE *)
\r
1206 (*efface les messages*)
\r
1208 (*appel procedure aide*)
\r
1210 (*appel de la procedure pause pour passer a la suite*)
\r
1213 (*appel de l'effacage de l'ecran*)
\r
1215 (*L'ARBRE A.V.L. ACTUEL*)
\r
1216 call AFFICHE(tree,0,649,60);
\r
1217 (*appel procedure affichage arbre*)
\r
1220 (*Valider votre choix en cliquant sur le menu*)
\r
1221 call init_graph(choix);
\r
1226 (*************************FIN PRINCIPAL ********************)
\r