Pagina 2 di 5

Re: [c]utilizzare gnuplot

Inviato: sabato 17 gennaio 2009, 19:21
da Zoff
trovato:

Codice: Seleziona tutto

echo 'plot x**2' | gnuplot -persist

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 9:29
da cristian_c
Ti ringrazio tantissimo per i suggerimenti su come realizzare la procedura  :D

Ho modificato la funzione così:

Codice: Seleziona tutto

system("echo 'plot x**(1/n)' | gnuplot -persist"); 
ma quando eseguo con ./radice ottengo:

Codice: Seleziona tutto

line 0: undefined variable: n
Come si fa a passare il parametro n alla funzione?  >:(

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 10:15
da Zoff
cristian_c ha scritto: Ti ringrazio tantissimo per i suggerimenti su come realizzare la procedura  :D

Ho modificato la funzione così:

Codice: Seleziona tutto

system("echo 'plot x**(1/n)' | gnuplot -persist"); 
ma quando eseguo con ./radice ottengo:

Codice: Seleziona tutto

line 0: undefined variable: n
Come si fa a passare il parametro n alla funzione?  >:(
Se n è una variabile bash metti il dollaro davanti: $n

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 11:16
da cristian_c
Se n è una variabile bash metti il dollaro davanti: $n
non funziona...  ::) In esecuzione ricevo:

Codice: Seleziona tutto

gnuplot> plot x**(1/$n)
                     ^
         line 0: Column number expected

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 13:29
da Zoff
cristian_c ha scritto:
Se n è una variabile bash metti il dollaro davanti: $n
non funziona...  ::) In esecuzione ricevo:

Codice: Seleziona tutto

gnuplot> plot x**(1/$n)
                     ^
         line 0: Column number expected
togli gli apici singoli e mettili doppi altrimenti considera il nome della variabile come stringa...
Ad esempio:

Codice: Seleziona tutto

#! /bin/bash

n=5

echo "plot x**(1/$n)" | gnuplot -persist

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 15:45
da cristian_c
in compilazione ricevo l'errore:

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ gcc radice.c -o radice -lm
radice.c: In function ‘main’:
radice.c:49: error: expected ‘)’ before ‘plot’
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:22
da Zoff
cristian_c ha scritto: in compilazione ricevo l'errore:

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ gcc radice.c -o radice -lm
radice.c: In function ‘main’:
radice.c:49: error: expected ‘)’ before ‘plot’
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 
Devi aver fatto qualche errore con gli apici o le parentesi... Ricontrolla o posta qui il codice...

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:40
da cristian_c
ecco il codice completo:

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"};
 float a,b,m,x;
 float fm,pot;
 int n,i,res;
 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("%f",&x);
     while(getc(stdin)!='\n');
 } while(res==0);
 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 %g è %g\n",x,x);
      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 %g è %g\n\n",indice[n-2],x,m);                     
           }
 if (1 <= n < 11) 
     system("echo "plot x**(1/$n)" | gnuplot -persist"); 
}

:)

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:43
da Zoff
Cambia:

Codice: Seleziona tutto

     system("echo "plot x**(1/$n)" | gnuplot -persist"); 
in:

Codice: Seleziona tutto

     system("echo \"plot x**(1/$n)\" | gnuplot -persist"); 

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:48
da cristian_c
Zoff ha scritto: Cambia:

Codice: Seleziona tutto

     system("echo "plot x**(1/$n)" | gnuplot -persist"); 
in:

Codice: Seleziona tutto

     system("echo "plot x**(1/$n)" | gnuplot -persist"); 
già, scusami, non ci avevo pensato!  :-[

Ok, ora l'errore in compilazione si è risolto, ma in esecuzione ottengo:

Codice: Seleziona tutto

gnuplot> plot x**(1/)
                    ^
         line 0: invalid expression 
grazie ancora per la pazienza  :)

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:50
da Zoff
cristian_c ha scritto:
Zoff ha scritto: Cambia:

Codice: Seleziona tutto

     system("echo "plot x**(1/$n)" | gnuplot -persist"); 
in:

Codice: Seleziona tutto

     system("echo "plot x**(1/$n)" | gnuplot -persist"); 
già, scusami, non ci avevo pensato!  :-[

Ok, ora l'errore in compilazione si è risolto, ma in esecuzione ottengo:

Codice: Seleziona tutto

gnuplot> plot x**(1/)
                    ^
         line 0: invalid expression 
grazie ancora per la pazienza  :)
Ovvio... Stai usando C mica bash -.-
Se la variabile n è una variabile C:

Codice: Seleziona tutto

