Integrazione Equazioni inserite da tastiera in forma funzionale

di il
9 risposte

Integrazione Equazioni inserite da tastiera in forma funzionale

Salve a tutti,
avevo un dubbio. Devo scrivere un programma in Cche prese in input una funzione F(x) in forma funzionale (ES ——> pow(x,2) + ecc
integri la funzione. Per quanto riguarda l’integrazione non ho alcun problema. Quello che volevo fare io è
utilizzare lo scanf per salvare la stringa inserita dall’utente e salvarla in una stringa.

Volevo poi attribuire creare una variabile equazione, e poter direttamente “far interpretare l’equazione inserita in modo da calcolarne il valore” per esempio

char f[]
printf(“Inserisci L’equazione”);
scanf(“%s” , f);

l’utente inserisce ad esempio pow(x,2) che viene salvato come stringa in f.
double x=3.0

double eq = atof(f);

vorrei che in qualche maniera venisse automaticamente attribuita ad eq proprio l’equazione inserita dall’utente ovvero pow(x,2), che diventerebbe pow(3,2) avendo dichiarato una variabile x con valore 3. Si può fare in qualche manierà??

Ringrazio tutti anticipatamente!!

9 Risposte

  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Scrivere un parser è una cosa estremamente lunga, ancora di più in C o C++

    Cercane uno già fatto.
    Ad esempio questo è uno dei primi risultati su google
    http://warp.povusers.org/FunctionParser
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Grazie mille, avevo iniziato a crearne uno io. Ma in C è veramente una cosa lunghissima. Poi su internet cercando non avevo trovato molto. Grazie mille.
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Scusate nuovamente il disturbo, mi sono accorto purtroppo che il parser mandato e per C++, mentre a me serve per C. Sto provando a costruirne uno mio, e quello che ho fatto finora è dividere in token, secondo i segni + - / ecc ecc, l’equazione inserita dall’utente; confrontare ogni singolo token con le funzioni matematiche sin, cos ecc ecc e dare il risultante corrispondente. Dopodichè sommare il risultato di tutti i token su uno specifico valore della variabile x. Ma ho letto che molti creano una specie di albero ricorsivo in cui analizzano carattere per carattere, e utilizzano poi i puntatori per poi poter attribuire il valore del carattere alla variabile che dovrebbe contenere l’equazione finale. Sono un pò perplesso, e non riesco a capire come facciano ad utilizzare i puntatori in tale maniera, qualcuno saprebbe aiutarmi?
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Cerca Function Parser in C allora, oppure prendi il sorgente in C++ e adattalo al C. Che compilatore stai usando?
    È lunga la teoria dei parser, a questo punto scaricati una dispensa, mica si può spiegare tutto in un thread...
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Ciao, scusa mi sarò espresso male. Non volevo spiegato tutto il funzionamento di parser, volevo sapere se è possibile usare i puntatori in modo tale da poterli fare interpretare all’interno di una variabile. Siccome sicuramente mi sarò espresso male, faccio un esempio.

    Ho dichiarato e inizializzato una variabile x = 10;
    Dopodichè ho una variabile char c = ‘x’

    E’ possibile fare un’operazione del genere attraverso puntatori: int eq = parse(c), in modo che all’interno di eq venga salvato il valore 10?

    Ovviamente se è troppo lunga la spiegazione non pretendo che me la spieghiate. Cercherò comunque delle dispense, visto che mi interessa parecchio l’argomento. Anzi pongo anche la domanda avete dispense o testi sull’argomento da consigliarmi?
    Grazie in anticipo
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Basta dichiarare la funzione
    int parse(char c);
    Che intendi per "attraverso puntatori"?
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    Il parser ti serve per risolvere un problema, oppure ti interessa scrivere un tuo parser a scopo didattico?
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    NON E' una cosa lunghissima, anzi, in generale, per cose semplici, sono una ventina di righe di codice (o forse qualcosa in piu').

    Un 'parser ricorsivo discendente' e' 'abbastanza facile' da implementare.

    MA

    per sapere come implementarlo bisogna STUDIARE automi a stati finiti e grammatiche

    NON SI USA la manipolazione di stringhe

    Appunto, si usa un AST (Abstract Syntax Tree) che contiene l'espressione smontata nei suoi componenti, uno stack per la valutazione, ed un dizionario con la definizione di variabili e funzioni.

    Lascia stare il concetto di 'puntatore'.
    Questo LO DEVI AVER GIÀ DIGERITO!

    Anzi, devi aver digerito non solo i puntatori, ma anche strutture dati piu' complesse come liste, alberi, dizionari, stack, code, ecc...

    E' come voler costruire un palazzo ragionando in termini di 'mattoni': NON TI PASSA PIU'
  • Re: Integrazione Equazioni inserite da tastiera in forma funzionale

    migliorabile ha scritto:


    Un 'parser ricorsivo discendente' e' 'abbastanza facile' da implementare.

    NON SI USA la manipolazione di stringhe

    Appunto, si usa un AST (Abstract Syntax Tree) che contiene l'espressione smontata nei suoi componenti, uno stack per la valutazione, ed un dizionario con la definizione di variabili e funzioni.
    OK usare AST, una volta che ho due alberi uno contenente i valori e uno contenente gli operatori la manipolazione delle stringhe non mi serve.
    Non mi viene in mente un sistema per smontare la stringa originale contenente l'espressione matematica, senza manipolare la stringa...
    Mi dai un orientamento per approfondire?
Devi accedere o registrarti per scrivere nel forum
9 risposte