/* Grafico di funzioni - Esercitaz. in laboratorio 25/2/00 */

#include <stdio.h>
#include <math.h>
#include <graphics.h>
	/* Non ANSI, solo TurboC */

#define COLORE 5

main() {
	float x, x1, x2, deltax, incrementox, y, y1, y2, deltay;
	
	int gdriver = DETECT, /* autorilevazione caratteristiche grafiche */
          gmode;

	int maxx, maxy, n, i;

	printf("Benvenuto al programma per graficare funzioni.\n");
	printf("Inserire intervallo [x1,x2]:\n");

	do {
		printf("x1=");
		scanf("%f",&x1);
		printf("x2=");
		scanf("%f",&x2);
	} while (x1>=x2);
	deltax=x2-x1;

	do {
		printf("y1=");
		scanf("%f",&y1);
		printf("y2=");
		scanf("%f",&y2);
	} while (y1>=y2);
	deltay=y2-y1;

	do {
		printf("Quanti campioni (almeno 2)? ");
		scanf("%d",&n);
	} while(n<2);
	getchar();

	initgraph(&gdriver, &gmode, "C:\\TC\\BGI");

	maxx=getmaxx();
	maxy=getmaxy();

	/* traccio, se visibili, gli assi */
	if((y1<=0)&&(y2>=0)) /* traccio asse X poiché y1<y2 */
		line(0,.5+maxy*y2/deltay,maxx,.5+maxy*y2/deltay);

	if((x1<=0)&&(x2>=0)) /* traccio asse Y poiché x1<x2 */
		line(.5-x1*maxx/deltax,maxy,.5-x1*maxx/deltax,0);

	/* inizia il grafico */
	x=x1;
	incrementox=deltax/(n-1);
	while(x<=x2) {
		y=log(1/x);/* funzione da graficare */
		if((y>=y1)&&(y<=y2)) /* se visibilo, traccio il punto */
			putpixel(.5+maxx*(x-x1)/deltax,.5+maxy*(y2-y)/deltay,COLORE);
		x+=incrementox;
	}

	printf("premi INVIO... ");
	getchar();

	closegraph();

	return 0;
}