|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2003
Città: Umbria
Messaggi: 220
|
[C] Equazione matematica in input
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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
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?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2003
Città: Umbria
Messaggi: 220
|
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) Ultima modifica di noodles : 18-03-2005 alle 17:52. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
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
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
è un problema complicato
![]() |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2003
Città: Umbria
Messaggi: 220
|
Mi ero reso conto che era un problema non semplice, appunto avevo pensato allo stratagemma della scrittura del file esterno...
Comunque grazie a tutti |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: May 2003
Città: Umbria
Messaggi: 220
|
Ho provato su linux ed ho fatto così:
Codice:
#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); } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:08.