3 (****************************************************)
\r
4 (* LI1 - Projet : Structure de Polynome *)
\r
5 (* Thierry D
\82l
\82ris *)
\r
6 (* Licence d'Informatique - Groupe 1 *)
\r
7 (****************************************************)
\r
14 (****************************************************)
\r
15 (** D
\82clarations des Objets de Base *****************)
\r
16 (****************************************************)
\r
18 (*================================================*)
\r
19 (*= D
\82claration de l'Objet ELEMENT ===============*)
\r
20 (*================================================*)
\r
25 (*- D
\82claration de l'Unit
\82 SAISIE --------------*)
\r
26 unit saisie:procedure;
\r
28 write("Entrez la Valeur du Coefficient de x : ");
\r
30 write("Entrez la Valeur de la Puissance de x : ");
\r
34 (*- D
\82claration de l'Unit
\82 VALEUR --------------*)
\r
35 unit valeur:function(x:integer):real;
\r
37 (*+ D
\82claration de l'Unit
\82 PUISS +++++++++++++*)
\r
38 unit puiss:function(x,k:integer):real;
\r
59 result:=a*puiss(x,k);
\r
62 (*- D
\82claration de l'Unit
\82 MULT ----------------*)
\r
63 unit mult:function(i:real;j:integer):element;
\r
65 result:=new element;
\r
70 (*- D
\82claration de l'Unit
\82 DERIVE --------------*)
\r
71 unit derive:function:element;
\r
73 result:=new element;
\r
80 (*================================================*)
\r
81 (*= D
\82claration de l'Objet POLYNOME ==============*)
\r
82 (*================================================*)
\r
83 unit polynome:class;
\r
86 exp:arrayof element;
\r
88 (*- D
\82claration de l'Unit
\82 TRIE ----------------*)
\r
89 unit trie:procedure;
\r
93 (*+ D
\82claration de l'Unit
\82 ECHANGER ++++++++++*)
\r
94 unit echanger:procedure(inout a,b:element);
\r
108 while j < i and not trouve
\r
110 if exp(i).k > exp(j).k then
\r
113 call echanger(exp(h),exp(i));
\r
124 (*- D
\82claration de l'Unit
\82 SAISIE --------------*)
\r
125 unit saisie:procedure;
\r
128 write("Nombre d'El
\82ments ... : ");
\r
130 array exp dim (1:nbr);
\r
133 writeln("El
\82ment Nø ",i:2," : ");
\r
134 writeln("-------------");
\r
135 exp(i):=new element;
\r
136 call exp(i).saisie;
\r
141 (*- D
\82claration de l'Unit
\82 AFFICHE -------------*)
\r
142 unit affiche:procedure;
\r
149 if exp(j).k=0 or exp(j).k=1 then
\r
152 write(" ",exp(j).k:2);
\r
156 write("Polynome de Nom ",nom," : ");
\r
159 if exp(j).a > 0 then
\r
161 write("+",exp(j).a:5:2," ");
\r
163 write("+",exp(j).a:5:2," x ");
\r
167 write("-",-1*exp(j).a:5:2," ");
\r
169 write("-",-1*exp(j).a:5:2," x ");
\r
175 writeln("Polynome de Nom ",nom," : 0 ");
\r
180 (*- D
\82claration de l'Unit
\82 EVALUATION ----------*)
\r
181 unit evaluation:function(x:integer):real;
\r
187 result:=result+exp(j).valeur(x);
\r
191 (*- D
\82claration de l'Unit
\82 FACTORISE -----------*)
\r
192 unit factorise:procedure;
\r
195 (*+ D
\82claration de l'Unit
\82 COMPACTE ++++++++++*)
\r
196 unit compacte:procedure;
\r
197 var b:arrayof element,
\r
203 if exp(i) =/= none then
\r
210 array b dim (1:nbr);
\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
231 if exp(i) =/= none then
\r
232 if exp(i).a = 0 then
\r
238 if exp =/= none then
\r
243 (*- D
\82claration de l'Unit
\82 DERIVE ------------*)
\r
244 unit derive:function:polynome;
\r
247 result:=new polynome;
\r
250 array result.exp dim (1:nbr);
\r
253 result.exp(i):=exp(i).derive;
\r
255 call result.factorise;
\r
260 (*==============================================*)
\r
261 (*= D
\82claration de l'Objet TABLE ===============*)
\r
262 (*==============================================*)
\r
264 var pol:arrayof polynome;
\r
266 (*- D
\82claration de l'Unit
\82 VIDE --------------*)
\r
267 unit vide:function:boolean;
\r
272 (*- D
\82claration de l'Unit
\82 AFFMEM ------------*)
\r
273 unit affmem:procedure;
\r
277 writeln("Aucun Polynome en M
\82moire");
\r
279 write("Les Polynomes en M
\82moire sont : ");
\r
280 for i:=1 to upper(pol)
\r
282 write(pol(i).nom,", ");
\r
288 (*- D
\82claration de l'Unit
\82 AFFICHE -----------*)
\r
289 unit affiche:procedure;
\r
293 for i:=1 to upper(pol)
\r
295 call pol(i).affiche;
\r
298 writeln("Aucun Polynome en M
\82moire");
\r
303 (*- D
\82claration de l'Unit
\82 NOMEXISTE ---------*)
\r
304 unit nomexiste:function(input nom:char):boolean;
\r
310 while i < upper(pol) and not result
\r
313 if pol(i).nom=nom then
\r
320 (*- D
\82claration de l'Unit
\82 AJOUTE ------------*)
\r
321 unit ajoute:procedure(input r:polynome);
\r
322 var b:arrayof polynome,
\r
326 array pol dim (1:1);
\r
328 array b dim (1:upper(pol)+1);
\r
329 for i:=1 to upper(pol)
\r
335 pol(upper(pol)):=r;
\r
338 (*- D
\82claration de l'Unit
\82 SAISIEPOL ---------*)
\r
339 unit saisiepol:procedure;
\r
340 var trouve:boolean,
\r
349 write("Nom du Polynome ..... : ");
\r
351 trouve:=nomexiste(r.nom);
\r
353 writeln("Le Nom ",r.nom," a d
\82j
\85 \82t
\82 utilis
\82...");
\r
362 (*- D
\82claration de l'Unit
\82 REMPLACERPAR ------*)
\r
363 unit remplacerpar:procedure(input cible:polynome);
\r
368 while (i < upper(pol)) and not trouve
\r
371 trouve:= pol(i).nom=cible.nom;
\r
379 (*- D
\82claration de l'Unit
\82 QUESTION ----------*)
\r
380 unit question:procedure(inout r:polynome);
\r
386 while not (choix='o' or choix='O' or choix='n' or choix='N')
\r
388 write("Desirez-vous sauvegarder ",r.nom," dans la Table (O ou N) : ");
\r
391 if choix='o' or choix='O' then
\r
395 write("Sous quel Nom : ");
\r
397 if nomexiste(r.nom) then
\r
398 write(r.nom," D
\82j
\85 Utilis
\82... Confirmation (O ou N) : ");
\r
400 if choix='o' or choix='O' then
\r
402 call remplacerpar(r);
\r
414 (*- D
\82claration de l'Unit
\82 SELECTION ---------*)
\r
415 unit selection:procedure(output p1:polynome);
\r
418 trouve,choisi:boolean;
\r
423 write("Votre choix : ");
\r
427 while i < upper(pol) and not trouve
\r
430 trouve:= choix=pol(i).nom;
\r
439 (*- D
\82claration de l'Unit
\82 SELECTION2 --------*)
\r
440 unit selection2:procedure(output p1,p2:polynome);
\r
443 writeln("Polynome Nø 1 : ");
\r
444 call selection(p1);
\r
446 writeln("Polynome Nø 2 : ");
\r
447 call selection(p2);
\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
458 call selection2(p1,p2);
\r
459 r:=operation(p1,p2);
\r
465 (*- D
\82claration de l'Unit
\82 DIVISION ----------*)
\r
466 unit division:procedure;
\r
467 var p1,p2,q,r:polynome;
\r
471 call selection2(p1,p2);
\r
472 call divise(p1,p2,q,r);
\r
480 (**************************************************)
\r
481 (** D
\82claration des Op
\82rations : + - * / **********)
\r
482 (**************************************************)
\r
484 (*==============================================*)
\r
485 (*= D
\82claration de l'Unit
\82 PLUS ================*)
\r
486 (*==============================================*)
\r
487 unit plus:function(input a,b:polynome):polynome;
\r
490 result:=new polynome;
\r
492 result.nbr:=a.nbr+b.nbr;
\r
493 array result.exp dim (1:result.nbr);
\r
496 result.exp(i):=new element;
\r
497 result.exp(i):=copy(a.exp(i));
\r
501 result.exp(a.nbr+i):=new element;
\r
502 result.exp(a.nbr+i):=copy(b.exp(i));
\r
504 call result.factorise;
\r
507 (*================================================*)
\r
508 (*= D
\82claration de l'Unit
\82 MOINS =================*)
\r
509 (*================================================*)
\r
510 unit moins:function(input a,b:polynome):polynome;
\r
513 result:=new polynome;
\r
515 result.nbr:=a.nbr+b.nbr;
\r
516 array result.exp dim (1:result.nbr);
\r
519 result.exp(i):=new element;
\r
520 result.exp(i):=copy(a.exp(i));
\r
524 result.exp(a.nbr+i):=b.exp(i).mult(-1,0);
\r
526 call result.factorise;
\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
535 result:=new polynome;
\r
537 result.nbr:=a.nbr*b.nbr;
\r
538 array result.exp dim (1:result.nbr);
\r
544 result.exp(ind):=a.exp(i).mult(b.exp(j).a,b.exp(j).k);
\r
548 call result.factorise;
\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
558 quotient:=new polynome;
\r
561 array q.exp dim (1:1);
\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
579 writeln(" Q : Quotient de la Division, R : Reste de la Division.");
\r
580 call quotient.affiche;
\r
584 (****************************************************)
\r
585 (** D
\82claration de l'Unit
\82 de Gestion de l'Ecran ****)
\r
586 (****************************************************)
\r
588 (*================================================*)
\r
589 (*= D
\82claration de l'Unit
\82 GESTION ===============*)
\r
590 (*================================================*)
\r
591 unit gestion:class;
\r
593 (*- D
\82claration de l'Unit
\82 CLS -----------------*)
\r
594 unit cls:procedure;
\r
596 write(chr(27),"[2J");
\r
599 (*- D
\82claration de l'Unit
\82 ATTEND ---------------*)
\r
600 unit attend:procedure;
\r
604 write(" Appuyez sur < ENTER > pour Continuer ");
\r
610 (****************************************************)
\r
611 (* D
\82claration des Unit
\82es correspondant ************)
\r
612 (* aux diverses Options du Menu Principal. **********)
\r
613 (****************************************************)
\r
615 (*= OPTION 1 =====================================*)
\r
616 (*= Saisie d'un Nouveau Polynome =================*)
\r
617 (*================================================*)
\r
618 unit option1:procedure(g:gestion;inout a:table);
\r
621 writeln("==========================================================");
\r
622 writeln("= STRUCTURE DE POLYNOMES : Saisie de Polynomes =========");
\r
623 writeln("==========================================================");
\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
635 writeln("==========================================================");
\r
636 writeln("= STRUCTURE DE POLYNOMES : Affichage des Polynomes =====");
\r
637 writeln("==========================================================");
\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
651 writeln("==========================================================");
\r
652 writeln("= STRUCTURE DE POLYNOMES : Evaluation de Polynome ======");
\r
653 writeln("==========================================================");
\r
657 call a.selection(r);
\r
660 write("Entrez la valeur de x : ");
\r
663 writeln("Resultat : ",r.evaluation(x):9:2);
\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
674 writeln("==========================================================");
\r
675 writeln("= STRUCTURE DE POLYNOMES : Addition de Polynome ========");
\r
676 writeln("==========================================================");
\r
678 call a.traitement(plus);
\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
688 writeln("==========================================================");
\r
689 writeln("= STRUCTURE DE POLYNOMES : Soustraction de Polynome ====");
\r
690 writeln("==========================================================");
\r
692 call a.traitement(moins);
\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
702 writeln("==========================================================");
\r
703 writeln("= STRUCTURE DE POLYNOMES : Multiplication de Polynomes =");
\r
704 writeln("==========================================================");
\r
706 call a.traitement(multipl);
\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
716 writeln("==========================================================");
\r
717 writeln("= STRUCTURE DE POLYNOMES : Division de Polynomes =========");
\r
718 writeln("==========================================================");
\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
731 writeln("==========================================================");
\r
732 writeln("= STRUCTURE DE POLYNOMES : Derivation d'un Polynome ====");
\r
733 writeln("==========================================================");
\r
737 call a.selection(p1);
\r
742 call a.question(r);
\r
747 (****************************************************)
\r
748 (** Instructions du Programme Principal *************)
\r
749 (****************************************************)
\r
758 writeln("==========================================================");
\r
759 writeln("= STRUCTURE DE POLYNOMES : Menu Principal ==============");
\r
760 writeln("==========================================================");
\r
763 writeln(" Options Disponibles : ");
\r
764 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
776 write(" Votre 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
792 (****************************************************)
\r