Ciao Zoff,
a quel punto non sapevo proprio perchè avevo quegli strani errori e avevo pensato di utilizzare questo:
http://ndevilla.free.fr/gnuplot/gnuplot_i/index.html anchese se mi pareva un po' complicato da usare >:(
Però oggi ho pensato: e se faccio il casting a float della x (dichiarata e usata come long double) nel comando passato a gnuplot forse riesco a risolvere il problema:
Codice: Seleziona tutto
sprintf(cmd,"echo \"plot[(%f)-10:(%f)+10]x**(%f)\" | gnuplot -persist",(float)x,(float)x,f);
e infatti come volevasi dimostrare riesco a disegnare la funzione.
Il sorgente del programma:
Codice: Seleziona tutto
#include <stdio.h>
#include <math.h>
#define ERR 0.00001
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 qualunque numero reale 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==0));
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 (n%2==0 && x<0) printf("\nil valore inserito non è valido poichè non fa parte dell'insieme di definizione della radice\n");
else if (n==1) printf("\nla radice prima di %Lf è %Lf\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 if (x<-1) {
a=x; b=-1;
}
else {
a=-1; 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 cmd[100];
float f = 1/(float)n;
sprintf(cmd,"echo \"plot[(%f)-10:(%f)+10]x**(%f)\" | gnuplot -persist",(float)x,(float)x,f);
system(cmd);
}
Ora però rimane un unico problema. Non mi viene disegnata la parte negativa del grafico quando digito un numero negativo con radice a indice dispari (per l'indice pari ho già un messaggio che mi dice che non fa parte dell'insieme di definizione).
Codice: Seleziona tutto
cristiancozzolino@ubuntu:~/programmazione$ ./radice
// il programma calcola la radice
// di un qualunque numero reale scelto dall'utente
// con indice intero immesso da tastiera
Inserire un indice valido per la radice(un numero intero da 1 a 10): 3
Inserire un valore reale di cui calcolare la radice: -5
la radice cubica di -5 è -1.70998
cristiancozzolino@ubuntu:~/programmazione$
Allego uno screenshot:
