Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / examples / data_str / str_poly.log
1 program projet;\r
2 \r
3 (****************************************************)\r
4 (* LI1 - Projet : Structure de Polynome             *)\r
5 (* Thierry D\82l\82ris                                  *)\r
6 (* Licence d'Informatique - Groupe 1                *)\r
7 (****************************************************)\r
8 \r
9 var t:table,\r
10     g:gestion,\r
11     fini:boolean,\r
12     choix:integer;\r
13 \r
14 (****************************************************)\r
15 (** D\82clarations des Objets de Base *****************)\r
16 (****************************************************)\r
17 \r
18   (*================================================*)\r
19   (*= D\82claration de l'Objet ELEMENT ===============*)\r
20   (*================================================*)\r
21   unit element:class;\r
22   var a:real,\r
23       k:integer;\r
24 \r
25     (*- D\82claration de l'Unit\82 SAISIE --------------*)\r
26     unit saisie:procedure;\r
27     begin\r
28       write("Entrez la Valeur du Coefficient de x  : ");\r
29       readln(a);\r
30       write("Entrez la Valeur de la Puissance de x : ");\r
31       readln(k);\r
32     end saisie;\r
33 \r
34     (*- D\82claration de l'Unit\82 VALEUR --------------*)\r
35     unit valeur:function(x:integer):real;\r
36 \r
37       (*+ D\82claration de l'Unit\82 PUISS +++++++++++++*)\r
38       unit puiss:function(x,k:integer):real;\r
39       var i:integer;\r
40       begin\r
41         result:=1;\r
42         if k > 0 then\r
43           for i:=1 to k\r
44           do\r
45             result:=result*x;\r
46           od;\r
47         else\r
48           if k < 0 then\r
49             for i:=1 to (-1*k)\r
50             do\r
51               result:=result*x;\r
52             od;\r
53             result:=1/result;\r
54           fi;\r
55         fi;\r
56       end puiss;\r
57 \r
58     begin\r
59       result:=a*puiss(x,k);\r
60     end valeur;\r
61 \r
62     (*- D\82claration de l'Unit\82 MULT ----------------*)\r
63     unit mult:function(i:real;j:integer):element;\r
64     begin\r
65       result:=new element;\r
66       result.a:=a*i;\r
67       result.k:=k+j;\r
68     end mult;\r
69 \r
70     (*- D\82claration de l'Unit\82 DERIVE --------------*)\r
71     unit derive:function:element;\r
72     begin\r
73       result:=new element;\r
74       result.a:=a*k;\r
75       result.k:=k-1;\r
76     end derive;\r
77 \r
78   end element;\r
79 \r
80   (*================================================*)\r
81   (*= D\82claration de l'Objet POLYNOME ==============*)\r
82   (*================================================*)\r
83   unit polynome:class;\r
84   var nom:char,\r
85       nbr:integer,\r
86       exp:arrayof element;\r
87 \r
88     (*- D\82claration de l'Unit\82 TRIE ----------------*)\r
89     unit trie:procedure;\r
90     var i,j,h:integer,\r
91         trouve:boolean;\r
92 \r
93       (*+ D\82claration de l'Unit\82 ECHANGER ++++++++++*)\r
94       unit echanger:procedure(inout a,b:element);\r
95       var buffer:element;\r
96       begin\r
97         buffer:=a;\r
98         a:=b;\r
99         b:=buffer;\r
100       end echanger;\r
101 \r
102     begin\r
103       if nbr > 1 then\r
104         for i:=2 to nbr\r
105         do\r
106           trouve:=false;\r
107           j:=1;\r
108           while j < i and not trouve\r
109           do\r
110             if exp(i).k > exp(j).k then\r
111               for h:=j to i-1\r
112               do\r
113                 call echanger(exp(h),exp(i));\r
114               od;\r
115               trouve:=true;\r
116             else\r
117               j:=j+1;\r
118             fi;\r
119           od;\r
120         od;\r
121       fi;\r
122     end trie;\r
123 \r
124     (*- D\82claration de l'Unit\82 SAISIE --------------*)\r
125     unit saisie:procedure;\r
126     var i:integer;\r
127     begin\r
128       write("Nombre d'El\82ments ... : ");\r
129       readln(nbr);\r
130       array exp dim (1:nbr);\r
131       for i:=1 to nbr\r
132       do\r
133         writeln("El\82ment Nø ",i:2," : ");\r
134         writeln("-------------");\r
135         exp(i):=new element;\r
136         call exp(i).saisie;\r
137       od;\r
138       call factorise;\r
139     end saisie;\r
140 \r
141     (*- D\82claration de l'Unit\82 AFFICHE -------------*)\r
142     unit affiche:procedure;\r
143     var j:integer;\r
144     begin\r
145       if nbr > 0 then\r
146         write("                    ");\r
147         for j:=1 to nbr\r
148         do\r
149           if exp(j).k=0 or exp(j).k=1 then\r
150             write("          ");\r
151           else\r
152             write("        ",exp(j).k:2);\r
153           fi;\r
154         od;\r
155         writeln;\r
156         write("Polynome de Nom ",nom," : ");\r
157         for j:=1 to nbr\r
158         do\r
159           if exp(j).a > 0 then\r
160             if exp(j).k=0 then\r
161               write("+",exp(j).a:5:2,"    ");\r
162             else\r
163               write("+",exp(j).a:5:2," x  ");\r
164             fi;\r
165           else\r
166             if exp(j).k=0 then\r
167               write("-",-1*exp(j).a:5:2,"    ");\r
168             else\r
169               write("-",-1*exp(j).a:5:2," x  ");\r
170             fi;\r
171           fi;\r
172         od;\r
173       else\r
174         writeln;\r
175         writeln("Polynome de Nom ",nom," :  0 ");\r
176       fi;\r
177       writeln;\r
178     end affiche;\r
179 \r
180     (*- D\82claration de l'Unit\82 EVALUATION ----------*)\r
181     unit evaluation:function(x:integer):real;\r
182     var j:integer;\r
183     begin\r
184       result:=0;\r
185       for j:=1 to nbr\r
186       do\r
187         result:=result+exp(j).valeur(x);\r
188       od;\r
189     end evaluation;\r
190 \r
191     (*- D\82claration de l'Unit\82 FACTORISE -----------*)\r
192     unit factorise:procedure;\r
193     var i,j:integer;\r
194 \r
195       (*+ D\82claration de l'Unit\82 COMPACTE ++++++++++*)\r
196       unit compacte:procedure;\r
197       var b:arrayof element,\r
198           i,j:integer;\r
199       begin\r
200         j:=1;\r
201         for i:=1 to nbr\r
202         do\r
203           if exp(i) =/= none then\r
204             exp(j):=exp(i);\r
205             j:=j+1;\r
206           fi;\r
207         od;\r
208         nbr:=j-1;\r
209         if nbr > 0 then\r
210           array b dim (1:nbr);\r
211           for i:=1 to nbr\r
212           do\r
213             b(i):=exp(i);\r
214           od;\r
215           exp:=b;\r
216         fi;\r
217       end compacte;\r
218 \r
219     begin\r
220       for i:=1 to nbr\r
221       do\r
222         for j:=i+1 to nbr\r
223         do\r
224           if exp(j) =/= none and exp(i) =/= none then\r
225             if exp(j).k=exp(i).k then\r
226                exp(i).a:=exp(i).a+exp(j).a;\r
227                kill(exp(j));\r
228             fi;\r
229           fi;\r
230         od;\r
231         if exp(i) =/= none then\r
232           if exp(i).a = 0 then\r
233             kill(exp(i));\r
234           fi;\r
235         fi;\r
236       od;\r
237       call compacte;\r
238       if exp =/= none then\r
239         call trie;\r
240       fi;\r
241     end factorise;\r
242 \r
243     (*- D\82claration de l'Unit\82 DERIVE ------------*)\r
244     unit derive:function:polynome;\r
245     var i:integer;\r
246     begin\r
247       result:=new polynome;\r
248       result.nom:='R';\r
249       result.nbr:=nbr;\r
250       array result.exp dim (1:nbr);\r
251       for i:=1 to nbr\r
252       do\r
253         result.exp(i):=exp(i).derive;\r
254       od;\r
255       call result.factorise;\r
256     end derive;\r
257 \r
258   end polynome;\r
259 \r
260   (*==============================================*)\r
261   (*= D\82claration de l'Objet TABLE ===============*)\r
262   (*==============================================*)\r
263   unit table:class;\r
264   var pol:arrayof polynome;\r
265 \r
266     (*- D\82claration de l'Unit\82 VIDE --------------*)\r
267     unit vide:function:boolean;\r
268     begin\r
269       result:= pol=none;\r
270     end vide;\r
271 \r
272     (*- D\82claration de l'Unit\82 AFFMEM ------------*)\r
273     unit affmem:procedure;\r
274     var i:integer;\r
275     begin\r
276       if vide then\r
277         writeln("Aucun Polynome en M\82moire");\r
278       else\r
279         write("Les Polynomes en M\82moire sont : ");\r
280         for i:=1 to upper(pol)\r
281         do\r
282           write(pol(i).nom,", ");\r
283         od;\r
284       fi;\r
285       writeln;\r
286     end affmem;\r
287 \r
288     (*- D\82claration de l'Unit\82 AFFICHE -----------*)\r
289     unit affiche:procedure;\r
290     var i:integer;\r
291     begin\r
292       if not vide then\r
293         for i:=1 to upper(pol)\r
294         do\r
295           call pol(i).affiche;\r
296         od;\r
297       else\r
298         writeln("Aucun Polynome en M\82moire");\r
299       fi;\r
300       writeln;\r
301     end affiche;\r
302 \r
303     (*- D\82claration de l'Unit\82 NOMEXISTE ---------*)\r
304     unit nomexiste:function(input nom:char):boolean;\r
305     var i:integer;\r
306     begin\r
307       i:=0;\r
308       result:=false;\r
309       if not vide then\r
310         while i < upper(pol) and not result\r
311         do\r
312           i:=i+1;\r
313           if pol(i).nom=nom then\r
314             result:=true;\r
315           fi;\r
316         od;\r
317       fi;\r
318     end nomexiste;\r
319 \r
320     (*- D\82claration de l'Unit\82 AJOUTE ------------*)\r
321     unit ajoute:procedure(input r:polynome);\r
322     var b:arrayof polynome,\r
323         i:integer;\r
324     begin\r
325       if vide then\r
326         array pol dim (1:1);\r
327       else\r
328         array b dim (1:upper(pol)+1);\r
329         for i:=1 to upper(pol)\r
330         do\r
331           b(i):=pol(i);\r
332         od;\r
333         pol:=b;\r
334       fi;\r
335       pol(upper(pol)):=r;\r
336     end ajoute;\r
337 \r
338     (*- D\82claration de l'Unit\82 SAISIEPOL ---------*)\r
339     unit saisiepol:procedure;\r
340     var trouve:boolean,\r
341         r:polynome,\r
342         i:integer;\r
343     begin\r
344       call affmem;\r
345       r:=new polynome;\r
346       trouve:=true;\r
347       while trouve\r
348       do\r
349         write("Nom du Polynome ..... : ");\r
350         readln(r.nom);\r
351         trouve:=nomexiste(r.nom);\r
352         if trouve then\r
353           writeln("Le Nom ",r.nom," a d\82j\85 \82t\82 utilis\82...");\r
354         fi;\r
355       od;\r
356       call r.saisie;\r
357       writeln;\r
358       call r.affiche;\r
359       call ajoute(r);\r
360     end saisiepol;\r
361 \r
362     (*- D\82claration de l'Unit\82 REMPLACERPAR ------*)\r
363     unit remplacerpar:procedure(input cible:polynome);\r
364     var i:integer,\r
365         trouve:boolean;\r
366     begin\r
367       i:=0;\r
368       while (i < upper(pol)) and not trouve\r
369       do\r
370         i:=i+1;\r
371         trouve:= pol(i).nom=cible.nom;\r
372       od;\r
373       if trouve then\r
374         kill(pol(i));\r
375         pol(i):=cible;\r
376       fi;\r
377     end remplacerpar;\r
378 \r
379     (*- D\82claration de l'Unit\82 QUESTION ----------*)\r
380     unit question:procedure(inout r:polynome);\r
381     var choix:char,\r
382         trouve:boolean;\r
383     begin\r
384       if r.nbr > 0 then\r
385         choix:=' ';\r
386         while not (choix='o' or choix='O' or choix='n' or choix='N')\r
387         do\r
388           write("Desirez-vous sauvegarder ",r.nom," dans la Table (O ou N) : ");\r
389           readln(choix);\r
390         od;\r
391         if choix='o' or choix='O' then\r
392           trouve:=false;\r
393           while not trouve\r
394           do\r
395             write("Sous quel Nom : ");\r
396             readln(r.nom);\r
397             if nomexiste(r.nom) then\r
398               write(r.nom," D\82j\85 Utilis\82... Confirmation (O ou N) : ");\r
399               readln(choix);\r
400               if choix='o' or choix='O' then\r
401                 trouve:=true;\r
402                 call remplacerpar(r);\r
403               fi;\r
404             else\r
405               call ajoute(r);\r
406               trouve:=true;\r
407             fi;\r
408           od;\r
409         fi;\r
410       writeln;\r
411       fi;\r
412     end question;\r
413 \r
414     (*- D\82claration de l'Unit\82 SELECTION ---------*)\r
415     unit selection:procedure(output p1:polynome);\r
416     var i:integer,\r
417         choix:char,\r
418         trouve,choisi:boolean;\r
419     begin\r
420       choisi:=false;\r
421       while not choisi\r
422       do\r
423         write("Votre choix : ");\r
424         readln(choix);\r
425         i:=0;\r
426         trouve:=false;\r
427         while i < upper(pol) and not trouve\r
428         do\r
429           i:=i+1;\r
430           trouve:= choix=pol(i).nom;\r
431         od;\r
432         if trouve then\r
433           p1:=pol(i);\r
434           choisi:=true;\r
435         fi;\r
436       od;\r
437     end selection;\r
438 \r
439     (*- D\82claration de l'Unit\82 SELECTION2 --------*)\r
440     unit selection2:procedure(output p1,p2:polynome);\r
441     begin\r
442       writeln;\r
443       writeln("Polynome Nø 1 : ");\r
444       call selection(p1);\r
445       writeln;\r
446       writeln("Polynome Nø 2 : ");\r
447       call selection(p2);\r
448       call p1.affiche;\r
449       call p2.affiche;\r
450     end selection2;\r
451 \r
452     (*- D\82claration de l'Unit\82 TRAITEMENT --------*)\r
453     unit traitement:procedure(function operation(p1,p2:polynome):polynome);\r
454     var r,p1,p2:polynome;\r
455     begin\r
456       call affmem;\r
457       if not vide then\r
458         call selection2(p1,p2);\r
459         r:=operation(p1,p2);\r
460         call r.affiche;\r
461         call question(r);\r
462       fi;\r
463     end traitement;\r
464 \r
465     (*- D\82claration de l'Unit\82 DIVISION ----------*)\r
466     unit division:procedure;\r
467     var p1,p2,q,r:polynome;\r
468     begin\r
469       call affmem;\r
470       if not vide then\r
471         call selection2(p1,p2);\r
472         call divise(p1,p2,q,r);\r
473         call question(q);\r
474         call question(r);\r
475       fi;\r
476     end division;\r
477 \r
478   end table;\r
479 \r
480 (**************************************************)\r
481 (** D\82claration des Op\82rations : + - * / **********)\r
482 (**************************************************)\r
483 \r
484   (*==============================================*)\r
485   (*= D\82claration de l'Unit\82 PLUS ================*)\r
486   (*==============================================*)\r
487   unit plus:function(input a,b:polynome):polynome;\r
488   var i:integer;\r
489   begin\r
490     result:=new polynome;\r
491     result.nom:='R';\r
492     result.nbr:=a.nbr+b.nbr;\r
493     array result.exp dim (1:result.nbr);\r
494     for i:=1 to a.nbr\r
495     do\r
496       result.exp(i):=new element;\r
497       result.exp(i):=copy(a.exp(i));\r
498     od;\r
499     for i:=1 to b.nbr\r
500     do\r
501       result.exp(a.nbr+i):=new element;\r
502       result.exp(a.nbr+i):=copy(b.exp(i));\r
503     od;\r
504     call result.factorise;\r
505   end plus;\r
506 \r
507   (*================================================*)\r
508   (*= D\82claration de l'Unit\82 MOINS =================*)\r
509   (*================================================*)\r
510   unit moins:function(input a,b:polynome):polynome;\r
511   var i:integer;\r
512   begin\r
513     result:=new polynome;\r
514     result.nom:='R';\r
515     result.nbr:=a.nbr+b.nbr;\r
516     array result.exp dim (1:result.nbr);\r
517     for i:=1 to a.nbr\r
518     do\r
519       result.exp(i):=new element;\r
520       result.exp(i):=copy(a.exp(i));\r
521     od;\r
522     for i:=1 to b.nbr\r
523     do\r
524       result.exp(a.nbr+i):=b.exp(i).mult(-1,0);\r
525     od;\r
526     call result.factorise;\r
527   end moins;\r
528 \r
529   (*=================================================*)\r
530   (*= D\82claration de l'Unit\82 MULTIPL ================*)\r
531   (*=================================================*)\r
532   unit multipl:function(input a,b:polynome):polynome;\r
533   var i,j,ind:integer;\r
534   begin\r
535     result:=new polynome;\r
536     result.nom:='R';\r
537     result.nbr:=a.nbr*b.nbr;\r
538     array result.exp dim (1:result.nbr);\r
539     ind:=1;\r
540     for i:=1 to a.nbr\r
541     do\r
542       for j:=1 to b.nbr\r
543       do\r
544         result.exp(ind):=a.exp(i).mult(b.exp(j).a,b.exp(j).k);\r
545         ind:=ind+1;\r
546       od;\r
547     od;\r
548     call result.factorise;\r
549   end multipl;\r
550 \r
551   (*================================================*)\r
552   (*= D\82claration de l'Unit\82 DIVISE ================*)\r
553   (*================================================*)\r
554   unit divise:procedure(input p1,p2:polynome;output quotient,r:polynome);\r
555   var q:polynome,\r
556       fin:boolean;\r
557   begin\r
558     quotient:=new polynome;\r
559     quotient.nbr:=0;\r
560     q:=new polynome;\r
561     array q.exp dim (1:1);\r
562     q.nbr:=1;\r
563     r:=new polynome;\r
564     r:=copy(p1);\r
565     fin:=false;\r
566     while not fin\r
567     do\r
568       if r.exp(1).k >= p2.exp(1).k then\r
569         q.exp(1):=r.exp(1).mult(1/p2.exp(1).a,-1*p2.exp(1).k);\r
570         r:=moins(r,multipl(p2,q));\r
571         quotient:=plus(quotient,q);\r
572         fin:= r.nbr=0;\r
573       else\r
574         fin:=true;\r
575       fi;\r
576     od;\r
577     quotient.nom:='Q';\r
578     writeln;\r
579     writeln("  Q : Quotient de la Division, R : Reste de la Division.");\r
580     call quotient.affiche;\r
581     call r.affiche;\r
582   end divise;\r
583 \r
584 (****************************************************)\r
585 (** D\82claration de l'Unit\82 de Gestion de l'Ecran ****)\r
586 (****************************************************)\r
587 \r
588   (*================================================*)\r
589   (*= D\82claration de l'Unit\82 GESTION ===============*)\r
590   (*================================================*)\r
591   unit gestion:class;\r
592 \r
593     (*- D\82claration de l'Unit\82 CLS -----------------*)\r
594     unit cls:procedure;\r
595     begin\r
596       write(chr(27),"[2J");\r
597     end cls;\r
598 \r
599     (*- D\82claration de l'Unit\82 ATTEND ---------------*)\r
600     unit attend:procedure;\r
601     var c:integer;\r
602     begin\r
603       writeln;\r
604       write("   Appuyez sur < ENTER > pour Continuer  ");\r
605       readln;\r
606     end attend;\r
607 \r
608   end gestion;\r
609 \r
610 (****************************************************)\r
611 (* D\82claration des Unit\82es correspondant ************)\r
612 (* aux diverses Options du Menu Principal. **********)\r
613 (****************************************************)\r
614 \r
615   (*= OPTION 1 =====================================*)\r
616   (*= Saisie d'un Nouveau Polynome =================*)\r
617   (*================================================*)\r
618   unit option1:procedure(g:gestion;inout a:table);\r
619   begin\r
620     call g.cls;\r
621     writeln("==========================================================");\r
622     writeln("=  STRUCTURE DE POLYNOMES : Saisie de Polynomes  =========");\r
623     writeln("==========================================================");\r
624     writeln;\r
625     call a.saisiepol;\r
626     call g.attend;\r
627   end option1;\r
628 \r
629   (*= OPTION 2 =====================================*)\r
630   (*= Affichage de la Table des Polynomes ==========*)\r
631   (*================================================*)\r
632   unit option2:procedure(g:gestion;input a:table);\r
633   begin\r
634     call g.cls;\r
635     writeln("==========================================================");\r
636     writeln("=  STRUCTURE DE POLYNOMES : Affichage des Polynomes  =====");\r
637     writeln("==========================================================");\r
638     writeln;\r
639     call a.affiche;\r
640     call g.attend;\r
641   end option2;\r
642 \r
643   (*= OPTION 3 =====================================*)\r
644   (*= Evaluation d'un Polynome pour un x Donn\82 =====*)\r
645   (*================================================*)\r
646   unit option3:procedure(g:gestion;input a:table);\r
647   var x:real,\r
648       r:polynome;\r
649   begin\r
650     call g.cls;\r
651     writeln("==========================================================");\r
652     writeln("=  STRUCTURE DE POLYNOMES : Evaluation de Polynome  ======");\r
653     writeln("==========================================================");\r
654     writeln;\r
655     call a.affmem;\r
656     if not a.vide then\r
657       call a.selection(r);\r
658       writeln;\r
659       call r.affiche;\r
660       write("Entrez la valeur de x : ");\r
661       readln(x);\r
662       writeln;\r
663       writeln("Resultat : ",r.evaluation(x):9:2);\r
664     fi;\r
665     call g.attend;\r
666   end option3;\r
667 \r
668   (*= OPTION 4 =====================================*)\r
669   (*= Addition de Deux Polynomes de la Table =======*)\r
670   (*================================================*)\r
671   unit option4:procedure(g:gestion;inout a:table);\r
672   begin\r
673     call g.cls;\r
674     writeln("==========================================================");\r
675     writeln("=  STRUCTURE DE POLYNOMES : Addition de Polynome  ========");\r
676     writeln("==========================================================");\r
677     writeln;\r
678     call a.traitement(plus);\r
679     call g.attend;\r
680   end option4;\r
681 \r
682   (*= OPTION 5 =====================================*)\r
683   (*= Soustraction de Deux Polynomes de la Table ===*)\r
684   (*================================================*)\r
685   unit option5:procedure(g:gestion;inout a:table);\r
686   begin\r
687     call g.cls;\r
688     writeln("==========================================================");\r
689     writeln("=  STRUCTURE DE POLYNOMES : Soustraction de Polynome  ====");\r
690     writeln("==========================================================");\r
691     writeln;\r
692     call a.traitement(moins);\r
693     call g.attend;\r
694   end option5;\r
695 \r
696   (*= OPTION 6 =====================================*)\r
697   (*= Multiplication de Deux Polynomes de la Table =*)\r
698   (*================================================*)\r
699   unit option6:procedure(g:gestion;inout a:table);\r
700   begin\r
701     call g.cls;\r
702     writeln("==========================================================");\r
703     writeln("=  STRUCTURE DE POLYNOMES : Multiplication de Polynomes  =");\r
704     writeln("==========================================================");\r
705     writeln;\r
706     call a.traitement(multipl);\r
707     call g.attend;\r
708   end option6;\r
709 \r
710   (*= OPTION 7 ===================================*)\r
711   (*= Division de Deux Polynomes de la Table =====*)\r
712   (*==============================================*)\r
713   unit option7:procedure(g:gestion;inout a:table);\r
714   begin\r
715     call g.cls;\r
716     writeln("==========================================================");\r
717     writeln("= STRUCTURE DE POLYNOMES : Division de Polynomes =========");\r
718     writeln("==========================================================");\r
719     writeln;\r
720     call a.division;\r
721     call g.attend;\r
722   end option7;\r
723 \r
724   (*= OPTION 8 ===================================*)\r
725   (*= D\82rivation d'un Polynome de la Table =======*)\r
726   (*==============================================*)\r
727   unit option8:procedure(g:gestion;inout a:table);\r
728   var p1,r:polynome;\r
729   begin\r
730     call g.cls;\r
731     writeln("==========================================================");\r
732     writeln("=  STRUCTURE DE POLYNOMES : Derivation d'un Polynome  ====");\r
733     writeln("==========================================================");\r
734     writeln;\r
735     call a.affmem;\r
736     if not a.vide then\r
737       call a.selection(p1);\r
738       writeln;\r
739       call p1.affiche;\r
740       r:=p1.derive;\r
741       call r.affiche;\r
742       call a.question(r);\r
743     fi;\r
744     call g.attend;\r
745   end option8;\r
746 \r
747 (****************************************************)\r
748 (** Instructions du Programme Principal *************)\r
749 (****************************************************)\r
750 \r
751 begin\r
752   g:=new gestion;\r
753   t:=new table;\r
754   fini:=false;\r
755   while not fini\r
756   do\r
757     call g.cls;\r
758     writeln("==========================================================");\r
759     writeln("=  STRUCTURE DE POLYNOMES : Menu Principal  ==============");\r
760     writeln("==========================================================");\r
761     writeln;\r
762     writeln;\r
763     writeln("   Options Disponibles : ");\r
764     writeln("   -------------------   ");\r
765     writeln;\r
766     writeln("   Saisie d'un Polynome ...................... :  1 ");\r
767     writeln("   Visualisation de la Table des Polynomes ... :  2 ");\r
768     writeln("   Evaluation d'un Polynome pour un x donn\82 .. :  3 ");\r
769     writeln("   Additionner des Polynomes ................. :  4 ");\r
770     writeln("   Soustraire des Polynomes .................. :  5 ");\r
771     writeln("   Multiplier des Polynomes .................. :  6 ");\r
772     writeln("   Diviser des Polynomes ..................... :  7 ");\r
773     writeln("   D\82river un Polynome ....................... :  8 ");\r
774     writeln("   Retour au Syst\8ame d'Exploitation .......... :  9 ");\r
775     writeln;\r
776     write("   Votre Choix : ");\r
777     readln(choix);\r
778     case choix\r
779       when 1 : call option1(g,t);\r
780       when 2 : call option2(g,t);\r
781       when 3 : call option3(g,t);\r
782       when 4 : call option4(g,t);\r
783       when 5 : call option5(g,t);\r
784       when 6 : call option6(g,t);\r
785       when 7 : call option7(g,t);\r
786       when 8 : call option8(g,t);\r
787       when 9 : fini:=true;\r
788     esac\r
789   od;\r
790   call g.cls;\r
791 end projet;\r
792 (****************************************************)\r
793 \1a