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:
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
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
aaa