Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - calcolare espressioni
Forum - C# / VB.NET - calcolare espressioni

Avatar
ruggy94 (Member)
Guru


Messaggi: 890
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 20:35
Venerdì, 26/12/2008
Questo topic è stato chiuso dal moderatore

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:

Codice sorgente - presumibilmente VB.NET

  1. Private Function addizione(ByVal ParamArray addendi() As String) As Int32
  2.         Dim atmp As Int32 = 0
  3.         For s As Int16 = 0 To UBound(addendi)
  4.             atmp += CInt(addendi(s))
  5.         Next
  6.         Return atmp
  7.     End Function
  8.  
  9.     Private Function moltiplicazione(ByVal ParamArray fattori() As String) As Int32
  10.         Dim mtmp As Int32 = 1
  11.         For p As Int16 = 0 To UBound(fattori)
  12.             mtmp *= CInt(fattori(p))
  13.         Next
  14.         Return mtmp
  15.     End Function
  16.  
  17.     Private Function calcola(ByVal expression As String)
  18.         Dim result As Int32
  19.         somma = Split(expression, "+")
  20.  
  21.         For x As Int16 = 0 To UBound(somma)
  22.             If somma(x).Contains("*") Then
  23.                 prodotto = Split(somma(x), "*")
  24.                 Replace(somma(x), somma(x), CStr(moltiplicazione(prodotto)))
  25.             End If
  26.         Next
  27.         result = addizione(somma)
  28.         Return result
  29.  
  30.     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:

PM
Avatar
ruggy94 (Member)
Guru


Messaggi: 890
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 10:00
Sabato, 27/12/2008
risolto :rotfl::rotfl:
era un errore troppo stupido...colpa del sonno ;)
avevo dimenticato di effettuare un'assegnazione cioè ad esempio
Codice sorgente - presumibilmente C# / VB.NET

  1. sub prova()
  2. replace(stringa,carattere,carattere2)
  3. end sub


è diverso da
Codice sorgente - presumibilmente Plain Text

  1. stringa=replace(stringa,carattere,carattere2)


PM