Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    VB 2008 - Trasformare una espressione di testo in numerica

    Ciao a tutti,
    spero che siate prossimi alle ferie o che siano passate in maniere ottimale per tutti voi.

    Avrei bisogno di un aiuto per supeare questo scoglio.

    Ho bsogno di valutare una espressione matematica per determinati valori:

    Riporto quanto ho fatto e vi aiuterà a capire meglio cosa intendo:

    codice:
    Dim a As Double
    Dim x As Integer
    
    x = 4
    a = x ^ 2
    
    e poi visualizzo il risultato in una casella di testo
    TextBox1.Text = a.ToString
    che correttamente mi visualizza 16
    Ora il problema è che devo mettere io in a l'espressione x ^ 2 o qualsiasi altra
    io vorrei recuperare l'espressione che un utente inserisce in una casella di testo ed attribuirla alla variabile a.
    Non riesco a farlo

    Inutile dire che non sono un esperto come avrete capito.

    Mi potete aiutare?

    Grazie in anticipo

    Ciao a tutti

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Non ho mai realizzato una calcolatrice, ma procederei così:

    prima di tutto, chiederei all'utente di inserire tutte le variabili che vuole utilizzare nella formula (con tanto di rispettivo valore) e le memorizzerei in un Dictionary(Of String,Double) , dove String contiene il nome della variabile e Double il suo valore.

    Poi prenderei la formula digitata (facciamola semplice, niente parentesi e solo le quattro operazioni) e sostituirei tutte le variabili con i rispettivi valori. Poi cerco i simboli "*" (moltiplicazione) e "/" (divisione), che sono le due operazioni che vanno eseguite per prime. Una volta trovati i simboli prendo il numero che sta prima e il numero che sta dopo ed eseguo l'operazione richiesta: il risultato di tutto viene poi immagazzinato in una nuova stringa. Poi faccio lo stesso con i "+" (addizione) e "-" (sottrazione). Il tutto va perfezionato, ma l'idea di base che userei è questa.

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    Ti ringrazio per la risposta.

    provo a valutare l'idea, ma la vedo unpo complicata se poi ci sono potenze e radici quadrate.

    speravo di poter attribuire alla variabile numerica l'espressione testo riportata nella textbox.

    provo ad indagare ancora

    ti ringrazio

    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    La valutazione di un'espressione matematica non si fa con una calcolatrice.
    Una ricerca con Google ti fornirà numerosi risultati, per tutti i linguaggi. Per esempio QUESTO

  5. #5
    Grazie a chi mi ha risposto.

    Ma qualche altra idea un po' più semplice?

    Se usassi visual c sarebb piùfacile implementare questa richesta?

    Grazie di nuovo
    ciao

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Quello che chiedi non è una cosa semplice.
    Io ho visto due tecniche:

    1) compilazione al volo
    2) uso delle espressioni regolari

    davvero molto interessanti, ma anche abbastanza difficili da implementare


    però ricordo una vecchia tecnica che faceva leva sulla capacità dell'sql di interpretare espressioni.
    Basta costruire un qualunque database, per esempio Access.
    Si costruisce una sola tabella chiamata per esempio Eval, con un solo campo di qualunque tipo, per esempio, ID di tipo numerico, con un solo record.

    Dopo di che basta richiamare l'sql
    codice:
        '------------------------------------------------------------
        'valuta una espressione matematica contenuta in una stringa
        '------------------------------------------------------------
        Public Function EvalSql(ByVal Espressione As String) As Double
            Try
                Return CDbl(msole.RisultatoAggregazioneSQL(gl.StringaConnessione, String.Format("SELECT ({0}) AS ESPRESSIONE FROM eval GROUP BY ({0})", Espressione)))
            Catch ex As Exception
                Throw
            End Try
        End Function
    che si richiama per esempio con
    Dim s As String = Me.TextBox1.Text
    Me.Label1.Text = String.Format("{0} = {1} SQL", n, Me.EvalSql(s))

    la funzione RisultatoAggregazioneSQL non fa altro che usare Comando.ExecuteScalar()

    prova a valutare "sin(sqr(1/2 * 100 - 7)-6)^2" che dà 0,279856060113118
    Pietro

  7. #7
    Grazie Pietro
    proverò a sperimentare.
    Scusami se non ho risposto prima ma sono rientrato solo oggi dalle ferie.

    Una curiosità, visto che si tratta di elaborare un tool che serve a visualizzare determinate funzioni di analisi matematica, secondo te visual basic è il più adatto?

    O meglio c'è qualche linguaggio che mi facilita la vita relativamente all'immissione della funzione da parte dell'utente?

    Il resto è banale, basta disegnare nel grafico il valore della funzione punto per punto.

    Avrei lo stesso problema in visual C (non lo ho mai usato, sono un programmatore della domenica)?

    Ciao e di nuovo grazie

  8. #8
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Originariamente inviato da PRICIPIANTE
    Avrei lo stesso problema in visual C (non lo ho mai usato, sono un programmatore della domenica)?
    Buon lavoro, dicono che il C e il C++ siano i due linguaggi più complicati (dopo l'assembler).

    Se vuoi farti quattro risate leggi qui
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

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 © 2025 vBulletin Solutions, Inc. All rights reserved.