Calcolo equazioni di primo grado

Posted on 21 febbraio 2022. Filed under: Senza categoria |

Ho aperto Excel, e su una cella qualunque ho scritto una espressione a caso, né facile, né complessa, una cosa di media difficoltà come questa =65+((59+58*9)-25)+46-45/59 (usando solo numeri interi) e mi ha dato come risultato 666,2373

Mi sono poi chiesto: ma se volessi fare in modo che da un’espressione qualsiasi e dato il risultato, uno di questi numeri diventa X, come faccio a calcolare X?

Mi sono venute in mente due soluzioni: in base alla posizione di X e un ciclo While.

Per la posizione, se X fosse al posto di 65 sarebbe facile, perchè diventa: ((59+58*9)-25)+46-45/59=666,2373-65 e quindi diventa facile calcolare X=65

Se invece la posizione di X fosse più interna o anche esterna ma in una moltiplicazione o divisione, dovremo creare un altro metodo.

Questo metodo, che dovrò studiarlo lo farò in un successivo articolo, vediamo invece qua come utilizzare un ciclo while per ottenere quanto vale X. Facendo finta di conoscere che sono numeri interi faremo un ciclo while partendo da 0 e incrementando X di 1 finchè non avremo corrispondenza del risultato.

Creiamo un nuovo progetto VB.NET (Windows Forms o WPF), creiamo un pulsante e all’interno del codice Click andremo a scrivere il codice.

Come prima cosa faremo mettere in input l’espressione e il risultato.

    Dim Espressione As String = InputBox("Inserire l'espressione")
    Dim Risultato As Double = InputBox("Inserire il risultato dell'espressione")

Useremo poi un ciclo While per incrementare X di 1 a partire da 0 fino a quando espressione sia uguale al risultato e quindi visualizza il valore di X.

C’è però un problema: come posso convertire una espressione di stringa in una espressione matematica?

Ho fatto delle ricerche, ho scaricato dei codici di esempio che ho provato.

Come è giusto che sia, sono lunghi perchè devi fare un parser di ogni carattere e poi scriverti tutte le regole. Mi sono chiesto, allora, se esiste qualche funzione o qualche classe nel .NET Framrwork.

Per nostra fortuna si, perchè esiste all’interno di System.Data una classe chiamata DataTable e ha il metodo Compute che converte una espressione di stringa in espressione matematica.

Public Function Compute(expression As String, filter As String) As Object

Quindi alla fine il nostro codice diventa:

Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
    Dim Espressione As String = InputBox("Inserire l'espressione")
    Dim Risultato As Double = InputBox("Inserire il risultato dell'espressione")
    Dim NumeroDecimali As Integer



    For ty = 1 To Len(Risultato)
        If Mid(Risultato, ty, 1) = "," Then NumeroDecimali = Len(Risultato) - ty
    Next

    '65+((59+58*9)-25)+46-45/59
    '65+((59+58*9)-25)+X-45/59
    'Risultato=666,2373
    'X=46
    Dim RisultatoNuovaEspressione As Double = 0
    Dim X As Integer = -1
    While RisultatoNuovaEspressione <> Risultato
        X = X + 1
        Dim NuovaEspressione = Replace(Espressione, "X", X)
        RisultatoNuovaEspressione = New DataTable().Compute(NuovaEspressione, Nothing)
        RisultatoNuovaEspressione = FormatNumber(RisultatoNuovaEspressione, NumeroDecimali)
    End While
    MessageBox.Show("X = " & X)
End Sub

Abbiamo dovuto anche mettere un calcolo delle cifre decimali, altrimenti il risultato non sarà mai ottenuto per via degli arrotondamenti e ovviamente un replace per sostituire la X con il suo valore.

A questo punto lo lanciamo, inseriamo per esempio l’espressione di cui sopra:

Inseriamo poi il risultato dell’espressione:

Ed ecco quindi il risultato di X:

Questo è ovviamente un punto di partenza, si potrebbe provare a mettere altre X, dare in modo che X sia decimale e così via.

Magari in un prossimo articolo, ci proverò.

Make a Comment

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Liked it here?
Why not try sites on the blogroll...

%d blogger hanno fatto clic su Mi Piace per questo: