PDA

View Full Version : [C] Equazione matematica in input


noodles
17-03-2005, 17:56
Salve, sto realizzando un programma che necessita pero' l'inserimento in input di una funzione matematica; il programma dovrà essere in grado di utilizzare tale funzione.


Avevo pensato di includere un file esterno *.h contenente una sola funzione che preso in input un valore x restituisce f(x). Quindi il 1° programma leggeva la funzione inserita dall'utente come stringa, poi apriva il file *.h e scriveva ad esempio:

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

float funz(int x)
{
return x*x*x-3*x+;
}

Poi si faceva partire il 2° programma che includeva il suddetto file *.h e faceva il suo sporco lavoro con la funzione inserita dall'utente.

Naturalmente (per voi), questo metodo rozzissimo non funziona, dovrei ogni volta ricompilare il 2° programma, visto che una volta incluso il *.h, quest'ultimo viene incorporato nell'eseguibile.


Quindi, come posso risolvere questo (forse banale) problema?


Perdonate la profonda ignoranza:(


Grazie

anx721
17-03-2005, 22:00
ma la funzione scelta dall'utente varia in un insieme prestabilito e in che formato viene inserita, cioè tramite un identificatore o sottofroma di espressione matematica da itnerpretare?

noodles
18-03-2005, 17:45
la mia idea era quella di mettere una legenda all'inizio con l'elenco delle funzioni matematiche incluse nel math.h. Quindi l'utente inserirà la funzione utilizzando proprio quelle.
Se ad esempio deve inserire 3x^3 scriverà:
3*pow(x,3)

anx721
18-03-2005, 20:15
in questo caso devi esegurie il parsing delle espressioni, prima suddividendo il flusso di carattere in elementi fonamentali e poi ricostruendo la struttura della formula sottoforma di un albero, tenendo conto delle precedemze degli operatori e delle parentesi. Infine visitando l'albero puoi stabilire il valore dell'espressione per ogni valore di x

71104
19-03-2005, 01:12
è un problema complicato ;)

noodles
19-03-2005, 18:34
Mi ero reso conto che era un problema non semplice, appunto avevo pensato allo stratagemma della scrittura del file esterno...


Comunque grazie a tutti

noodles
28-03-2005, 09:40
Ho provato su linux ed ho fatto così:



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

void scrivi(void);
char vfunz[100],c;

int main()
{



printf("Inserisci la funzione da analizzare: ");
while ( ((c=getchar())!='\n'))
vfunz[i++]=c;
vfunz[i]='\0';
scrivi();
if (fork())
wait(0);
else
execlp("gcc", "gcc","-lm", "main.c", 0);

execlp("a.out","a.out");
}


void scrivi(void)
{
FILE *out;
char intro[]="#include <stdio.h>\n#include <math.h>\nfloat funz(float x){\nfloat ris;\nris=";
char end[]=";\nreturn ris;\n}\n";
out=fopen("fun.h","w");
fprintf(out,"%s", intro);
fprintf(out,"%s", vfunz);
fprintf(out,"%s", end);
fclose(out);
}