5 (***************************************************************************)
\r
8 (* Licence Informatique *)
\r
11 (* P R O J E T L I 1 *)
\r
13 (* **** **** **** * * **** ***** **** * **** *)
\r
14 (* * * * * * * * * * * * * * *)
\r
15 (* * ** ** * * * * ** * **** * ** *)
\r
16 (* * * * * * * * * * * * * * *)
\r
17 (* **** **** **** * * **** * * * * **** *)
\r
19 (***************************************************************************)
\r
23 (************************************************************)
\r
24 (* CLASSE DEFINISSANT LES PROCEDURES DE GRAPHISME UTILISEES *)
\r
25 (************************************************************)
\r
26 pref IIUWGRAPH block
\r
28 (*---------------------------------------------------*)
\r
29 (* PROCEDURE permettant d'utiliser le mode GRAPHIQUE *)
\r
30 (*---------------------------------------------------*)
\r
31 unit initgraph : procedure;
\r
36 (*---------------------------------------------------*)
\r
37 (* PROCEDURE permettant de fermer le mode GRAPHIQUE *)
\r
38 (*---------------------------------------------------*)
\r
39 unit closegraph : procedure;
\r
44 (*-----------------------------------------------------------------*)
\r
45 (* AFFICHAGE en (x,y) d'un RECTANGLE de longueur l et de hauteur h *)
\r
46 (*-----------------------------------------------------------------*)
\r
47 unit rectangle : procedure(x,y,l,h : integer);
\r
56 (*--------------------------------------------------------------------*)
\r
57 (* Definition du repere orthonorme *)
\r
58 (*--------------------------------------------------------------------*)
\r
59 Unit reportho:procedure;
\r
67 (*--------------------------------------------------------------------*)
\r
68 (* ECRITURE d'une CHAINE de caracteres sur l'ecran graphique en (x,y) *)
\r
69 (*--------------------------------------------------------------------*)
\r
70 unit ecrit_text : procedure(x,y : integer;str : string);
\r
71 var ch : arrayof character,
\r
76 lg := upper(ch) - lower(ch) + 1;
\r
79 call hascii(ord(ch(i)));
\r
83 (*---------------------------------*)
\r
84 (* LECTURE d'une touche au clavier *)
\r
85 (*---------------------------------*)
\r
86 unit inchar : function : integer;
\r
91 if i =/= 0 then exit;
\r
97 (*-------------------------------------------------------------------*)
\r
98 (* LECTURE d'un ENTIER au clavier et AFFICHAGE sur l'ecran graphique *)
\r
99 (*-------------------------------------------------------------------*)
\r
100 unit lire_entier: function(x,y:real):real;
\r
101 var nbchiffre,key,i : integer, valeur : real, negatif : boolean;
\r
112 (* Lecture de la touche *)
\r
114 if key = 45 then negatif := true ;
\r
117 if (key >= 48 and key <= 57)
\r
120 (* Saisie de chiffres *)
\r
121 if (nbchiffre < 3 )
\r
123 valeur := valeur*10 + key - 48;
\r
127 if (key = 27) or (key = 13) (* touche ESC ou RETOUR chariot *)
\r
131 if negatif then result := -valeur
\r
137 (*---------------------------------------------------------------------*)
\r
138 (* ECRITURE d'un ENTIER sur l'
\82cran graphique au coordonn
\82es courantes *)
\r
139 (*---------------------------------------------------------------------*)
\r
140 unit ecrit_entier : procedure (posx,posy:integer, x : real);
\r
141 var val,i,j,val2 : integer,
\r
142 ch,ch2 : arrayof character,
\r
146 array ch2 dim(1:4);
\r
159 ch(i) := chr(48+(val mod 10));
\r
161 if (val = 0) then exit; fi;
\r
168 ch2(i):= chr(48+(val2 mod 10));
\r
169 val2:= val2 div 10;
\r
170 if (val2 = 0) then exit; fi;
\r
184 call move(posx,posy);
\r
186 call hascii(ord(ch(i)));
\r
190 call move(posx+8,posy);
\r
195 call move(posx+8*(j+1),posy);
\r
197 call hascii(ord(ch2(j)));
\r
204 unit ecrit_entier : procedure (x:real);
\r
206 var i,j,n,tail : integer,
\r
207 ch : arrayof character,
\r
212 for i:=1 to 7 do ch(i):=chr(48); od;
\r
217 ch(i):=chr(48+(n mod 10));
\r
221 if (n=0) then exit; fi;
\r
229 ch(i+j-1):=ch(i+8-j-tail);
\r
235 if ok then tail:=tail+1; fi;
\r
239 call hascii(ord(ch(i)));
\r
241 end ecrit_entier;*)
\r
243 (*----------------------------------------------------------------*)
\r
244 (* PROCEDURE EQUATION QUI RENVOIE LES COORDONNEES DE DEUX DROITES *)
\r
245 (*----------------------------------------------------------------*)
\r
246 unit equation:procedure(output x1,y1,x2,y2:real);
\r
248 call ecrit_text(430,320,"abscisse premier point: ");
\r
249 x1:=lire_entier(622,320);
\r
250 call ecrit_text(430,330,"ordonnee premier point: ");
\r
251 y1:=lire_entier(622,330);
\r
252 call ecrit_text(430,320," ");
\r
253 call ecrit_text(430,330," ");
\r
254 call ecrit_text(430,320,"abscisse deuxieme point: ");
\r
255 x1:=lire_entier(622,320);
\r
256 call ecrit_text(430,330,"ordonnee deuxieme point: ");
\r
257 y1:=lire_entier(622,330);
\r
258 call ecrit_text(430,320," ");
\r
259 call ecrit_text(430,330," ");
\r
262 (*---------------------------------------------------------------*)
\r
263 (* PROCEDURE EQUAT QUI SAISIE LES COORDONNEES A B C DE LA DROITE *)
\r
264 (*---------------------------------------------------------------*)
\r
265 unit equat:procedure(output a,b,c:real);
\r
267 call ecrit_text(470,317,"valeur de a: ");
\r
268 a:=lire_entier(574,317);
\r
269 call ecrit_text(470,327,"valeur de b: ");
\r
270 b:=lire_entier(574,327);
\r
271 call ecrit_text(470,337,"valeur de c: ");
\r
272 c:=lire_entier(574,337);
\r
273 call ecrit_text(470,317," ");
\r
274 call ecrit_text(470,327," ");
\r
275 call ecrit_text(470,337," ");
\r
278 (*--------------------------------*)
\r
279 (* PROCEDURE DE SAISIE D'UN POINT *)
\r
280 (*--------------------------------*)
\r
281 unit def_point:procedure(output x1,y1:real);
\r
284 call ecrit_text(500,320,"Abscisse: ");
\r
285 x1:=lire_entier(580,320);
\r
286 call ecrit_text(500,330,"Ordonnee: ");
\r
287 y1:=lire_entier(580,330);
\r
288 call ecrit_text(500,320," ");
\r
289 call ecrit_text(500,330," ");
\r
292 (*--------------------------------------------------------*)
\r
293 (* PROCEDURE SOMMAIRE DES DIFFERENTES FONCTIONS PROPOSEES *)
\r
294 (*--------------------------------------------------------*)
\r
295 unit sommaire:procedure;
\r
297 call rectangle(1,0,210,306);
\r
298 call ecrit_text (2,10," SOMMAIRE");
\r
299 call ecrit_text (2,40," 1: Forme geometrique");
\r
300 call ecrit_text (2,60," 2: Dessiner cercle");
\r
301 call ecrit_text (2,80," 3: Intersection droites");
\r
302 call ecrit_text (2,100," 4: Parallelisme ");
\r
303 call ecrit_text (2,120," 5: Perpendicularite");
\r
304 call ecrit_text (2,140," 6: Point appart. droite");
\r
305 call ecrit_text (2,160," 7: Point appart. cercle");
\r
306 call ecrit_text (2,180," 8: Intersection cercles");
\r
307 call ecrit_text (2,200," 9: Points/droite");
\r
308 call ecrit_text (2,220," 10: Quitter");
\r
309 call ecrit_text (2,250," Votre choix : ");
\r
312 unit ecran:procedure;
\r
320 unit graphique:procedure;
\r
323 call rectangle(215,0,420,306);
\r
326 unit texte:procedure;
\r
328 call rectangle(1,307,635,42);
\r
331 (*---------------------------------------------------*)
\r
332 (* PROCEDURE POUR SAISIR LES COORDONNEES D'UN CERCLE *)
\r
333 (*---------------------------------------------------*)
\r
334 unit def_cercle:procedure(output x1,y1,r:real);
\r
336 call ecrit_text(350,325,"Rayon: ");
\r
337 r:=lire_entier(406,325);
\r
338 call ecrit_text(450,320,"Abscisse du centre: ");
\r
339 x1:=lire_entier(610,320);
\r
340 call ecrit_text(450,330,"Ordonnee du centre: ");
\r
341 y1:=lire_entier(610,330);
\r
342 call ecrit_text(350,325," ");
\r
343 call ecrit_text(450,320," ");
\r
344 call ecrit_text(450,330," ");
\r
347 (*----------------------------------*)
\r
348 (* PROCEDURE DE DESSIN D'UNE DROITE *)
\r
349 (*----------------------------------*)
\r
350 unit des_droite:procedure(a,b,c:real;output pb:boolean);
\r
357 call move(425-10*c/a,5);
\r
358 call draw(425-10*c/a,295);
\r
361 call move(625,154+10*((c+20*a)/b));
\r
362 call draw(225,154+10*((c-20*a)/b));
\r
366 (*------------------------------------------*)
\r
367 (* PROCEDURE MISE EN ATTENTE MODE GRAPHIQUE *)
\r
368 (*------------------------------------------*)
\r
369 unit attente:procedure;
\r
370 var reponse,rep:integer;
\r
372 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
373 reponse := inkey; (*:=lire_entier(180,295);*)
\r
374 (*reponse := rep + 48 -rep*10;*)
\r
377 (*rep:=lire_entier(180,295);*)
\r
378 reponse := inkey ; (*rep + 48 -rep*10;*)
\r
383 (********************************************************)
\r
384 (* CLASSE DEFINISSANT LES FORMES GEOMETRIQUES UTILISEES *)
\r
385 (********************************************************)
\r
387 unit geoplan :CLASS;
\r
389 (*---------------------*)
\r
390 (* DEFINITION DU POINT *)
\r
391 (*---------------------*)
\r
392 unit pt:class(x,y:real);
\r
394 unit equal:function(q:pt):boolean;
\r
395 (* renvoie une valeur booleenne sur l'egalite de deux points *)
\r
398 result:=((q.x=x) and (q.y=y));
\r
401 unit dist:function(p:pt):real;
\r
402 (* renvoie la distance entre deux points *)
\r
408 result:=sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
\r
412 unit memecote:function(l:line,p1:pt):boolean;
\r
413 (* vrai si les deux points sont du meme cote de la droite *)
\r
417 dx1:=l.a*p1.x+l.b*p1.y+l.c;
\r
418 dx2:=l.a*x+l.b*y+l.c;
\r
419 if (dx1>0 and dx2>0) or (dx1<0 and dx2<0)
\r
427 unit calculeq:procedure(p1:pt;output a,b,c:real);
\r
428 (* calcul l'equation de la droite en fonction des deux points *)
\r
433 c:=x*p1.y - p1.x*y;
\r
436 unit virtual erreur:procedure;
\r
438 call ecrit_text(200,325,"Il n'y a pas de point");
\r
443 (*----------------------*)
\r
444 (* DEFINITION DU CERCLE *)
\r
445 (*----------------------*)
\r
446 unit cercle :class(q:pt,r:real);
\r
448 unit intersec:function(c:cercle):line;
\r
449 (* renvoie la ligne d'intersection entre deux cercles *)
\r
455 r1:=-r*r-q.x*q.x-q.y*q.y;
\r
456 r2:=c.r*c.r-c.q.x*c.q.x-c.q.y*c.q.y;
\r
457 result:=new line(q.x-c.q.x,q.y-c.q.y,(r1-r2)/2);
\r
463 unit ptappartcercle:function(p:pt,epsilon:real):boolean;
\r
464 (* renvoie une valeur booleenne sur l'appartenance de p au cercle *)
\r
467 if (p.x-q.x)*(p.x-q.x) + (p.y-q.y)*(p.y-q.y) >= (r-epsilon)*(r-epsilon)
\r
468 and (p.x-q.x)*(p.x-q.x) + (p.y-q.y)*(p.y-q.y) <= (r+epsilon)*(r+epsilon)
\r
474 end ptappartcercle;
\r
476 unit virtual erreur:procedure;
\r
478 call ecrit_text(200,325,"Il n'y a pas de cercles");
\r
479 writeln("Il n'y a pas de cercle");
\r
484 (*-------------------------*)
\r
485 (* DEFINITION DE LA DROITE *)
\r
486 (*-------------------------*)
\r
487 unit line:class(a,b,c:real);
\r
489 unit meet:function(l:line):pt;
\r
490 (* renvoie le point d'intersection de deux droites *)
\r
494 if parallele(l) then
\r
495 call ecrit_text(200,325,"Les deux droites sont paralleles");
\r
499 t:=1/(l.a*b-l.b*a);
\r
500 result:=new pt((c*l.b-b*l.c)/t,(a*l.c-c*l.a)/t);
\r
506 unit parallele:function(l:line):boolean;
\r
507 (* renvoie une valeur booleenne sur le parallelisme de deux droites *)
\r
522 unit perpendiculaire:function(l:line):boolean;
\r
523 (* renvoie une valeur booleenne sur la perpendicularite de deux droites *)
\r
536 end perpendiculaire;
\r
538 unit ptappartligne:function(p:pt):boolean;
\r
539 (* renvoie une valeur booleenne sur l'appartenance de p a la droite *)
\r
542 if a*p.x + b*p.y +c=0
\r
550 unit virtual erreur:procedure;
\r
552 call ecrit_text(200,325,"Pas de droite");
\r
569 (*---------------------------------------------------------*)
\r
570 (* PROCEDURE GOTOXY POUR DEPLACER LE CURSEUR EN MODE TEXTE *)
\r
571 (*---------------------------------------------------------*)
\r
572 unit gotoxy:procedure(ligne,colonne:integer);
\r
587 write(chr(27), "[",c,d,";",e,f,"H");
\r
590 (*----------------------------------------------*)
\r
591 (* PROCEDURE POUR EFFACER L'ECRAN EN MODE TEXTE *)
\r
592 (*----------------------------------------------*)
\r
593 unit effacecran:procedure;
\r
595 write(chr(27),"[2J");
\r
598 (*--------------------------------------------------------*)
\r
599 (* PROCEDURE POUR METTRE L'ECRAN EN ATTENTE EN MODE TEXTE *)
\r
600 (*--------------------------------------------------------*)
\r
601 unit attent:procedure;
\r
604 call gotoxy(25,45);
\r
605 writeln("taper sur entree");
\r
614 (*****************************************************************************)
\r
615 (* PROGRAMME PRINCIPAL *)
\r
616 (*****************************************************************************)
\r
622 var p,q,centre,p1,p2:pt,
\r
625 x1,y1,x2,y2,r,a,b,c,a1,b1,c1:real,
\r
626 ch,n,rep,rep2,i:integer,
\r
627 fin,pb,pb1:boolean,
\r
628 t:arrayof arrayof real,
\r
629 tab1,tab2: arrayof integer;
\r
634 writeln("CORITON willy");
\r
636 writeln("DULON Benjamin");
\r
638 writeln("Licence informatique");
\r
640 writeln("Groupe 1");
\r
641 call gotoxy(12,10);
\r
642 writeln("PROJET LI1");
\r
643 call gotoxy(13,10);
\r
644 writeln("----------");
\r
645 call gotoxy(16,10);
\r
646 writeln("***** ***** ***** ** ** ***** ***** ***** * *****");
\r
647 call gotoxy(17,10);
\r
648 writeln("* * * * * ** * * * * * * * ");
\r
649 call gotoxy(18,10);
\r
650 writeln("* *** ** * * * * ** * ***** * ** ");
\r
651 call gotoxy(19,10);
\r
652 writeln("* * * * * * * * * * * * * ");
\r
653 call gotoxy(20,10);
\r
654 writeln("***** ***** ***** * * ***** * * * * *****");
\r
657 (* OUVERTURE DU MODE GRAPHIQUE *)
\r
664 while rep<=0 or rep>10
\r
667 rep:=lire_entier(160,250);
\r
669 (* dessiner une forme *)
\r
670 when 1: call ecrit_text(10,325,"Combien de sommets : ");
\r
671 n := lire_entier(178,325);
\r
675 array t(i) dim (1:2);
\r
679 call ecrit_text(250,315,"Pour le point numero ");
\r
682 call ecrit_text(250,325,"Abscisse: ");
\r
683 t(i,1):= lire_entier(338,325);
\r
684 call ecrit_text(250,335,"Ordonn
\82e: ");
\r
685 call ecrit_text(250,325," ");
\r
686 call ecrit_text(250,335," ");
\r
687 t(i,2):= lire_entier(338,335);
\r
689 call move(10*t(1,1)+425,154-10*t(1,2));
\r
692 call draw(10*t(i,1)+425,154-10*t(i,2));
\r
694 call draw(10*t(1,1)+425,154-10*t(1,2));
\r
696 CALL ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
699 (* dessiner un cercle *)
\r
700 when 2: call def_cercle(x1,y1,r);
\r
701 call point(x1*10+425,154-y1*10);
\r
702 call cirb(x1*10+425,154-y1*10,r*10,0,0,15,0,1,1);
\r
704 c2:= new cercle(p1,r);
\r
705 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
709 (* intersection de deux droites *)
\r
710 when 3: call ecrit_text(10,325,"Equation/P (1/2): ");
\r
711 rep2:=lire_entier(154,325);
\r
714 call ecrit_text(280,325,"Premiere droite");
\r
715 call equation(x1,y1,x2,y2);
\r
716 p1:= new pt(x1,y1);
\r
717 p2:= new pt(x2,y2);
\r
718 call p1.calculeq(p2,a,b,c);
\r
719 call ecrit_text(280,325,"Deuxieme droite");
\r
720 call equation(x1,y1,x2,y2);
\r
721 p1:= new pt(x1,y1);
\r
722 p2:= new pt(x2,y2);
\r
723 call p1.calculeq(p2,a1,b1,c1);
\r
725 call ecrit_text(200,325,"Coordonnes premiere droite");
\r
727 call ecrit_text(200,325,"Coordonnes deuxieme droite");
\r
728 call equat(a1,b1,c1);
\r
731 l1:= new line(a,b,c);
\r
732 l2:= new line(a1,b1,c1);
\r
733 centre:=l1.meet(l2);
\r
735 array tab1 dim(1:5000);
\r
737 tab1:=getmap(636,349);
\r
738 call des_droite(a,b,c,pb);
\r
739 call des_droite(a1,b1,c1,pb1);
\r
744 call ecrit_text(250,325,"Probleme de saisie de droite ");
\r
748 call ecrit_text(200,325,"Le point d'intersection a pour coordonnee : ");
\r
749 call ecrit_entier(560,325,centre.x);
\r
750 (* call ecrit_entier(560,335,centre.y); *)
\r
752 call ecrit_text(200,325,"Il n'y a pas de point d'intersection");
\r
756 CALL ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
759 (* parallelisme de deux droites *)
\r
760 when 4: call ecrit_text(10,325,"Equation/P (1/2): ");
\r
761 rep2:=lire_entier(154,325);
\r
764 call ecrit_text(280,325,"Premiere droite");
\r
765 call equation(x1,y1,x2,y2);
\r
766 p1:= new pt(x1,y1);
\r
767 p2:= new pt(x2,y2);
\r
768 call p1.calculeq(p2,a,b,c);
\r
769 call ecrit_text(280,325,"Deuxieme droite");
\r
770 call equation(x1,y1,x2,y2);
\r
771 p1:= new pt(x1,y1);
\r
772 p2:= new pt(x2,y2);
\r
773 call p1.calculeq(p2,a1,b1,c1);
\r
775 call ecrit_text(280,325,"Premiere droite");
\r
777 call ecrit_text(280,325,"Deuxieme droite");
\r
778 call equat(a1,b1,c1);
\r
781 l1:= new line(a,b,c);
\r
782 l2:= new line(a1,b1,c1);
\r
784 array tab1 dim(1:5000);
\r
786 tab1:=getmap(636,349);
\r
787 call des_droite(a,b,c,pb);
\r
788 call des_droite(a,b,c,pb1);
\r
793 call ecrit_text(250,325,"Probleme de saisie de droite ");
\r
795 if l1.parallele(l2)
\r
797 call ecrit_text(280,325,"Les droites sont paralleles");
\r
799 call ecrit_text(280,325,"Les droites ne sont pas paralleles");
\r
803 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
806 (* perpendicularite de deux droites *)
\r
807 when 5: call ecrit_text(10,325,"Equation/P (1/2): ");
\r
808 rep2:=lire_entier(154,325);
\r
811 call ecrit_text(280,325,"Premiere droite");
\r
812 call equation(x1,y1,x2,y2);
\r
813 p1:= new pt(x1,y1);
\r
814 p2:= new pt(x2,y2);
\r
815 call p1.calculeq(p2,a,b,c);
\r
816 call ecrit_text(280,325,"Deuxieme droite");
\r
817 call equation(x1,y1,x2,y2);
\r
818 p1:= new pt(x1,y1);
\r
819 p2:= new pt(x2,y2);
\r
820 call p1.calculeq(p2,a1,b1,c1);
\r
822 call ecrit_text(280,325,"Premiere droite");
\r
824 call ecrit_text(280,325,"Deuxieme droite");
\r
825 call equat(a1,b1,c1);
\r
828 array tab1 dim(1:5000);
\r
830 tab1:=getmap(636,349);
\r
831 call des_droite(a,b,c,pb);
\r
832 call des_droite(a,b,c,pb);
\r
835 l1:= new line(a,b,c);
\r
836 l2:= new line(a1,b1,c1);
\r
839 call ecrit_text(250,325,"Probleme de saisie de droite ");
\r
841 if l1.perpendiculaire(l2)
\r
843 call ecrit_text(280,325,"Les droites sont perpendiculaires");
\r
845 call ecrit_text(280,325,"Les droites ne sont pas perpendiculaires");
\r
849 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
852 (* appartenance d'un point a une droite *)
\r
853 when 6: call ecrit_text(10,320,"Determination de la droite");
\r
854 call ecrit_text(10,330,"Equation/P (1/2): ");
\r
855 rep2:=lire_entier(154,330);
\r
858 call equation(x1,y1,x2,y2);
\r
859 p1:= new pt(x1,y1);
\r
860 p2:= new pt(x2,y2);
\r
861 call p1.calculeq(p2,a,b,c);
\r
863 call ecrit_text(300,325,"Coordonnees droite");
\r
866 call ecrit_text(300,325,"Coordonnees point ");
\r
867 call def_point(x1,y1);
\r
868 p1:= new pt(x1,y1);
\r
869 l1:= new line(a,b,c);
\r
872 array tab1 dim(1:5000);
\r
874 tab1:=getmap(636,349);
\r
875 call des_droite(a,b,c,pb);
\r
881 call ecrit_text(250,325,"Probleme de saisie de la droite ");
\r
883 if l1.ptappartligne(p1)
\r
885 call ecrit_text(250,325,"Le point appartient a la droite");
\r
887 call ecrit_text(250,325,"Le point n'appartient pas a la droite");
\r
891 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
894 (* appartenance d'un point a un cercle *)
\r
895 when 7: call ecrit_text(200,325,"Determination du point");
\r
896 call def_point(x1,y1);
\r
898 call point(454+10*x1,154-10*y1);
\r
899 call ecrit_text(200,325," ");
\r
900 call ecrit_text(100,325,"Determination du cercle");
\r
901 call def_cercle(x1,y1,r);
\r
902 call point(x1*10+425,154-y1*10);
\r
903 call cirb(x1*10+425,154-y1*10,r*10,0,0,15,0,1,1);
\r
905 c2:= new cercle(p2,r);
\r
906 call ecrit_text(100,325," ");
\r
908 if c2.ptappartcercle(p1,epsilon)
\r
910 call ecrit_text(250,325,"Le point appartient au cercle");
\r
912 call ecrit_text(250,325,"Le point n'appartient pas au cercle");
\r
915 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
918 (* intersection entre deux cercles *)
\r
919 when 8: call ecrit_text(10,325,"Pour le premier cercle");
\r
920 call def_cercle(x1,y1,r);
\r
921 call point(x1*10+425,154-y1*10);
\r
922 call cirb(x1*10+425,154-y1*10,r*10,0,0,15,0,1,1);
\r
924 c2:= new cercle(p1,r);
\r
925 call ecrit_text(10,325,"Pour le second cercle ");
\r
926 call def_cercle(x1,y1,r);
\r
927 call point(x1*10+425,154-y1*10);
\r
928 call cirb(x1*10+425,154-y1*10,r*10,0,0,15,0,1,1);
\r
930 c3:= new cercle(p2,r);
\r
932 l1:=c2.intersec(c3);
\r
933 call ecrit_text(10,325," ");
\r
934 call ecrit_text(200,325,"La droite a pour equation");
\r
936 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
939 (* deux points d'un meme cote d'une droite *)
\r
940 when 9: call ecrit_text(10,320,"Determination de la droite");
\r
941 call ecrit_text(10,330,"Equation/P (1/2): ");
\r
942 rep2:=lire_entier(154,330);
\r
945 call equation(x1,y1,x2,y2);
\r
946 p1:= new pt(x1,y1);
\r
947 p2:= new pt(x2,y2);
\r
948 call p1.calculeq(p2,a,b,c);
\r
950 call ecrit_text(280,325,"Coordonnees droite");
\r
953 call ecrit_text(280,325,"Coordonnees premier point ");
\r
954 call def_point(x1,y1);
\r
955 call point(425+10*x1,154-10*y1);
\r
956 p1:= new pt(x1,y1);
\r
957 call ecrit_text(280,325,"Coordonnees second point ");
\r
958 call def_point(x1,y1);
\r
959 call point(425+10*x1,154-10*y1);
\r
960 p2:= new pt(x1,y1);
\r
962 array tab1 dim(1:5000);
\r
964 tab1:=getmap(636,349);
\r
965 call des_droite(a,b,c,pb);
\r
969 l1:= new line(a,b,c);
\r
972 call ecrit_text(250,325,"Probleme de saisie de la droite ");
\r
974 if p1.memecote(l1,p2)
\r
976 call ecrit_text(280,325,"Les deux points sont du meme cote");
\r
978 call ecrit_text(280,325,"Les deux points ne sont pas du meme cote");
\r
982 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
989 call ecrit_text(10,325,"Voulez-vous vraiment : ");
\r
990 call ecrit_text(220,320,"1: Quitter le programme ");
\r
991 call ecrit_text(220,335,"2: Continuer ");
\r
992 call ecrit_text(450,325,"Votre choix : ");
\r
993 ch:=lire_entier(562,325);
\r
994 call ecrit_text (20,295,"< TAPER SUR ENTREE >");
\r
997 when 2: exit;exit;rep:=0;
\r
1004 (* FERMETURE DU MODE GRAPHIQUE *)
\r