Sono riuscito a completare il programma inserendo anche la legenda (ovviamente occorre prima installare tex) (b2b)
Il sorgente finale del programma è questo:
Codice: Seleziona tutto
#include <stdio.h>
#include <math.h>
#define ERR 0.00001
int ordine(double x)
{
int n=0;
while (floor(x)!=0) {
x=x/10;
n++;
}
return n;
}
main()
{
char *indice[]={"quadrata","cubica","quarta","quinta","sesta","settima","ottava","nona","decima"};
long double a,b,m,x;
long double fm,pot;
int n,i,res;
char x_str[50];
printf("\n// il programma calcola la radice\n// di un numero reale positivo scelto dall'utente\n// con indice intero immesso da tastiera\n\n");
do {
printf("Inserire un indice valido per la radice(un numero intero da 1 a 10): ");
res=scanf("%d",&n);
while(getc(stdin)!='\n');
} while((n<1 || n>10) || (res!=1));
do {
printf("Inserire un valore reale di cui calcolare la radice: ");
res=scanf("%s",x_str);
while(getc(stdin)!='\n');
} while(res==0);
sscanf(x_str,"%Lf",&x);
if (x>=0) {
if (n==1) printf("\nla radice prima di %s è %s\n",x_str,x_str);
else if (x==1) printf("\nla radice %s di 1 è 1\n\n",indice[n-2]);
else {
if (x>1) {
a=1; b=x;
}
else {
a=x; b=1;
}
do {
m=(a+b)/2;
pot=m;
for(i=1;i<n;i++) pot*=m;
fm=pot-x;
if (fm!=0) {
if (fm>0) b=m;
else a=m;
}
} while (fabs(fm)>ERR);
printf("\nla radice %s di %s è %Lg\n\n",indice[n-2],x_str,m);
}
char gnuplot[200];
float f = 1/(float)n;
sprintf(gnuplot,"echo \"set terminal epslatex color;set output 'gnuplot.eps';set arrow from %s to %s,%s**%f nohead lt 0 lw 0;set arrow from 0,%s**%f to %s,%s**%f nohead lt 0 lw 0;plot[0:10**%d]x**%f ti '$\\sqrt[%d]{x}$'\" | gnuplot",x_str,x_str,x_str,f,x_str,f,x_str,x_str,f,ordine(x),f,n);
system(gnuplot);
FILE *out = fopen( "main.tex", "w" );
fprintf(out,"\\documentclass{article}\n\\usepackage{graphicx}\n\\pagestyle{empty}\n\\begin{document}\n\\input{gnuplot}\n\\end{document}");
fclose(out);
system("epstopdf gnuplot.eps;pdflatex main.tex;evince main.pdf");
}
else printf("Il numero reale digitato non è positivo.\n\n");
}
In allegato un'immagine del risultato