Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    1

    [VB6] Sostituzione di funzione matematica all'interno del codice

    Salve a tutti , sono nuovo del Forum ( spero di aver azzeccato la sezione ! ) , ed ho un problema che non sono riuscito a risolvere nonostante ore di estenuante ricerca.
    Ho creato un programma che calcola l'integrale di una funzione, la quale viene riportata all'interno del codice a priori dell'esecuzione del form. Ora il mio problema è : come posso calcolare l'integrale di una funzione che decido a posteriori , senza dover per forza riscrivere una nuova funzione del codice?
    Vorrei che fosse possibile che VB leggesse una data funzione che io inserisco in una textbox come funzione algebrica ( es : x^4+7 ), e non come una semplice linea di caratteri , per poi applicarvi le formule di calcolo integrale.

  2. #2
    Quello che ti serve è un parser matematico; ne puoi trovare diversi cercando con Google.

    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

    Re: [VB6] Sostituzione di funzione matematica all'interno del codice

    Originariamente inviato da Alvi
    Salve a tutti , sono nuovo del Forum ( spero di aver azzeccato la sezione ! ) , ed ho un problema che non sono riuscito a risolvere nonostante ore di estenuante ricerca.
    Ho creato un programma che calcola l'integrale di una funzione, la quale viene riportata all'interno del codice a priori dell'esecuzione del form. Ora il mio problema è : come posso calcolare l'integrale di una funzione che decido a posteriori , senza dover per forza riscrivere una nuova funzione del codice?
    Vorrei che fosse possibile che VB leggesse una data funzione che io inserisco in una textbox come funzione algebrica ( es : x^4+7 ), e non come una semplice linea di caratteri , per poi applicarvi le formule di calcolo integrale.
    Puoi farlo abbastanza facilmente utilizzando il controllo ScriptControl.

    Per prima cosa devi renderlo disponibile nella toolbox dei controlli:
    clicca col tasto destro in un punto vuoto della toolbox dei controlli standard, menu "Components...", cerca e seleziona "Microsoft Script Control 1.0", poi <OK>: ora dovresti trovarlo nella toolbox.

    Trascinalo dentro un form: avrai cosi' ScripControl1.

    Puoi usare questo codice (nel form):
    codice:
    Sub DefinisciFunzione(ByVal funz As String)
       Dim s As String
       ScriptControl1.Reset
       On Error Resume Next
       s = "Option Explicit" & vbNewLine
       s = s & "Function F(x)" & vbNewLine
       s = s & "F=" & funz & vbNewLine
       s = s & "End Function"
       ScriptControl1.AddCode s
    End Sub
    
    Function CalcolaFunzione(ByVal x As Double) As Double
       On Error Resume Next
       CalcolaFunzione = ScriptControl1.Run("F", x)
    End Function
    ora se metti in un pulsante qualcosa tipo:
    codice:
       Dim x As Double
       DefinisciFunzione "x^4+7"
       x = 1.3
       Debug.Print x, CalcolaFunzione(x)
    come vedi puoi facilmente definire una funzione (ovviamente anche prendendola da una textbox dove l'ha scritta l'utente), ed ottenerne i valori in modo molto immediato con la funz. CalcolaFunzione().

    Naturalmente va' scritta secondo la sintassi VB6, non puoi usare moltiplicazioni implicite tipo "2x+1" come si fa in algebra.

    Lo ScriptControl e' molto potente, qui ci siamo limitati ad una classica funzione matematica, con un solo argomento ed un'unica linea di codice, ma il controllo permette di eseguire un QUALUNQUE codice interpretato all'interno del nostro programma eseguibile !!!
    (se guardi il codice di DefinisciFunzione non fa altro che scrivere "al volo" il codice che scriveresti tu per definire la funzione all'interno del tuo programma, che pero' risulterebbe fissa ed immutabile)

    Ciao !
    IceCube_HT (VB6 fan Club)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.