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

#include "gnuplot_i.h"

#define STUETZSTELLENANZAHL    100


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

double Wurzel(double c)
{
	double xneu=c, xalt, schranke=1.0;

	if(xneu==0.0)
		return(0.0);
  
	do
	{
		xalt=xneu;
		xneu=0.5*xalt+0.5*c/xalt;
		if(xalt>1)
			schranke=xalt;
		else
			schranke=1.0;
    
	} while(fabs(xneu-xalt)>(1e-15*schranke));
  
	return(xneu);
  
}


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

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              wurzelselbst[(STUETZSTELLENANZAHL+1)] ;
	double              wurzelstandard[(STUETZSTELLENANZAHL+1)] ;
	double untergrenze, obergrenze, schrittweite;
	int i=0;
     
	bild = gnuplot_init();
 
	printf("Dieses Programm visualisiert die selbstgeschriebene Wurzelfunktion auf einem von Ihnen\
angegebenen Bereich.\nGeben Sie bitte die linke Grenze dieses Bereichs ein: "); 
 
	scanf("%lf",&untergrenze);
     
	if(untergrenze<0)
		untergrenze=0;
     
	printf("Geben Sie nun bitte die rechte Grenze dieses Bereichs ein: "); 
 
	scanf("%lf",&obergrenze);
     
	if(obergrenze<0)
		obergrenze=0;    
     
	schrittweite=(obergrenze-untergrenze)/(double)(STUETZSTELLENANZAHL);
     
 
	for(i=0; i<=STUETZSTELLENANZAHL; i++)
	{
		x[i]=untergrenze+(double)(i)*schrittweite;
		wurzelselbst[i]=Wurzel(x[i]);
		wurzelstandard[i]=sqrt(x[i]);
	}
     
	printf("Visualisierung Ihrer selbstgeschriebenen Wurzelfunktion.\n\
Wenn Sie mit der implementierten Wurzelfunktion vergleichen wollen, druecken Sie bitte return.\n");
     
	gnuplot_resetplot(bild);
	gnuplot_setstyle(bild, "points") ;
	gnuplot_plot_xy(bild, x, wurzelselbst, (STUETZSTELLENANZAHL+1), "selbstgeschriebene Wurzelfunktion");
     
	getchar();getchar();
     
	gnuplot_plot_xy(bild, x, wurzelstandard, (STUETZSTELLENANZAHL+1), "implemetierte Wurzelfunktion");
     
	printf("Wenn Sie genug gesehen haben, druecken Sie bitte return.\n");
     
	getchar();
     
	gnuplot_close(bild);
 
	return(0);
  
}

