[c]utilizzare gnuplot [RISOLTO]

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio da Zoff »

trovato:

Codice: Seleziona tutto

echo 'plot x**2' | gnuplot -persist
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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?  >:(
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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$ 
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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"); 
}

:)
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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"); 
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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  :)
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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...
Ultima modifica di Zoff il domenica 18 gennaio 2009, 16:54, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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?
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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 è...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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);
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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);
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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.  :)
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio 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);
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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.

UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [c]utilizzare gnuplot

Messaggio da Zoff »

errore mio manca un cast...

Codice: Seleziona tutto

float f = 1/(float)n;
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [c]utilizzare gnuplot

Messaggio 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.
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti