ef1f360eb779b826aa7303b77af2a0125016779d
[loglan.git] / bicol2.log
1 \r
2 program bicolore;\r
3 \r
4 \r
5 (* ANNEE UNIVERSITAIRE 1993/1994 : Universit\82 de Pau                    *)\r
6 \r
7 (* DATE DE REMISE : 15 JANVIER 1994                                     *)\r
8 (*                                                                      *)\r
9 (* SUJET : ARBRES BICOLORES                                             *)\r
10 (*                                                                      *)\r
11 (*      GROUPE 2 , LICENCE INFORMATIQUE , LI1                           *)\r
12 (*                                                                      *)\r
13 (*                                                                      *)\r
14 (*      MARIE HEGUY                                                     *)\r
15 (*      JACQUES LATAPIE                                                 *)\r
16 \r
17 (*      SUJET PROPOSE PAR MME MIRKOWSKA                                 *)\r
18 \r
19 \r
20 unit noeud:class;\r
21 var elem:integer,gauche,droite,pere:noeud,couleur:integer;\r
22 end noeud;\r
23 \r
24 \r
25 (* RECHERCHE DU MINIMUN *)\r
26 unit recmin:function(t:noeud):noeud;\r
27 begin\r
28 if t.gauche=z then result:=t;\r
29               else result:=recmin(t.gauche);\r
30 fi;\r
31 end recmin;\r
32 \r
33 \r
34 (* RECHERCHE DU MAXIMUM *)\r
35 unit recmax:function(t:noeud):noeud;\r
36 begin\r
37 if t.droite=z then result:=t;\r
38               else result:=recmax(t.droite);\r
39 fi;\r
40 end recmax;\r
41 \r
42 \r
43 (* SUPPRESSION D'UN ELEMENT COMME DANS UN ARBRE BST *)\r
44 unit suppression:iiuwgraph procedure(inout t:noeud,supp:noeud,remplacant:noeud);\r
45 var locale:noeud;\r
46 begin\r
47 if supp.gauche=z or supp.droite=z\r
48     then remplacant:=supp;\r
49     else remplacant:=recmin(supp.droite);\r
50 fi;\r
51 if remplacant.gauche<>z\r
52    then locale:=remplacant.gauche;\r
53    else locale:=remplacant.droite;\r
54 fi;\r
55 locale.pere:=remplacant.pere;\r
56 if remplacant.pere=remplacant\r
57     then t:=locale;\r
58          t.pere:=t;\r
59     else if remplacant=remplacant.pere.gauche\r
60          then remplacant.pere.gauche:=locale;\r
61          else remplacant.pere.droite:=locale;\r
62          fi;\r
63 fi;\r
64 if remplacant<>supp then supp.elem:=remplacant.elem;fi;\r
65 if remplacant.couleur=0 then call suppresmaj(t,locale);fi;\r
66 end suppression;\r
67 \r
68 \r
69 (* ROTATION ET INVERSION DES COULEURS APRES SUPPRESSION *)\r
70 unit suppresmaj:iiuwgraph procedure(inout t:noeud,rond:noeud);\r
71 var local:noeud,rep:integer;\r
72 begin\r
73 while rond<>t and rond.couleur=0\r
74 do\r
75         if rond=rond.pere.gauche\r
76         then \r
77             local:=rond.pere.droite;\r
78             if local.couleur=1\r
79                then\r
80                    local.couleur:=0;\r
81                    rond.pere.couleur:=1;\r
82                    call gauch(t,rond.pere);\r
83                    call cls;\r
84                    call visua(t,0.5,1,0,0);\r
85                    call color(14);\r
86                    call move(2,340);\r
87                    call outstring("Visua. apr\8as rot. Gauche  sur ");\r
88                    call writeinteger(rond.pere.elem);\r
89                    call outstring(" <RETURN> ");\r
90                    rep:=inchar;\r
91                    call cls;\r
92                    local:=rond.pere.droite;\r
93             fi;\r
94             if local.gauche.couleur=0 and local.droite.couleur=0\r
95                then\r
96                    local.couleur:=1;\r
97                    rond:=rond.pere;\r
98                else\r
99                    if local.droite.couleur=0 \r
100                       then local.gauche.couleur:=0;\r
101                            local.couleur:=1;\r
102                            call droit(t,local);\r
103                            call cls;\r
104                            call visua(t,0.5,1,0,0);\r
105                            call color(14);\r
106                            call move(2,340);\r
107                            call outstring("Rotation Droite sur ");\r
108                            call writeinteger(local.elem);\r
109                            call outstring(" <RETURN> ");\r
110                            rep:=inchar;\r
111                            call cls;\r
112                            local:=rond.pere.droite;\r
113                    fi;\r
114                    local.couleur:=rond.pere.couleur;\r
115                    rond.pere.couleur:=0;\r
116                    local.droite.couleur:=0;\r
117                    call gauch(t,rond.pere);\r
118                    call cls;\r
119                    call visua(t,0.5,1,0,0);\r
120                    call color(14);\r
121                    call move(2,340);\r
122                    call outstring("Rotation Gauche sur ");\r
123                    call writeinteger(rond.pere.elem);\r
124                    call outstring(" <RETURN> ");\r
125                    rep:=inchar;\r
126                    call cls;\r
127                    rond:=t;\r
128                fi;\r
129         else\r
130                 local:=rond.pere.gauche;\r
131                 if local.couleur=1\r
132                    then\r
133                       local.couleur:=0;\r
134                       rond.pere.couleur:=1;\r
135                       call droit(t,rond.pere);\r
136                       call cls;\r
137                       call visua(t,0.5,1,0,0);\r
138                       call color(14);\r
139                       call move(2,340);\r
140                       call outstring("Rotation Droite sur ");\r
141                       call writeinteger(rond.pere.elem);\r
142                       call outstring(" <RETURN> ");\r
143                       rep:=inchar;\r
144                       call cls;\r
145                       local:=rond.pere.gauche;\r
146                 fi;\r
147                 if local.droite.couleur=0 and local.gauche.couleur=0\r
148                    then\r
149                       local.couleur:=1; \r
150                       rond:=rond.pere;\r
151                    else\r
152                       if local.gauche.couleur=0\r
153                          then\r
154                              local.droite.couleur:=0;\r
155                              local.couleur:=1;\r
156                              call gauch(t,local);\r
157                              call cls;\r
158                              call visua(t,0.5,1,0,0);\r
159                              call color(14);\r
160                              call move(2,340);\r
161                              call outstring("Rotation Gauche sur ");\r
162                              call writeinteger(local.elem);\r
163                              call outstring(" <RETURN> ");\r
164                              rep:=inchar;\r
165                              call cls;\r
166                              local:=rond.pere.gauche;\r
167                       fi;\r
168                       local.couleur:=rond.pere.couleur;\r
169                       rond.pere.couleur:=0;\r
170                       local.gauche.couleur:=0;\r
171                       call droit(t,rond.pere);\r
172                       call cls;\r
173                       call visua(t,0.5,1,0,0);\r
174                       call color(14);\r
175                       call move(2,340);\r
176                       call outstring("Rotation Droite sur ");\r
177                       call writeinteger(rond.pere.elem);\r
178                       call outstring(" <RETURN> ");\r
179                       rep:=inchar;\r
180                       call cls;\r
181                       rond:=t;\r
182                 fi;\r
183         fi;\r
184 od;\r
185 rond.couleur:=0;\r
186 end suppresmaj;\r
187 \r
188 \r
189 (* INSERSION COMME DANS UN ARBRE BST *)\r
190 unit insert_bst: procedure(nb:integer;inout r:noeud,x:noeud,p:noeud,trouve:integer);\r
191 begin\r
192 if r.elem=nb then\r
193                 if r=z then\r
194                 r:=new noeud;\r
195                 r.elem:=nb;\r
196                 if p=z then r.pere:=r;\r
197                         else r.pere:=p;\r
198                 fi;\r
199                 r.droite:=z;\r
200                 r.gauche:=z;\r
201                 x:=r;\r
202                 else\r
203                 (*("CET ELEMENT EST DEJA INSERE !!! ");*)\r
204                 trouve:=1;\r
205                 fi;\r
206 else\r
207         if nb<r.elem then call insert_bst(nb,r.gauche,x,r,trouve);\r
208                      else call insert_bst(nb,r.droite,x,r,trouve);\r
209         fi;\r
210 fi;\r
211 end insert_bst;\r
212 \r
213 \r
214 (* ROTATIONS ET CHANGEMENTS DE COULEURS APRES INSERSION *)\r
215 unit insert:iiuwgraph procedure(inout x:noeud;inout racine:noeud);\r
216 var y,valeur:noeud,rep:integer;\r
217 begin\r
218 call cls;\r
219 call color(14);\r
220 x.couleur:=1;\r
221 while ((x<>racine) and (x.pere.couleur=1))\r
222 do\r
223 call cls;\r
224 call visua(racine,0.5,1,0,0);\r
225 call color(14);\r
226 call move(2,340);\r
227 call outstring("On a deux noeuds rouges cons\82cutifs ");\r
228 call writeinteger(x.elem);\r
229 call outstring(" et ");\r
230 call writeinteger(x.pere.elem);\r
231 call outstring(" <RETURN> ");\r
232 rep:=inchar;\r
233 call cls;\r
234 if x.pere=x.pere.pere.gauche \r
235 then \r
236     y:=x.pere.pere.droite;\r
237     if y.couleur=1\r
238     then\r
239         (* L'oncle de x.elem est rouge donc inversion des couleurs*)\r
240         x.pere.couleur:=0;\r
241         y.couleur:=0;\r
242         x.pere.pere.couleur:=1;\r
243         call visua(racine,0.5,1,0,0);\r
244         call color(14);\r
245         call move(2,340);\r
246         call outstring("Visualisation apr\8as inversion des couleur <RETURN> ");\r
247         rep:=inchar;\r
248         call cls;\r
249         x:=x.pere.pere;\r
250     else\r
251         if x=x.pere.droite \r
252         then\r
253                 x:=x.pere;\r
254                 call gauch(racine,x);\r
255                 call cls;\r
256                 call visua(racine,0.5,1,0,0);\r
257                 call color(14);\r
258                 call move(2,340);\r
259                 call outstring("Visualisation apr\8as rot. gauche au niveau de ");\r
260                 call writeinteger(x.elem);\r
261                 call outstring(" <RETURN> ");\r
262                 rep:=inchar;\r
263                 call cls;\r
264         fi;\r
265         x.pere.couleur:=0;\r
266         x.pere.pere.couleur:=1;\r
267         if x.pere.pere=racine \r
268                 then valeur:=x.pere;\r
269                 else valeur:=x.pere.pere.pere;\r
270         fi;\r
271         call droit(racine,x.pere.pere);\r
272         x.pere.pere:=valeur;\r
273         call cls;\r
274         call visua(racine,0.5,1,0,0);\r
275         call color(14);\r
276         call move(2,340);\r
277         call outstring("Visu.ap\8as r\82tab. des couleurs et rot. D sur ");\r
278         call writeinteger(x.pere.pere.elem);\r
279         call outstring(" <RETURN> ");\r
280         rep:=inchar;\r
281         call cls;\r
282     fi;\r
283 else\r
284     y:=x.pere.pere.gauche;\r
285     if y.couleur=1\r
286     then\r
287         (* L'oncle de x.elem est rouge donc inversion des couleurs*)\r
288         x.pere.couleur:=0;\r
289         y.couleur:=0;\r
290         x.pere.pere.couleur:=1;\r
291         call cls;\r
292         call visua(racine,0.5,1,0,0);\r
293         call color(14);\r
294         call move(2,340);\r
295         call outstring("Visua. apr\8as inversion des couleurs <RETURN>");\r
296         rep:=inchar;\r
297         call cls;\r
298         x:=x.pere.pere;\r
299     else\r
300        if x=x.pere.gauche\r
301        then\r
302            x:=x.pere;\r
303            call droit(racine,x);\r
304            call cls;\r
305            call visua(racine,0.5,1,0,0);\r
306            call move(2,340);\r
307            call color(14);\r
308            call outstring("Visualisation apr\8as rotation droite au niveau de ");\r
309            call writeinteger(x.elem);\r
310            call outstring("  <RETURN>  ");\r
311            rep:=inchar;\r
312            call cls;\r
313        fi;\r
314        x.pere.couleur:=0;\r
315        x.pere.pere.couleur:=1;\r
316        if x.pere.pere=racine \r
317            then valeur:=x.pere;\r
318            else valeur:=x.pere.pere.pere;\r
319        fi;\r
320        call gauch(racine,x.pere.pere);\r
321        x.pere.pere:=valeur;\r
322        call cls;\r
323        call visua(racine,0.5,1,0,0);\r
324        call move(2,340);\r
325        call color(14);\r
326        call outstring("Visu.apr\8as r\82tab. des  couleurs et rot. gauche sur  ");\r
327        call writeinteger(x.pere.pere.elem);\r
328        call outstring(" <RETURN> ");\r
329        rep:=inchar;\r
330        call cls;\r
331     fi;\r
332 fi;\r
333 od;\r
334 racine.couleur:=0;\r
335 end insert;\r
336 \r
337 \r
338 (* ROTATION GAUCHE *)\r
339 unit gauch:procedure(inout t:noeud;inout aux1:noeud);\r
340 var fils:noeud;\r
341 begin\r
342 fils:=aux1.droite;\r
343 aux1.droite:=fils.gauche;\r
344 if aux1<>t then fils.pere:=aux1.pere;\r
345         else fils.pere:=fils;\r
346 fi;\r
347 if fils.gauche<>z then fils.gauche.pere:=aux1;fi;\r
348 if aux1.pere=aux1 then t:=fils;\r
349 else\r
350     if aux1=aux1.pere.gauche\r
351     then\r
352        aux1.pere.gauche:=fils;\r
353     else\r
354        aux1.pere.droite:=fils; \r
355     fi;    \r
356 fi;\r
357 fils.gauche:=aux1;\r
358 aux1.pere:=fils;\r
359 end gauch;\r
360 \r
361 \r
362 (* ROTATION DROITE *)\r
363 \r
364 unit droit:procedure(inout t:noeud;inout aux2:noeud);\r
365 var child:noeud;\r
366 begin\r
367 child:=aux2.gauche;\r
368 aux2.gauche:=child.droite;\r
369 if child.droite<>z then child.droite.pere:=aux2;fi;\r
370 if aux2<>t then child.pere:=aux2.pere;\r
371         else child.pere:=child;\r
372 fi;\r
373 if aux2.pere=aux2 then t:=child;\r
374 else\r
375     if aux2=aux2.pere.droite\r
376     then aux2.pere.droite:=child;\r
377     else aux2.pere.gauche:=child;\r
378     fi;\r
379 fi;\r
380 child.droite:=aux2;\r
381 aux2.pere:=child;\r
382 end droit;\r
383 \r
384 \r
385 (* RECHERCHE D'UN ELEMENT QUELCONQUE *)\r
386 unit recherche: iiuwgraph procedure(r:noeud;nb:integer;inout pointeur:noeud);\r
387 var rep:integer;\r
388 begin\r
389 while r<>z \r
390 do\r
391         call cls;\r
392         call move(200,100);\r
393         if r.elem=nb then call outstring("Element ");\r
394                           call writeinteger(nb);\r
395                           call outstring(" est trouv\82 dans l'arbre");\r
396                           call move(200,120);\r
397                           call outstring(" COULEUR = ");\r
398                           if r.couleur=1 then\r
399                              call outstring(" ROUGE ");\r
400                           else call outstring(" NOIR ");\r
401                           fi;\r
402                           call move(200,140);\r
403                           call outstring(" PERE = ");\r
404                           call writeinteger(r.pere.elem);\r
405                           call move(200,160);\r
406                           if r.gauche<>z then call outstring("FILS GAUCHE = ");\r
407                                               call writeinteger(r.gauche.elem);fi;\r
408                           call move(200,180);\r
409                           if r.droite<>z then call outstring("FILS DROIT = ");\r
410                                               call writeinteger(r.droite.elem);fi;\r
411                           call move(0,340);\r
412                           call outstring("APPUYEZ SUR <RETURN> POUR CONTINUER .. ");\r
413                           rep:=inchar;\r
414                           pointeur:=r;\r
415                           return;\r
416                      else\r
417                         if nb>r.elem then r:=r.droite;\r
418                                      else r:=r.gauche;\r
419                         fi;\r
420         fi;\r
421 od;\r
422 if r=z then \r
423             call move(200,160);\r
424             call writeinteger(nb);\r
425             call outstring(" N'APPARTIENT PAS A L'ARBRE ");\r
426             call move(0,340);\r
427             call outstring("APPUYEZ SUR <RETURN> POUR CONTINUER ...");\r
428             rep:=inchar;\r
429             pointeur:=z;\r
430 fi;\r
431 end recherche;\r
432 \r
433 \r
434 \r
435 (* PROCEDURES ET FONCTIONS UTILISANT LE MODE GRAPHIQUE *)\r
436 \r
437 unit inchar: iiuwgraph function:integer;\r
438 var i:integer;\r
439 begin\r
440    do\r
441       i:=inkey;\r
442       if i=/=0 then exit fi;\r
443    od;\r
444    result:=i;\r
445 end inchar;\r
446 \r
447 \r
448 unit ReadInteger : iiuwgraph function : integer;\r
449   var  X,Y,i, OrdN, j : integer,\r
450                Number : arrayof integer;\r
451 (* i - liczba wprowadzonych znakow  *)\r
452   begin\r
453     array Number dim( 1 : 4 );\r
454     i:= 0 ;\r
455     X := InXPos;\r
456     Y := InYPos;\r
457     do\r
458       OrdN:=inchar;\r
459       if i = 4 or (OrdN < 48 and OrdN > 57) then exit fi;\r
460  \r
461       case OrdN\r
462         when 48    :i:=i+1;\r
463                     Number(i):=0;\r
464         when 49    :i:=i+1;\r
465                     Number(i):=1;\r
466         when 50    :i:=i+1;\r
467                     Number(i):=2;\r
468         when 51    :i:=i+1;\r
469                     Number(i):=3;\r
470         when 52    :i:=i+1;\r
471                     Number(i):=4;\r
472         when 53    :i:=i+1;\r
473                     Number(i):=5;\r
474         when 54    :i:=i+1;\r
475                     Number(i):=6;\r
476         when 55    :i:=i+1;\r
477                     Number(i):=7;\r
478         when 56    :i:=i+1;\r
479                     Number(i):=8;\r
480         when 57    :i:=i+1;\r
481                     Number(i):=9;\r
482         when  8    :if i>0 then\r
483                       Number( i ) := 0;\r
484                       i := i - 1;\r
485                     fi;\r
486         when 13    :if i > 0 then exit fi ;\r
487  \r
488       esac;\r
489  \r
490       if Number( 1 ) <> 0 then\r
491         call Move( X,Y );\r
492         call hascii( 0 );\r
493         call hascii(48+Number( 1 ));\r
494         call hascii( 0 );\r
495  \r
496       fi;\r
497  \r
498       if i = 2 then\r
499         call Move( X + 8, Y  );\r
500         call hascii( 0 );\r
501         call hascii( 48 + Number( 2 ));\r
502         call hascii( 0 );\r
503       fi;\r
504    od;\r
505  \r
506    if Number( 1 ) = 0 and Number( 2 ) = 0 then\r
507      call Move( X,Y );\r
508      call hascii( 0 );\r
509      call hascii( 48 );\r
510      call hascii( 0 );\r
511    fi;\r
512  \r
513    if i = 1 then result := Number( 1 );\r
514    else\r
515      result := 10 * Number( 1 ) + Number ( 2 );\r
516    fi;\r
517    kill( Number );\r
518   end ReadInteger;\r
519  \r
520 \r
521 \r
522 unit WriteInteger:iiuwgraph procedure(Number:integer);\r
523 var i,j:integer;\r
524 begin\r
525     if Number < 10 then\r
526        call HASCII( 0 );\r
527        call HASCII( Number + 48 );\r
528        call HASCII( 0 );\r
529     else\r
530       i:=Number div 10;\r
531       j:=(Number - (i * 10));\r
532       call HASCII(0);\r
533       call HASCII( i + 48 );\r
534       call HASCII(0);\r
535       call HASCII( j + 48 );\r
536    fi;\r
537 end WriteInteger;\r
538 \r
539 (* FIN DES UNITES DE LECTURE ET ECRITURE EN MODE GRAPHIQUE *)\r
540 \r
541 \r
542 (* SAISIE D'UN ELEMENT  *)\r
543 unit saisie : iiuwgraph procedure(output nombre:integer);\r
544 begin\r
545       call cls;\r
546       call move(200,100);\r
547       call outstring("ENTREZ UN ENTIER : ");\r
548       nombre:=readinteger;\r
549 end;\r
550 \r
551 \r
552 (*  AFFICHAGE DU MENU PRINCIPAL *)\r
553 unit menu:iiuwgraph procedure(output chx:integer);\r
554 begin\r
555    call cls;\r
556    call color(14);\r
557    call move(180,50);\r
558    call outstring("IMPLEMENTATION DES ARBRES BICOLORES");\r
559    call move(280,100);\r
560    call outstring("MENU PRINCIPAL");\r
561    call move(200,140);\r
562    call outstring("INSERTION               : 1");\r
563    call move(200,160);\r
564    call outstring("SUPPRESSION             : 2");\r
565    call move(200,180);\r
566    call outstring("VISUALITION DE L'ARBRE  : 3");\r
567    call move(200,200);\r
568    call outstring("RECHERCHE D'UN ELEMENT  : 4");\r
569    call move(200,220);\r
570    call outstring("RECHERCHE DU MININUM    : 5");\r
571    call move(200,240);\r
572    call outstring("RECHERCHE DU MAXIMUM    : 6");\r
573    call move(200,260);\r
574    call outstring("FIN DU TRAITEMENT       : 9");\r
575    call move(200,300);\r
576    call outstring("    VOTRE CHOIX : ");\r
577    chx:=readinteger;\r
578 end;\r
579 \r
580 \r
581 (* AFFICHAGE DE L'ARBRE *)\r
582 unit visua: procedure(t:noeud;input coeff:real,sup:real,inf:real,niveau:integer);\r
583 var posx:real,posy,i,j:integer;\r
584 begin\r
585    pref iiuwgraph block\r
586    begin\r
587    if t=/= z then\r
588       niveau:=niveau+1;\r
589       posx:=(coeff*(sup-inf))+inf;\r
590       posy:=(niveau*35);\r
591       if niveau=/=1 then\r
592          (*call move(inxpos+8,inypos+8);*)\r
593          call draw(posx*640,posy);\r
594          (*call move(inxpos-8,inypos-8);*)\r
595       fi;\r
596       call move(round(posx*640),posy);\r
597       call HASCII(0);\r
598       (*call writeinteger(t.elem);*)\r
599       (*call HASCII(t.elem+48);*)\r
600       call move(inxpos+4,inypos);\r
601       if t.couleur=1 then call color(12);\r
602                      else call color(7);\r
603       fi;\r
604       if t.elem<10 then\r
605          call HASCII(0);\r
606          call HASCII(t.elem+48);\r
607          call HASCII(0);\r
608       else\r
609          i:=t.elem div 10;\r
610          j:=t.elem-i*10;\r
611          call HASCII(0);\r
612          call HASCII(i+48);\r
613          call HASCII(0);\r
614          call HASCII(j+48);\r
615       fi;\r
616       call color(1);\r
617       call move(inxpos-20,inypos);\r
618       call visua(t.gauche,0.5,posx,inf,niveau);\r
619       call move(round(posx*640)+8,posy+8);\r
620       call visua(t.droite,0.5,sup,posx,niveau);\r
621       call move(round(posx*640)+8,posy+8);\r
622    fi;\r
623    end;\r
624 end visua;\r
625 \r
626 \r
627 \r
628 \r
629 (* PROGRAMME PRINCIPAL *)\r
630 \r
631 \r
632 var choix,a,trouve,i,ligne:integer,\r
633     x,z,racine,min,max,pnteur,remp:noeud,\r
634     rp:char;\r
635 \r
636 \r
637 BEGIN\r
638 pref iiuwgraph block (* UTILISATION DU MODE GRAPHIQUE SUR ECRAN EGA/VGA *)\r
639 begin\r
640 \r
641 z:=new noeud;\r
642 choix:=0;\r
643 z.couleur:=0;\r
644 racine:=z;\r
645 call gron(5);\r
646 \r
647 while (choix<>9)\r
648 do\r
649 call menu(choix);\r
650         case choix\r
651         when 1 : call cls;\r
652                  call move(200,100);\r
653                  call saisie(a);\r
654                  z.elem:=a;\r
655                  trouve:=0;\r
656                  call insert_bst(a,racine,x,racine,trouve);\r
657                  if trouve=0\r
658                     then call insert(x,racine);\r
659                  fi\r
660         when 2 : call cls;\r
661                  call move(200,100);\r
662                  call saisie(a);\r
663                  call recherche(racine,a,pnteur);\r
664                  if pnteur<>z \r
665                     then\r
666                        call suppression(racine,pnteur,remp);\r
667                  fi;\r
668         when 3 : if racine<>z then\r
669                     call cls;\r
670                     call visua(racine,0.5,1,0,0);\r
671                  else\r
672                     call cls;\r
673                     call move(200,100);\r
674                     call outstring(" ARBRE VIDE ");\r
675                  fi;\r
676                  call color(14);\r
677                  call move(0,340);\r
678                  call outstring("APPUYEZ SUR <RETURN> POUR CONTINUER ... ");\r
679                  rp:=chr(inchar)\r
680         when 4 : call cls;\r
681                  call move(200,100);\r
682                  call saisie(a);\r
683                  call recherche(racine,a,pnteur)\r
684         when 5 : call cls;\r
685                  if racine<>z then\r
686                     if racine.gauche<>z \r
687                        then min:=recmin(racine.gauche);\r
688                        else min:=racine;\r
689                     fi;\r
690                     call move(200,100); \r
691                     call outstring("LE MININUM DE L'ARBRE EST: ");\r
692                     call WriteInteger(min.elem);\r
693                  else\r
694                     call move(200,100);\r
695                     call outstring("OPERATION IMPOSSIBLE : ARBRE VIDE ");\r
696                     call move(0,340);\r
697                     call outstring("APPUYEZ SUR <RETURN> POUR CONTINUER ...");\r
698                  fi;\r
699                  rp:=chr(inchar)\r
700         when 6 : call cls;\r
701                  if racine<>z then\r
702                     if racine.droite<>z\r
703                        then max:=recmax(racine.droite);\r
704                        else max:=racine;\r
705                     fi;\r
706                     call move(200,100);\r
707                     call outstring("LE MAXIMUM DE L'ARBRE EST: ");\r
708                     call WriteInteger(max.elem);\r
709                  else\r
710                     call move(200,100);\r
711                     call outstring("OPERATION IMPOSSIBLE : ARBRE VIDE ");\r
712                  fi;\r
713                  call move(0,340);\r
714                  call outstring("APPUYEZ SUR  <RETURN> POUR CONTINUER ... ");\r
715                  rp:=chr(inchar);\r
716         esac;\r
717 od;\r
718 \r
719 call groff;\r
720 call endrun;\r
721 end;\r
722 \r
723 END bicolore;\r
724 \r