#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#include "gnuplot_i.h"

#define STUETZSTELLENANZAHL    100

double Expo(double x)
{
	double ergebnis=1.0;
	int zaehler=17;
  
	for(zaehler=17; zaehler>0; zaehler--)
		ergebnis=ergebnis*x/(double)(zaehler)+1.0;
	
	return(ergebnis);
  
}

/* --------------------------------*/

int main(void)
{
     /*  This software uses the gnuplot_i library written by
     N.Devillard <ndevilla@free.fr>
     If you are using gnuplot_i for a web-based
     application, you can also add a link to the gnuplot home
     page:

        http://ndevilla.free.fr/gnuplot/ */
     
	gnuplot_ctrl        *bild;
	double              x[(STUETZSTELLENANZAHL+1)] ;
	double              exposelbst[(STUETZSTELLENANZAHL+1)] ;
	double              expostandard[(STUETZSTELLENANZAHL+1)] ;
	double untergrenze, obergrenze, schrittweite;
	int i=0;
     
	bild = gnuplot_init();
 
	printf("Dieses Programm visualisiert die selbstgeschriebene Exponentialfunktion auf einem von Ihnen\
angegebenen Bereich.\nGeben Sie bitte die linke Grenze dieses Bereichs ein: "); 
 
	scanf("%lf",&untergrenze);
     
	printf("Geben Sie nun bitte die rechte Grenze dieses Bereichs ein: "); 
 
	scanf("%lf",&obergrenze);
     
	schrittweite=(obergrenze-untergrenze)/(double)(STUETZSTELLENANZAHL);
     
 
	for(i=0; i<=STUETZSTELLENANZAHL; i++)
	{
		x[i]=untergrenze+(double)(i)*schrittweite;
		exposelbst[i]=Expo(x[i]);
		expostandard[i]=exp(x[i]);
	}
     
	printf("Visualisierung Ihrer selbstgeschriebenen Exponentialfunktion.\n\
Wenn Sie mit der implementierten Exponentialfunktion vergleichen wollen, druecken Sie bitte return.\n");
     
	gnuplot_resetplot(bild);
	gnuplot_setstyle(bild, "points") ;
	gnuplot_plot_xy(bild, x, exposelbst, (STUETZSTELLENANZAHL+1), "selbstgeschriebene Exponentialfunktion");
     
	getchar();getchar();
     
	gnuplot_plot_xy(bild, x, expostandard, (STUETZSTELLENANZAHL+1), "implemetierte Exponentialfunktion");
     
	printf("Wenn Sie genug gesehen haben, druecken Sie bitte return.\n");
     
	getchar();
     
	gnuplot_close(bild);
 
	return(0);
  
}
