1 Program Evaluationdepropositionslogiques;
\r
3 (********************************************)
\r
4 (* ARDANTZ Jean-Michel *)
\r
6 (* TOURNIER Vincent *)
\r
7 (********************************************)
\r
19 i,longueur,xx,y,Z : Integer,
\r
21 Valeur : ArrayOf Char,
\r
22 Courant,Diagramme,X : Node;
\r
25 (******************************************)
\r
26 (* Lecture d'une chaine de caracteres *)
\r
27 (******************************************)
\r
29 (* Cette classe lit une chaine de caract
\8ares *)
\r
30 (* et la met dans un tableau "Valeur" *)
\r
32 Unit Chaine : Class;
\r
36 Pref IIUWGRAPH Block
\r
38 X:=110+(longueur*8);
\r
46 Call Texte(X,184,0," ");
\r
48 Call Texte(X,184,15,"-");
\r
52 If (c=97)or(c=98)or(c=99)or(c=100)or(c=120)or(c=121)
\r
53 or(c=122)or(c=40)or(c=41)
\r
62 Call dessine_et(X,180);
\r
69 Call dessine_ou(X,180);
\r
76 Call dessine_implique(X,180);
\r
83 Call dessine_non(X,180);
\r
91 Writeln(" pa pa ! ");
\r
93 When 8 : If X > 110 Then
\r
98 Call texte(X,184,15,"-");
\r
110 Call texte(105,258,15,"Caract
\8are ill
\82gal");
\r
111 Call texte(105,274,15,"Appuyez sur une touche pour continuer");
\r
112 while inkey=0 do od;
\r
113 Call Fill (101,251,398,38,0) ;
\r
114 Call move(110+(longueur*8),180);
\r
117 Call texte(105,258,15,"Chaine trop longue ");
\r
118 Call texte(105,274,15,"Appuyez sur une touche pour continuer");
\r
119 while inkey=0 do od;
\r
120 Call Fill (101,251,398,38,0) ;
\r
121 Call move(110+(longueur*8),180);
\r
128 (************************************************)
\r
129 (* Analyseur lexical *)
\r
130 (************************************************)
\r
132 (* Ces deux proc
\82dures v
\82rifient la validit
\82 *)
\r
133 (* syntaxique de la chaine *)
\r
135 Unit Evolution : procedure(inout etat:Integer; inout nbre:Integer;
\r
136 inout nbcar:Integer; input c:Char);
\r
140 when '(' : nbcar := 0;
\r
143 when 'a','b','c','d','x','y','z' : nbcar := nbcar + 1;
\r
145 when '|' : etat := 3 ;
\r
146 otherwise etat := 0;
\r
149 when '&','%','>' : etat := 1 ;
\r
150 when ')' : nbcar := 0;
\r
153 otherwise etat := 0;
\r
156 when '(' : nbre:=nbre+1;
\r
158 otherwise etat := 0;
\r
164 (*La fonction analyseur retourne un booleen selon que la formule
\r
165 propositionnel est correcte ou non *)
\r
168 Unit Analyseur : function(longueur : Integer) : Boolean;
\r
169 Var etat,nbre,nbcar,i : Integer,
\r
178 while (( etat > 0 ) and (i <= longueur ))
\r
181 If C='>' Or C='&' Or C='%' Or C='|' Then B:=True; Fi;
\r
182 call Evolution(etat,nbre,nbcar,c);
\r
190 Call Texte(105,266,15,"Erreur de s
\82mantique");
\r
193 when 0 : Call texte(105,266,15,"Erreur de syntaxe");
\r
194 when moinsun : Call texte(105,266,15,
\r
195 "Chaine incorrecte, parenth
\82sez vos expressions !");
\r
196 otherwise if nbre < 0 then
\r
197 Call texte(105,266,15,
\r
198 "Chaine incorrecte, caract
\8are(s) ( absent(s)");
\r
199 else if nbre > 0 then
\r
200 Call texte(105,266,15,
\r
201 "Chaine incorrecte, caract
\8are(s) ) absent(s)");
\r
205 If ((etat > 0) and (nbre=0)) then
\r
206 Call texte(105,266,15,"Chaine correcte");
\r
212 (***********************************************)
\r
213 (* Impl
\82mentation de la pile *)
\r
214 (***********************************************)
\r
216 Unit Unepile : Class(type telem);
\r
228 Unit Push : Function (E : Telem ; S : Pile) : Pile;
\r
239 Result := New Pile;
\r
243 Unit Empty_Pile : Function (S : Pile) : Boolean;
\r
245 Result := (S=None);
\r
248 Unit Top : Function (S : Pile) : Telem;
\r
250 Result := S.top.valeur;
\r
253 Unit Down : Function (S : Pile) : Pile;
\r
255 if s.top.next <> none
\r
256 then Result := New Pile;
\r
257 Result.top := S.top.next;
\r
265 (************************************************)
\r
266 (* Recherche des operateurs principaux *)
\r
267 (************************************************)
\r
269 (* Cette proc
\82dure construit l'arbre associ
\82 *)
\r
270 (* la formule entr
\82e par l'utilisateur *)
\r
277 Unit Noeud : Class;
\r
278 Var left , right : Noeud,
\r
283 Unit Operateur : procedure(longueur : Integer; output racine : Noeud);
\r
292 up1 := new UnePile(Noeud);
\r
293 up2 := new UnePile(Elem);
\r
294 for i:=1 to longueur
\r
299 When 'a','b','c','d','x','y','z' : n := New Noeud;
\r
301 up1.p1 := up1.Push(n,up1.p1);
\r
302 when '&','%','>','|' : e := new elem;
\r
304 up2.p2 := up2.Push(e,up2.p2);
\r
305 when ')' : if not up2.Empty_Pile(up2.p2)
\r
307 aux := up2.top(up2.p2);
\r
308 up2.p2 := up2.down(up2.p2);
\r
309 nd := up1.top(up1.p1);
\r
310 up1.p1 := up1.down(up1.p1);
\r
311 if aux.valeur <> '|'
\r
312 then ng := up1.top(up1.p1);
\r
313 up1.p1 := up1.down(up1.p1);
\r
320 p.valeur := aux.valeur;
\r
321 up1.p1 := up1.push(p,up1.p1);
\r
325 if not up2.Empty_Pile(up2.p2)
\r
326 then aux := up2.top(up2.p2);
\r
327 up2.p2 := up2.down(up2.p2);
\r
328 nd := up1.top(up1.p1);
\r
329 up1.p1 := up1.down(up1.p1);
\r
330 if aux.valeur <> '|' then
\r
331 ng := up1.top(up1.p1);
\r
332 up1.p1 := up1.down(up1.p1);
\r
339 p.valeur := aux.valeur;
\r
347 (************************************************)
\r
348 (* Impl
\82mentation de la liste *)
\r
349 (************************************************)
\r
351 (* Cette impl
\82mentation de liste permettra *)
\r
352 (* d'ins
\82rer les variables en fin de liste *)
\r
353 (* et les op
\82rateurs au d
\82but *)
\r
355 Unit Node : Class ;
\r
356 Var Val: Sequence ,
\r
357 Left, Right: Node ;
\r
360 Unit Sequence : Class;
\r
361 Var Gauche, Droite: Liste ;
\r
364 Unit Liste : Class;
\r
370 Unit Empty_Liste : function(l:Liste) : Boolean;
\r
376 Unit Insert : Function (E:Noeud;L:Liste) : Liste ;
\r
377 Var l1,aux : Liste;
\r
380 Then L := new Liste;
\r
381 L.Debut:=New Noeud;
\r
386 If E.Valeur<>'|' Andif E.Valeur<>'%'
\r
387 Andif E.Valeur<>'&' Andif E.Valeur<>'>'
\r
390 While L1.Suivant <> None
\r
394 L1.Suivant := Aux ;
\r
406 Unit Delete : Function(L:Liste): Liste;
\r
408 Result := L.suivant;
\r
412 (************************************************************)
\r
413 (* Procedures de d
\82composition d'une expression bool
\82enne *)
\r
414 (************************************************************)
\r
416 (* Ces proc
\82dures permettent de d
\82composer la liste *)
\r
417 (* initiale gr
\85ce
\85 la m
\82thode de GENTZEN de mani
\8are *)
\r
418 (*
\85 n'obtenir que des variables aux feuilles *)
\r
422 Unit Copie_Liste : Function (L:Liste) : Liste ;
\r
423 Var Der,Aux:Liste ;
\r
425 Result := New Liste ;
\r
426 if L<>None Then Der := New Liste ;
\r
435 Der.Suivant := Aux ;
\r
443 Unit Op_Negation_G : Procedure(Input Racine:Noeud;Inout D:Node) ;
\r
449 X.Val := New Sequence ;
\r
450 L := Copie_Liste (D.Val.Gauche) ;
\r
451 R := Copie_Liste (D.Val.Droite) ;
\r
453 R := Insert (Racine.Right,R) ;
\r
454 X.Val.Droite:=Copie_Liste (R);
\r
455 X.Val.Gauche:=Copie_Liste (L) ;
\r
461 End Op_Negation_G ;
\r
464 Unit Op_Alternative_G : Procedure(Input Racine:Noeud;Inout D:Node ) ;
\r
470 X.Val := New Sequence ;
\r
472 Y.Val := New Sequence ;
\r
473 X.Val.Droite:= Copie_Liste (D.Val.Droite) ;
\r
474 Y.Val.Droite:= Copie_Liste (D.Val.Droite) ;
\r
475 l := Copie_Liste (D.Val.Gauche) ;
\r
477 S := Copie_Liste (L) ;
\r
478 L := Insert (Racine.Left,L) ;
\r
479 S := Insert (Racine.Right,S) ;
\r
480 X.Val.Gauche:= Copie_Liste (L) ;
\r
481 Y.Val.Gauche:= Copie_Liste (S) ;
\r
482 D.Left := New Node ;
\r
483 D.Right := New Node ;
\r
489 End Op_Alternative_G ;
\r
491 Unit Op_Conjonction_G : Procedure (Input Racine:Noeud;Inout D : Node);
\r
496 X.Val := New Sequence ;
\r
497 L := Copie_Liste (D.val.Gauche) ;
\r
499 L := Insert (Racine.Left,L) ;
\r
500 L := Insert (Racine.Right,L) ;
\r
501 X.Val.Gauche:=Copie_Liste (L) ;
\r
502 X.Val.Droite:=Copie_Liste (D.Val.Droite) ;
\r
503 D.Right:=New Node ;
\r
507 End Op_Conjonction_G ;
\r
509 Unit Op_Implique_G : Procedure (Input Racine:Noeud;Inout D:Node ) ;
\r
514 X.Val := New Sequence ;
\r
516 Y.Val := New Sequence ;
\r
517 L := Copie_Liste (D.Val.Gauche) ;
\r
518 R := Copie_Liste (D.Val.Droite) ;
\r
519 X.val.Droite := Copie_Liste (R) ;
\r
521 Y.Val.Gauche := Copie_Liste (L) ;
\r
522 Y.Val.Droite := Copie_Liste (Insert (Racine.Left,R)) ;
\r
523 X.Val.Gauche := Copie_Liste (Insert (Racine.Right,L)) ;
\r
524 D.Left := New Node ;
\r
525 D.Right := New Node ;
\r
531 End Op_Implique_G ;
\r
534 Unit Op_Negation_D : Procedure(Input Racine:Noeud; Inout D : Node ) ;
\r
540 X.Val := New Sequence ;
\r
541 L := Copie_Liste (D.Val.Gauche) ;
\r
542 R := Copie_Liste (D.val.Droite) ;
\r
543 L := Insert (Racine.Right,L) ;
\r
545 X.Val.Droite:=Copie_Liste (R);
\r
546 X.Val.Gauche:=Copie_Liste (L) ;
\r
547 D.Right := New Node ;
\r
552 End Op_Negation_D ;
\r
555 Unit Op_Alternative_D : Procedure(Input Racine:Noeud;Inout D:Node ) ;
\r
561 X.Val := New Sequence ;
\r
562 R := Copie_Liste (D.Val.Droite) ;
\r
564 R := Insert (Racine.Left,R) ;
\r
565 R := Insert (Racine.Right,R) ;
\r
566 X.Val.Gauche := Copie_Liste (D.Val.Gauche) ;
\r
567 X.Val.Droite := Copie_Liste (R) ;
\r
568 D.Right := New Node ;
\r
572 End Op_Alternative_D ;
\r
575 Unit Op_Conjonction_D : Procedure (Input Racine:Noeud;
\r
582 X.Val := New Sequence ;
\r
584 Y.Val := New Sequence ;
\r
585 R := Copie_Liste (D.Val.Droite) ;
\r
587 S := Copie_Liste (R) ;
\r
588 S := Insert (Racine.Left,S) ;
\r
589 R := Insert (Racine.Right,R) ;
\r
590 X.Val.Gauche := Copie_Liste (D.Val.Gauche) ;
\r
591 X.Val.Droite := Copie_Liste (S) ;
\r
592 Y.val.Gauche := Copie_Liste (D.Val.Gauche) ;
\r
593 Y.Val.Droite := Copie_Liste (R) ;
\r
594 D.Left := New Node ;
\r
595 D.Right := New Node ;
\r
601 End Op_Conjonction_D ;
\r
604 Unit Op_Implique_D : Procedure (Input Racine:Noeud;Inout D:Node ) ;
\r
610 X.Val := New Sequence ;
\r
611 L := Copie_Liste (D.Val.Gauche) ;
\r
612 R := Copie_Liste (D.val.Droite) ;
\r
613 X.Val.Gauche := Copie_Liste (Insert (Racine.Left,L)) ;
\r
615 X.Val.Droite := Copie_Liste (Insert (Racine.Right,R)) ;
\r
616 D.Right := New Node ;
\r
621 End Op_Implique_D ;
\r
624 Unit Trait_List_G : Procedure (Racine:Noeud;Inout D:Node);
\r
628 When '|' : Call Op_Negation_G (Racine,D) ;
\r
629 When '%' : Call Op_Alternative_G (Racine,D) ;
\r
630 When '&' : Call Op_Conjonction_G (Racine,D) ;
\r
631 When '>' : Call Op_Implique_G (Racine,D) ;
\r
636 Unit Trait_List_D : Procedure (Racine:Noeud;Inout D:Node);
\r
641 When '|' : Call Op_Negation_D (Racine,D) ;
\r
642 When '%' : Call Op_Alternative_D (Racine,D) ;
\r
643 When '&' : Call Op_Conjonction_D (Racine,D) ;
\r
644 When '>' : Call Op_Implique_D (Racine,D) ;
\r
652 Unit Decompose : Procedure (Inout Diagramme : Node);
\r
654 Courant,L : Liste ,
\r
655 Fin,Trouve : Boolean ,
\r
661 If D.Val.Gauche<>None AndIf (D.Val.Gauche.Debut.Valeur='&'
\r
662 Or D.Val.Gauche.Debut.Valeur='%'
\r
663 Or D.Val.Gauche.Debut.Valeur='>'
\r
664 Or D.Val.Gauche.Debut.Valeur='|')
\r
666 Racine := Copy (D.Val.Gauche.Debut) ;
\r
667 Call Trait_List_G (Racine,D) ;
\r
670 If D.Val.Droite<>None AndIf (D.Val.Droite.Debut.Valeur='&'
\r
671 Or D.Val.Droite.Debut.Valeur='%'
\r
672 Or D.Val.Droite.Debut.Valeur='>'
\r
673 Or D.Val.Droite.Debut.Valeur='|')
\r
674 Then Racine := Copy (D.Val.Droite.Debut) ;
\r
675 Call Trait_List_D (Racine,D) ;
\r
679 Call Decompose (D.Left) ;
\r
680 Call Decompose (D.right) ;
\r
687 Unit Parcours_Arbre_Right : Procedure(racine : Noeud;Sens,I,J:Integer;
\r
691 Pref IIUWGRAPH Block
\r
696 Then Call Move (I+8*Z,J) ;
\r
701 Call Parcours_Arbre_Right(p.Left,Sens,I,J,Z);
\r
702 Call Move (I+8*Z,J);
\r
705 When '&' : Call dessine_et(I+8*Z,J);
\r
706 When '%' : Call dessine_ou(I+8*Z,J);
\r
707 When '>' : Call dessine_implique(I+8*Z,J);
\r
708 When '|' : Call dessine_non(I+8*Z,J);
\r
709 otherwise Call Hascii(Ord(P.Valeur));
\r
713 Then Call Move (I+8*Z,J) ;
\r
718 call parcours_Arbre_Right(p.Right,Sens,I,J,Z);
\r
719 If P.Right<>None Or P.Valeur='|'
\r
720 Then Call Move (I+8*Z,J) ;
\r
727 End Parcours_Arbre_Right;
\r
731 Unit Parcours_Arbre_Left : procedure(racine : Noeud;Sens,I,J:Integer;
\r
735 Pref IIUWGRAPH Block
\r
739 If P.Left<>None Or P.Valeur='|'
\r
740 Then Call Move (I+8*Z,J) ;
\r
745 Call parcours_Arbre_Left(p.Right,Sens,I,J,Z);
\r
747 Then Call Move (I+8*Z,J) ;
\r
752 Call Move (I+8*Z,J);
\r
755 When '&' : Call dessine_et(I+8*Z,J);
\r
756 When '%' : Call dessine_ou(I+8*Z,J);
\r
757 When '>' : Call dessine_implique(I+8*Z,J);
\r
758 When '|' : Call dessine_non(I+8*Z,J);
\r
759 otherwise Call Hascii(Ord(P.Valeur));
\r
762 Call parcours_Arbre_Left(p.Left,Sens,I,J,Z);
\r
763 If P.Right<>None And P.Valeur<>'|'
\r
764 Then Call Move (I+8*Z,J) ;
\r
771 End Parcours_Arbre_Left;
\r
775 Unit Affiche_Liste : Procedure (Input L:Liste;I,J,Sens:Integer );
\r
778 Pref IIUWGRAPH Block
\r
782 Call dessine_fleche(I,J);
\r
786 Then Call Move(I+Sens,J);
\r
787 Call dessine_vide(I+sens,J);
\r
795 Then Call Parcours_Arbre_Left (L.Debut,Sens,I,J,Z);
\r
796 Else Call Parcours_Arbre_Right(L.Debut,Sens,I,J,Z);
\r
807 End Affiche_Liste ;
\r
810 Unit Parcours : Procedure(Racine:Node;X,Y,Z:integer);
\r
813 Pref IIUWGRAPH Block
\r
817 Call Affiche_Liste (P.Val.Gauche,X,Y,-8) ;
\r
818 Call Affiche_Liste (P.Val.Droite,X,Y,+8) ;
\r
819 Call Parcours(P.Left,X-Z,Y+32,Z/2) ;
\r
820 If P.Left<>None Then Call color(11);
\r
821 Call Move (X,Y+8) ;
\r
822 Call Draw (X-Z,Y+30) ;
\r
823 Call Move (X,Y+8) ;
\r
824 Call Draw (X+Z,Y+30) ;
\r
826 Call Parcours(P.Right,X+Z,Y+32,Z/2) ;
\r
827 Else If P.Right<>None
\r
828 Then Call color(11);
\r
829 Call Move (X,Y+8) ;
\r
830 Call Draw (X,Y+30) ;
\r
833 Call Parcours(P.Right,X,Y+32,Z/2) ;
\r
840 (****************************************************)
\r
841 (* Evaluation de la Tautologicit
\82 de la formule *)
\r
842 (****************************************************)
\r
845 Unit Recherche_Tautologie : Procedure(Left,Right:Liste;X,Y,Z:Integer;
\r
846 OutPut H:Boolean) ;
\r
847 Var Element : Char,
\r
858 L := Copie_Liste (Left);
\r
859 R := Copie_Liste (Right);
\r
860 If (Left=None) Or (Right=None)
\r
862 call texte(150,Y+20,11,
\r
863 "Cette expression n'est pas une tautologie.") ;
\r
864 Else Element := Left.Debut.valeur ;
\r
867 If Element = Right.Debut.Valeur Then Exit; Fi;
\r
868 Right := Right.Suivant ;
\r
869 If Right = None Then Exit; Fi;
\r
871 If Right<>None Then
\r
872 call texte(150,Y+20,11,
\r
873 "Cette expression est une tautologie.");
\r
877 If Totaul Then Exit; Fi;
\r
878 Left := Left.Suivant ;
\r
879 If Left = None Then
\r
880 call texte(150,Y+20,11,
\r
881 "Cette expression n'est pas une tautologie.");
\r
884 Right := Copie_Liste(R);
\r
890 If L<>None Then X:=X-16;
\r
896 If R<>None Then Large:=Large+16;
\r
899 Call Rectangle (X-1,Y,Large+2,8,15) ;
\r
902 End Recherche_Tautologie;
\r
905 Unit Affiche_Feuille:Procedure (D:Node;X,Y,Z:Integer;Inout H:Boolean);
\r
908 Then If Not H Then Return;
\r
910 Call Affiche_Feuille (D.Left,X-Z,Y+32,Z/2,H) ;
\r
912 Then Call Affiche_Feuille (D.Right,X+Z,Y+32,Z/2,H) ;
\r
913 Else Call Affiche_Feuille (D.Right,X,Y+32,Z/2,H) ;
\r
915 If (D.Left=None) And (D.Right=None)
\r
917 Call Recherche_Tautologie(D.Val.Gauche,D.Val.Droite,X,Y,Z,H);
\r
920 End Affiche_Feuille ;
\r
923 (************************************)
\r
924 (* Proc
\82dures Graphiques *)
\r
925 (************************************)
\r
929 Unit Rectangle : Procedure (X,Y,Large,Haut,Col:Integer) ;
\r
931 Pref IIUWGRAPH Block
\r
935 Call Draw (X+Large,Y) ;
\r
936 Call Draw (X+Large,Y+Haut) ;
\r
937 Call Draw (X,Y+haut) ;
\r
944 Unit Fill : Procedure (X,Y,Large,Haut,Col:Integer) ;
\r
947 Pref IIUWGRAPH Block
\r
953 Call Draw(X+Large,I) ;
\r
959 Unit Texte : Procedure (X,Y,col : integer; s : string);
\r
961 Pref IIUWGRAPH Block
\r
970 Unit dessine_et : Procedure(X,Y : integer);
\r
972 Pref IIUWGRAPH Block
\r
976 Call draw(X+3,Y+2);
\r
977 Call draw(X+6,Y+6);
\r
982 Unit dessine_ou : Procedure(X,Y : integer);
\r
984 Pref IIUWGRAPH Block
\r
988 Call draw(X+3,Y+6);
\r
989 Call draw(X+6,Y+2);
\r
994 Unit dessine_implique : Procedure(X,Y : integer);
\r
996 Pref IIUWGRAPH Block
\r
1000 Call draw(X+4,Y+2);
\r
1002 Call draw(X+4,Y+4);
\r
1004 Call draw(X+6,Y+3);
\r
1005 Call draw(X+3,Y+6);
\r
1011 Unit dessine_non : Procedure(X,Y : integer);
\r
1013 Pref IIUWGRAPH Block
\r
1018 Call draw(X+3,Y+6);
\r
1023 Unit dessine_vide : Procedure(X,Y : integer);
\r
1025 Pref IIUWGRAPH Block
\r
1028 Call cirb(X+3,Y+4,3,0,0,15,0,1,1);
\r
1035 Unit dessine_fleche : Procedure(X,Y : integer);
\r
1037 Pref IIUWGRAPH Block
\r
1040 Call move(X+1,Y+4);
\r
1041 Call draw(X+7,Y+4);
\r
1042 Call move(X+4,Y+1);
\r
1043 Call draw(X+7,Y+4);
\r
1044 Call draw(X+4,Y+7);
\r
1049 (********************************)
\r
1050 (* Programe Principal *)
\r
1051 (********************************)
\r
1054 array valeur dim(1:47);
\r
1055 Pref IIUWGRAPH Block
\r
1060 Call Rectangle (120,10,344,40,15);
\r
1061 Call Rectangle (125,51,345,6,15);
\r
1062 Call Rectangle (465,15,6,42,15);
\r
1063 Call Fill (126,51,344,5,9);
\r
1064 Call Fill (465,16,5,37,9);
\r
1065 Call texte(121,27,15,
\r
1066 " EVALUATION DE PROPOSITIONS LOGIQUES ");
\r
1067 Call Rectangle (100,150,400,72,15) ;
\r
1068 Call move(100,200);
\r
1069 Call draw(500,200);
\r
1070 Call Rectangle (144,200,44,22,15);
\r
1071 Call Rectangle (232,200,44,22,15);
\r
1072 Call texte(105,208,12,"F1:");
\r
1073 Call dessine_et(131,208);
\r
1074 Call texte(149,208,12,"F2:");
\r
1075 Call dessine_ou(175,208);
\r
1076 Call texte(193,208,12,"F3:");
\r
1077 Call dessine_implique(219,208);
\r
1078 Call texte(237,208,12,"F4:");
\r
1079 Call dessine_non(263,208);
\r
1080 Call texte(285,208,12,"Variables : a,b,c,d,x,y,z");
\r
1081 Call texte(105,160,15,"Entrez la proposition : (");
\r
1082 Call texte(308,160,12,"F10 ");
\r
1083 Call texte(340,160,15,"pour quitter)");
\r
1084 Call texte(110,184,15,
\r
1085 "------------------------------------------------");
\r
1086 Call Rectangle (100,250,400,60,15) ;
\r
1087 Call Move (100,290) ;
\r
1088 Call Draw (500,290) ;
\r
1089 Call Texte (225,297,12,"Fen
\88tre de messages");
\r
1090 Call Move(110,180);
\r
1095 If Analyseur(Longueur) Then
\r
1096 Call texte(153,280,15,"Appuyez sur une touche pour continuer");
\r
1097 while inkey=0 do od;
\r
1100 Call texte(153,280,15,"Appuyez sur une touche pour continuer");
\r
1101 while inkey=0 do od;
\r
1102 Call Fill (101,251,398,38,0) ;
\r
1103 Call move(110+(longueur*8),180);
\r
1111 call Operateur(longueur,racine);
\r
1115 Diagramme := New Node;
\r
1116 Diagramme.Val := New Sequence ;
\r
1117 Diagramme.Val.Droite := Insert (Racine,Diagramme.Val.Droite) ;
\r
1118 Courant := Diagramme ;
\r
1119 Call decompose(Diagramme) ;
\r
1120 Call texte(105,32,12,
\r
1121 "Evolution de la formule suivant la methode de GENTZEN") ;
\r
1122 Call texte(97,40,12,
\r
1123 "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ") ;
\r
1125 Call parcours(Courant,xx,y,Z);
\r
1126 Call texte(130,320,12,"Appuyez sur une touche pour continuer");
\r
1127 While inkey=0 do od;
\r
1128 Call Texte(130,320,12," ");
\r
1129 Call Affiche_Feuille (Diagramme,320,80,256,H) ;
\r
1130 While inkey=0 do od;
\r
1134 End Evaluationdepropositionslogiques;
\r