system("echo "plot x**(1/"+n+")" | gnuplot -persist");
Meglio se studi un po' piu' il linguaggio prima di andare avanti...

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:54
da cristian_c
Se la variabile n p una variabile C:
non ho capito bene, puoi rispiegarmelo?  :-[
Meglio se studi un po' piu' il linguaggio prima di andare avanti...
ti riferisci al linguaggio bash?

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:55
da Zoff
cristian_c ha scritto:
Se la variabile n p una variabile C:
non ho capito bene, puoi rispiegarmelo?  :-[
Meglio se studi un po' piu' il linguaggio prima di andare avanti...
ti riferisci al linguaggio bash?
No mi riferisco al C... Ho corretto la p in realtà era una è...

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 16:58
da cristian_c

Codice: Seleziona tutto

system("echo \"plot x**(1/"+n+")\" | gnuplot -persist");
forse ho capito: basta modificare l'istruzione così:

Codice: Seleziona tutto

system("echo \"plot x**(1/%d)\" | gnuplot -persist",n);

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 17:04
da Zoff
cristian_c ha scritto:

Codice: Seleziona tutto

system("echo "plot x**(1/"+n+")" | gnuplot -persist");
forse ho capito: basta modificare l'istruzione così:

Codice: Seleziona tutto

system("echo "plot x**(1/%d)" | gnuplot -persist",n);
Scusa errore mio... Non sono abituato al C...

Devi fare così:

Codice: Seleziona tutto

int n = 5;
	char comando[100];
	sprintf(comando,"echo "plot x**(1/%d)" | gnuplot -persist",n);
	system(comando);

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 17:18
da cristian_c
(good)
grazie ai tuoi consigli finalmente ci sono riuscito!

Se eseguo il programma si apre alla fine anche gnuplot. Poi però, appena clicco da qualunque parte sul desktop (insomma qualunque azione svolga) la finestra di gnuplot scompare  :( e appare un messaggio nell'output:

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~$ cd programmazione/
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ gcc radice.c -o radice -lm
cristiancozzolino@cristiancozzolino-laptop:~/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: 45

la radice cubica di 45 è 3.55689

Warning: empty y range [1:1], adjusting to [0.99:1.01]
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 
** (<unknown>:7932): WARNING **: Failed to send buffer
<unknown>: Fatal IO error 11 (Risorsa temporaneamente non disponibile) on X server :0.0.
...tralasciando per ora il fatto che non viene disegnata la radice cubica, ma ua retta orizzontale

Comunque grazie ancora tantissimo per il supporto! È stato fatto un passo in avanti.
Speriamo di poter raggiungere degli sviluppi, magari vedo poi un po' cosa fare.  :)

Re: [c]utilizzare gnuplot

Inviato: domenica 18 gennaio 2009, 17:27
da Zoff
cristian_c ha scritto: Comunque grazie ancora tantissimo per il supporto! È stato fatto un passo in avanti.
Speriamo di poter raggiungere degli sviluppi, magari vedo poi un po' cosa fare.  :)
anziché mettere 1/n prova a calcolarlo e poi passarlo:

Codice: Seleziona tutto

int n = 5;
float f = 1/n;
char comando[100];
sprintf(comando,"echo "plot x**(%f)" | gnuplot -persist",f);
system(comando);

Re: [c]utilizzare gnuplot

Inviato: lunedì 19 gennaio 2009, 15:22
da cristian_c
ciao  ;)
purtroppo anche così si verificano gli stessi problemi di prima  :-\

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~$ cd programmazione/
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ gcc radice.c -o radice -lm
cristiancozzolino@cristiancozzolino-laptop:~/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: 45

la radice cubica di 45 è 3.55689

Warning: empty y range [1:1], adjusting to [0.99:1.01]
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 
** (<unknown>:8115): WARNING **: Failed to send buffer
<unknown>: Fatal IO error 11 (Risorsa temporaneamente non disponibile) on X server :0.0.


Re: [c]utilizzare gnuplot

Inviato: lunedì 19 gennaio 2009, 15:34
da Zoff
errore mio manca un cast...

Codice: Seleziona tutto

float f = 1/(float)n;

Re: [c]utilizzare gnuplot

Inviato: lunedì 19 gennaio 2009, 16:18
da cristian_c
(good) Ora finalmente la radice cubica viene disegnata! Grazie!  :D

Ora rimane il problema che la finestra di gnuplot scompare appena si fa qualsiasi cosa con i mouse (come fare clic in qualsiasi punto dello schermo del desktop):

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~$ cd programmazione/
cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ gcc radice.c -o radice -lm
cristiancozzolino@cristiancozzolino-laptop:~/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: 45

la radice cubica di 45 è 3.55689

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 
** (<unknown>:8248): WARNING **: Failed to send buffer
<unknown>: Fatal IO error 11 (Risorsa temporaneamente non disponibile) on X server :0.0.