Allez, voici le code, les dix Saint-Jean te l'amènent :
D'abord la petite lib ("mylib.c") :
Code:
1 /* INKEY ASKEY
2 WAITKEY WAITASC
3 */
10 #define INKEY call((int)ink,0)
11 #define ASKEY call((int)ask,0)
12 #define WAITKEY call((int)waitk,0)
13 #define WAITASC call((int)waita,0)
30 char *ink="\xCD\x53\xBE\x6F\x26\x00\xC9";
31 char *ask="\xCD\x53\xBE\xCD\x56\xBE\x6F\x26\x00\xC9";
32 char *waitk="\xCD\xFD\xBC\x6F\x26\x00\xC9";
33 char *waita="\xCD\xFD\xBC\xCD\x56\xBE\x6F\x26\x00\xC9";
39 testlib(){
40 int b=0,a=0;
50 do {
60 /*b=INKEY;a=ASKEY;*/
61 b=WAITKEY;a=WAITASC;
70 printf("%d\t%d\n",b,a);
80 } while (1);
90 }
100 gpxy(int x,int y, char *h){gcursor(x,y);gprint(h);}
Et le code proprement dit (graph.c) :
Code:
10#include"mylib.h"
20 double XA,XB,YA,YB,S,X1,X2,Y1,Y2,XT,TX,YT,TY;
30 double y0,y1,a,b,c,x,mx1,my1,mx2,my2,ax1,ay1,ax2,ay2;int fc,w;
40 /*
50 *
60 *
70 */
80 double f0(double x) { return(sin(x));}
90 double f1(double x) { return(cos(x));}
100 /*
110 *
120 *
130 */
140 double cfc(int n,double x){
150 if (n==0) return(f0(x)); else return(f1(x));
160 }
170 double cx(double x){return(X1+((x-XA)/TX)*XT);}
180 double cy(double y){return(Y1+YT-(((y-YA)/TY)*YT));}
190 main(){
200 /*
210 *
220 *
230 *
240 *
250 */
260 XA=-360; /* xmin */
270 XB= 360; /* xmax */
280 YA= -1; /* ymin */
290 YB= 1; /* ymax */
300 S = 5; /* pas */
310 X1= 48; /* x1win*/
320 Y1= 8; /* y1win*/
330 X2= 143; /* x2win*/
340 Y2= 47; /* y2win*/
350 XT=X2-X1;/* lgwin*/
360 YT=Y2-Y1;/* htwin*/
370 TX=XB-XA;/* lggfx*/
380 TY=YB-YA;/* htgfx*/
390 /*
400 *
410 *
420 *
430 */
440 dessine();
450 gotoxy(0,0);w=0;
460 while(w!=80){w=WAITKEY;
470 if(w==18){
480 gotoxy(0,0);printf(" ");
490 gotoxy(0,0);printf("x=");scanf("%f",&x);
500 gotoxy(9,0);printf("y=%f\t\t",cfc(fc,x));
510 }
520 if(w==33){
530 fc=0;
540 affmenu();
550 }
560 if(w==34){
570 fc=1;
580 affmenu();
590 }
600 } /* while */
610 } /* main */
620 dessine(){
630 clrscr();
640 line(X1,Y1,X2,Y2,2,65535,1); /* CADRE */
650 line(cx(0),cy(YA),cx(0),cy(YB),0,65535,0); /* AXE Y */
660 line(cx(XA),cy(0),cx(XB),cy(0),0,65535,0); /* AXE X */
670 a=f0(XA),b=f1(XA);
680 c=XA;
690 for(x=XA;x<=XB;x+=S){
700 y0=f0(x);
710 y1=f1(x);
720 line(cx(c),cy(a),cx(x),cy(y0),0,65535,0);
730 line(cx(c),cy(b),cx(x),cy(y1),0,21845,0);
740 c=x;a=y0;b=y1;
750 }
760 fc=0;affmenu();
770}
780 affmenu(){gotoxy(0,1);printf("f%d\n<> f0/f1\nM Marque\nZ Zoom\nX Resol.",fc);}