Newsgroup: it.comp.lang.visual-basic
Titolo: Parser e funzioni matematiche

Io vorrei realizzare un programma, in visual basic,  di funzioni matematiche
che ha lo scopo di fare i grafici di funzioni, risolvere ed
equazioni. Come si fà a fare un programma in modo che
possa valutare la funzione a partire da una casella di testo
o da un inputbox, al limite su quali libri posso trovare
la soluzione al mio problema? Cosa è un parser per funzioni matematiche?
Grazie Alberto

Un parser č un analizzatore sintattico : data una frase restituisce se
quest'ultima appartiene o meno ad un  dato linguaggio
esempio :
" 3+89*(5+6)" appartiene al linguaggio matematico  "3*6++4" no!!!
un'altra cosa poi č associare al riconoscimento della frase delle azioni da
far eseguire...ma questa č un'altra storia molto molto OT
esempio di generatore di parser : byson ...
Antonio

 ha scritto nel messaggio
news:8o9mhb$7l8$1...@fe2.cs.interbusiness.it...


 ha scritto nel messaggio news:Z8Qp5.138783$dF5.2...@news.infostrada.it...

Potresti usare quello 'gratis' gia' disponibile con VB...
Prova a creare una nuova applicazione con un form, poi fai
cut & paste di queste righe nell'evento Form_Load.   Non dimenticare
di aggiungere nei riferimenti del project il DAO, una versione qualsiasi.
Nell'esempio si fa riferimento ad un DB: non ha importanza a quale DB
e tabella si fa riferimento (basta che esista), tanto funziona lo stesso.
Stiamo sfruttando il parser dell'engine del DAO.
--------------------------------------------------------------------------------
Private Sub Form_Load()
Dim db As Database
Dim ss As Recordset
Dim calcolo As String
  calcolo = "(12+2*(23-4))/(6*(23+5-3))+sqr(12)-sin(12)"
  Set db = OpenDatabase("biblio.mdb")
  Set ss = db.OpenRecordset("select " & calcolo & " from titles", dbOpenSnapshot)
  If Not ss.EOF Then
    MsgBox "Il risultato di " & calcolo & " e' " & ss.Fields(0)
  End If
  ss.Close
  db.Close
End Sub
------------------------------------------------------------------------------
--
Frogman
indirizzo e-mail corretto: 
be...@reboot.to
--------------------------------------------------------
Abito in un paese cosi' piccolo che non abbiamo nemmeno
lo scemo del villaggio.  Dobbiamo fare a turno.
--------------------------------------------------------

   Set ss = db.OpenRecordset("select " & calcolo & " from
titles", dbOpenSnapshot)
[...]
Carina, questa:) E` farina del tuo sacco o l'hai vista da
qualche parte? Nel primo caso complimenti. Nel secondo, ti
ricordi la fonte?
Credo pero` che sia comunque conveniente usare la funzione
"Eval" di "Microsoft Script Control", tranne forse in casi
particolari. Che ne dici?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X

 particolari. Che ne dici?
Personalmente non uso ne' questa ne' quella.  Come ho avuto
modo di esprimere in altre occasioni, sono un accanitissimo
sostenitore del 'faidate', quindi in passato ho usato un parser
che mi ero fatto io nel 1985 in Basic 2.0 e rifatto nel 1990 in
QBasic 7.1 (in seguito non ne ho avuto piu' bisogno).
L'ultima versione utilizzava un metodo ricorsivo per risolvere
le parentesi e consentiva anche l'uso di variabili.
Prima o poi ne faro' il porting su VB 6.
Ciao
--
Frogman
indirizzo e-mail corretto: 
be...@reboot.to
--------------------------------------------------------
Non fate i bambini in provetta.
Fateli nella zuppiera che ce ne stanno di piu'.
--------------------------------------------------------



 --------------------------------------------------------


 a partire da una funzione y=sin(x).
Fai un cut & paste del codice qui sotto, e inseriscilo in un nuovo
progetto di prova.   Poi fai click sul form.
E' sufficiente che tu spezzi la tua funzione espressa in una stringa
in modo da 'eliminare' il nome della variabile.   Nel tuo loop dovrai
ricostruirla sostituendone il valore.
Nell'esempio qui sotto, la funzione:
sin(x)     diventa:
"sin("    e poi      ")"
nel loop dell'esempio viene ricostruita una stringa che ad ogni
iterazione cambia contenuto:
sin(0.01)
sin(0.02)
ecc.
e spedita al motore del DAO.
Attento che il parser non accetta le virgole per i decimali, cosi'
devi chiamare una funzione che sostituisca le virgole coi punti.
La velocita' del parser e' davvero pietosa, e di sicuro non potrai
aspettarti grandi prestazioni.    Ma potrai inserire le chiamate al
parser DAO entro una Sub.     Potrai cosi' procedere nella
realizzazione e debug del tuo programma.     Quando lo avrai
terminato, se lo riterrai, potrai sostituire la Sub parser con
un'altra piu' rapida ed efficiente.     Questa almeno non ti costa
nulla e puo' andare per le prime prove....
Se hai dubbi, scrivi pure.....
---------------------------------------------------------------------
Private Sub Form_click()
Dim db As Database
Dim ss As Recordset
Dim formula1 As String
Dim formula2 As String
Dim calcolo As String
Dim XPos As Single
Dim YPos As Single
Dim X As Single
Dim Y As Single
Set db = OpenDatabase("biblio.mdb")
formula1 = "sin("
formula2 = ")"
ScaleMode = 3
DrawWidth = 2
X = 0
Do
  X = X + 0.01
  calcolo = formula1 + Format(X) + formula2
  RimuoviVirgola calcolo
  Set ss = db.OpenRecordset("select " & calcolo _
                & " from titles", dbOpenSnapshot)
  If Not ss.EOF Then
    Y = ss.Fields(0)
    XPos = X * ScaleWidth / 20
    YPos = (1 - Y) * ScaleHeight \ 2
    PSet (XPos, YPos), 0
  End If
  DoEvents
Loop While X <= 20
ss.Close
db.Close
End Sub
Private Sub RimuoviVirgola(st As String)
Dim j As Integer
Do
  j = InStr(st, ",")
  If j > 0 Then st = Left(st, j - 1) + "." + Mid(st, j + 1)
Loop While j > 0
End Sub
------------------------------------------------------------------------
Ciao
--
Frogman
indirizzo e-mail corretto: 
be...@reboot.to
--------------------------------------------------------


 Prima o poi ne faro' il porting su VB 6.
L'attendiamo (in)trepidi.



Non manca molto....  Sto rifacendo un applicativo in cui avro'
necessita' di lasciar decidere all'utente i metodi di ripartizione
di alcuni costi, quindi dovro' rivedere quella routine.  Appena
pronta vedro' di renderla pubblica.
