Uso delle funzioni di math.h direttamente da terminale

di il
12 risposte

Uso delle funzioni di math.h direttamente da terminale

Salve, sono un programmatore alle prime armi, e vorrei chiedere se potreste aiutarmi con una cosa che mi chiedo da un annetto. Praticamente, vorrei chiedere se esiste un modo per fare una cosa del genere:

*esecuzione del file .c da terminale* ./nome_exe_file

Inizio programma:

(input) Inserire numero: sqrt(2) //o log(3), cos(1).. insomma, le funzioni di math.h
(output) Il numero inserito è: 1.414213

Fine programma.

ATTENZIONE: non sto chiedendo come usare la funzione sqrt(..), log(..) ecc... all'interno del codice, ma se esiste, sostanzialmente, un modo per passare direttamente dalla stringhe "sqrt(2)", "log(3)"... ai risultati float della stessa.
Ho già provato a convertire la stringa "sqrt(2)" in un float attraverso la funzione atof(..) ma, come già prevedevo, con risultati negativi. Esiste un modo per "usare" le funzioni di una libreria direttamente in questo modo ?

Grazie a chi mi vorrà aiutare in qualche modo, e visto che sono tutti al cinema, "Tutto quanto procede come avevo previsto." (tranne questa cosa del programma <.<)

12 Risposte

  • Re: Uso delle funzioni di math.h direttamente da terminale

    Non è cosi semplice, devi scrivere un parser di espressioni in cui implementerai la sqrt e tutte le funzioni che desideri.
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Uno dei tanti in c++, molto completo

    https://fastmathparser.codeplex.com

    Con già detto, non è affatto banale
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Quindi l'unico modo che avrei di procedere, sarebbe creare funzioni apposite per riconoscere le parole chiave di radice quadrata, logaritmo, coseno, seno ... direttamente da terminale ?
    N.B.: Mi sono dimenticato nel messaggio precedente, ma sto parlando di linguaggio C.
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Sì ... utilizza un parser (intendo uno già scritto, non vale la pena riscriverne un altro, anche perché non è semplice)
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Se vuoi solo riconoscere una "chiamata a funzione" puoi scrivere una semplice routine che con strstr() cerca le possibili parole chiavi (es. "log(" , "cos(", "sqrt(" ...) e individuata la parola chiave estrae il valore float che si trova dopo la parentesi (semplicemente con un atof()).
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Certo, ma poi in questo modo non si calcolerebbe la radice, il logaritmo o il coseno, ma prenderebbe solo l'argomento.

    Esempio:
    Numero: sqrt(2)
    Risultato: 2.000000 (che è errato, in quanto non è il risultato della radice quadrata di 2)

    Quindi si dovrebbe creare un switch abbastanza ampio, nel quale calcolare attraverso le funzioni della libreria math.h ogni parola chiave data in input, o sbaglio ?
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Cosa non ti è chiaro delle risposte che ti abbiamo dato sul "parser"?

    Hai fatto una ricerca? Hai aperto il link proposto?

    La risposta è sempre quella, anche se fai la domanda mille volte ... risolvi con un parser di espressioni aritmetiche, che non è facile scrivere ma di cui trovi tanti esempi già pronti.
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Stavo solo rispondendo ad un altro utente del forum riguardo a ciò che aveva proposto (che non riguardava il parsing). A proposito, mi sto informando e lo trovo molto utile, quindi grazie
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Solo per chiarire quanto ho scritto in precedenza:
    - in input ti fai caricare una stringa (es. "sqrt(2)")
    - sulla stringa provi a cercare le varie parole chiave con strstr() (es. "log(", "cos(", "sqrt(" ...) finchè non trovi una corrispondenza che ti tieni in una variabile (chiamiamola idop) che potrebbe valere, sempre per esempio, 0 per non trovato, 1 per log(), 2 per cos(), 3 per sqrt())
    - se idop==0 esci
    - a seconda di idop avanzi nella stringa (4 caratteri per log e cos, 5 caratteri per sqrt) e tieni traccia della posizione con un puntatore a char
    - leggi con atof() il valore float puntato dal puntatore determinato al punto precedente e ti salvi il valore in una variabile float (chiamiamola val)
    - fai uno switch: a seconda di idop applichi log(val) se idop==1, cos(val) se idop==2, sqrt(val) se idop==3
  • Re: Uso delle funzioni di math.h direttamente da terminale

    La questione è che devi tener conto delle precedenze degli operatori e delle parentesi.

    Alla fine è necessario un approccio ricorsivo e un parser è il risultato che ottieni.
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Forse a fra95ncy basta una cosa semplice che "risolva" solo una chiamata a funzione nel formato operazione(valore)
  • Re: Uso delle funzioni di math.h direttamente da terminale

    Deve sempre valutare il bilanciamento delle parentesi e l'argomento delle funzioni. Inoltre l'appetito vien mangiando e se non imposta correttamente il codice sin dall'inizio non potrà andare avanti facilmente.
Devi accedere o registrarti per scrivere nel forum
12 risposte