Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
26/12/08 19:35
ruggy94
Ciao ragazzi ;) sto facendo un programma (tipo calcolatrice) che calcola intere espressioni.
Per iniziare stavo facendo delle prove facendo in modo di risolvere espressioni senza parentesi e con i segni + e *.
La mia idea è di splittare (funzione Split()) l'espressione in base al carattere + e, nelle stringhe splittate, se sono presenti dei * fare la moltiplicazione e sostituire la stringa (ad esempio "5*2" con "10";) ed infine sommare il tutto.
Esempio pratico:
l'espressione "3+5*2" (intesa come stringa di testo) viene divisa e diventa 3|5*2 ; poi, siccome è presente il carattere "*", risolvo 5*2=10 e sostituisco nel testo cioè: la stringa precedente diventa 3|10 e poi sommo 3+10=13. (ho usato il separatore | per indicare che sono elementi di un array, quindi 3|10 significa che il primo elemento dell'array è "3", il secondo è "10";).
Dopo questa kilometrica spiegazione (scusate se vi ho annoiato) posto un po' di codice:

Private Function addizione(ByVal ParamArray addendi() As String) As Int32
        Dim atmp As Int32 = 0
        For s As Int16 = 0 To UBound(addendi)
            atmp += CInt(addendi(s))
        Next
        Return atmp
    End Function

    Private Function moltiplicazione(ByVal ParamArray fattori() As String) As Int32
        Dim mtmp As Int32 = 1
        For p As Int16 = 0 To UBound(fattori)
            mtmp *= CInt(fattori(p))
        Next
        Return mtmp
    End Function

    Private Function calcola(ByVal expression As String)
        Dim result As Int32
        somma = Split(expression, "+")

        For x As Int16 = 0 To UBound(somma)
            If somma(x).Contains("*") Then
                prodotto = Split(somma(x), "*")
                Replace(somma(x), somma(x), CStr(moltiplicazione(prodotto)))
            End If
        Next
        result = addizione(somma)
        Return result

    End Function


l'errore che mi restituisce è nella funzione Addizione(), infatti dice che (giustamente) non si può convertire in integer la stringa "5*2"...ma se il programma funzionasse bene non dovrebbe esserci questo errore perchè al posto di 5*2 ci sarebbe 10...
grazie in anticipo :k:
aaa
27/12/08 9:00
ruggy94
risolto :rotfl::rotfl:
era un errore troppo stupido...colpa del sonno ;)
avevo dimenticato di effettuare un'assegnazione cioè ad esempio
sub prova()
replace(stringa,carattere,carattere2)
end sub

è diverso da
stringa=replace(stringa,carattere,carattere2)
aaa