Autore Topic: Percentuali  (Letto 2507 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Percentuali
« Risposta #30 il: 04 Maggio 2023, 16:39:59 »
Se nel TextBox inserisco questa operazione:
  5+5+10%
e vado a vedere con un Print come viene trasformata dalle seguenti righe del tuo codice:
 
Codice: [Seleziona]
If InStr(espressione, "%") <> 0 Then
     espressione = Replace(espressione, "%", "/100")
   End If

   Print espressione
ottengo l'espressione precedente così modificata:
   5+5+10/100
...non credo vada bene...  :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:Percentuali
« Risposta #31 il: 04 Maggio 2023, 16:45:48 »
Se nel TextBox inserisco questa operazione:
  5+5+10%
e vado a vedere con un Print come viene trasformata dalle seguenti righe del tuo codice:
 
Codice: [Seleziona]
If InStr(espressione, "%") <> 0 Then
     espressione = Replace(espressione, "%", "/100")
   End If

   Print espressione
ottengo l'espressione precedente così modificata:
   5+5+10/100
...non credo vada bene...  :-\

Infatti, ma come faccio a farla andare bene ?

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:Percentuali
« Risposta #32 il: 04 Maggio 2023, 20:11:17 »
questo codice funziona per il calcolo percentuale su operazione semplice
per esempio 5+10%
40-1%
ecc...

Codice: [Seleziona]
    Dim espressione As String
    Dim valore As Float
    Dim percentuale As Float
    Dim valore_con_percentuale As Float
    'Dim Segno1 As String
   
    ' Chiede all'utente di inserire l'operazione matematica
    espressione = InputBox("Inserisci l'operazione matematica che contiene una percentuale:")
    If InStr(espressione, "+") > 0 Then
    ' Estrae il valore e la percentuale dall'operazione matematica
     valore = Val(Mid(espressione, 1, InStr(espressione, "+") - 1))
     percentuale = Val(Mid(espressione, InStr(espressione, "+") + 1, Len(espressione) - InStr(espressione, "+") - 1))
     valore_con_percentuale = valore + (valore * percentuale / 100)
    End If
    If InStr(espressione, "-") > 0 Then
    ' Estrae il valore e la percentuale dall'operazione matematica
     valore = Val(Mid(espressione, 1, InStr(espressione, "-") - 1))
     percentuale = Val(Mid(espressione, InStr(espressione, "-") + 1, Len(espressione) - InStr(espressione, "-") - 1))
     valore_con_percentuale = valore - (valore * percentuale / 100)
    End If
    If InStr(espressione, "*") > 0 Then
    ' Estrae il valore e la percentuale dall'operazione matematica
     valore = Val(Mid(espressione, 1, InStr(espressione, "*") - 1))
     percentuale = Val(Mid(espressione, InStr(espressione, "*") + 1, Len(espressione) - InStr(espressione, "*") - 1))
     valore_con_percentuale = valore * (valore * percentuale / 100)   
    End If
    If InStr(espressione, "/") > 0 Then
    ' Estrae il valore e la percentuale dall'operazione matematica
     valore = Val(Mid(espressione, 1, InStr(espressione, "/") - 1))
     percentuale = Val(Mid(espressione, InStr(espressione, "/") + 1, Len(espressione) - InStr(espressione, "/") - 1))
     valore_con_percentuale = valore / (valore * percentuale / 100)
    End If
   
    ' Calcola la percentuale del valore e visualizza il risultato
'    valore_con_percentuale = valore + (valore * percentuale / 100)
    Print "Il " & percentuale & "% in più di " & valore & " è " & valore_con_percentuale

Ma il operazioni più complesse ?
Tipo
20+40*34%

oppure 56*3-1+12/2*5%

come fare ?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Percentuali
« Risposta #33 il: 05 Maggio 2023, 01:20:31 »
Ma il operazioni più complesse ?
Tipo
20+40*34%

oppure 56*3-1+12/2*5%

come fare ?
...mah, forse operando con le funzioni sulle Stringhe:
Codice: [Seleziona]
Public Sub Main()

  Dim s As String = "56*3-1+12/2*5%"
  Dim c As Short
 
  c = Cerca(s)
 
  Select Case s[c]
    Case "*", "/"
      Print Eval(Left(s, c + 1) & CStr(Val(Mid(s, c + 2, Len(s) - c - 2)) / 100))
    Case "+", "-"
      Print Eval(Left(s, c + 1) & "((" & Left(s, c) & ")*" & CStr(Val(Mid(s, c + 2, Len(s) - c - 2)) / 100) & ")")
  End Select

End

Private Function Cerca(t As String) As Short
 
  Dim c As Short
   
  c = t.Len - 1
  Repeat
    Dec c
  Until IsPunct(t[c])
 
  Return c
 
End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:Percentuali
« Risposta #34 il: 05 Maggio 2023, 09:19:50 »
Questo codice funziona con le operazioni complesse

Codice: [Seleziona]
'Complessa
  ' Definisci la variabile per l'espressione matematica e il risultato
  Dim expression As String
  Dim result As Float

  ' Richiedi all'utente di inserire l'espressione matematica tramite InputBox
  expression = InputBox("Inserisci l'espressione matematica:")
  expression = textbox1.text
  ' Aggiungi le parentesi all'espressione
  expression = "(" & expression & ")"

  ' Converti la percentuale in un valore decimale
  expression = Replace(expression, "%", "/100")

  ' Esegui i calcoli
  result = Eval(expression)

  ' Stampa il risultato-
  'Print expression
  label1.text = result
  'Print "Il risultato è: " & result
End

Public Sub Button5_Click()
'Verifica
Dim espressione As String = "10+40+4"
Dim segni As String[] = ["+", "-", "*", "/", "%"]
Dim count As Integer = 0

For Each segno As String In segni
    count += InStr(espressione, segno) - 1
Next

If count > 1 Then
    ' L'operazione contiene più di un segno per gli operatori matematici
End If
Print count

adesso come faccio a verificare se un operazione è complessa o no nel senso se ha +di tot segni matematici ?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Percentuali
« Risposta #35 il: 05 Maggio 2023, 13:37:21 »
Questo codice funziona con le operazioni complesse

Codice: [Seleziona]
'Complessa
  ' Definisci la variabile per l'espressione matematica e il risultato
  Dim expression As String
  Dim result As Float

  ' Richiedi all'utente di inserire l'espressione matematica tramite InputBox
  expression = InputBox("Inserisci l'espressione matematica:")
  expression = textbox1.text
  ' Aggiungi le parentesi all'espressione
  expression = "(" & expression & ")"

  ' Converti la percentuale in un valore decimale
  expression = Replace(expression, "%", "/100")

  ' Esegui i calcoli
  result = Eval(expression)

  ' Stampa il risultato-
  'Print expression
  label1.text = result
  'Print "Il risultato è: " & result
End


Se faccio calcolare questa espressione
   56*3-1+12/2+5%
alla calcolatrice presente nel mio sistema, ottengo questo risultato: 181,65.
Se quella espressione la faccio calcolare dal mio codice, sopra riportato, ottengo questo risultato: 181,65.
Se la faccio calcolare dal tuo codice ottengo questo risultato: 173,05.

Chi sbaglia ?  ???
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:Percentuali
« Risposta #36 il: 05 Maggio 2023, 22:08:03 »
Questo codice funziona con le operazioni complesse

Codice: [Seleziona]
'Complessa
  ' Definisci la variabile per l'espressione matematica e il risultato
  Dim expression As String
  Dim result As Float

  ' Richiedi all'utente di inserire l'espressione matematica tramite InputBox
  expression = InputBox("Inserisci l'espressione matematica:")
  expression = textbox1.text
  ' Aggiungi le parentesi all'espressione
  expression = "(" & expression & ")"

  ' Converti la percentuale in un valore decimale
  expression = Replace(expression, "%", "/100")

  ' Esegui i calcoli
  result = Eval(expression)

  ' Stampa il risultato-
  'Print expression
  label1.text = result
  'Print "Il risultato è: " & result
End


Se faccio calcolare questa espressione
   56*3-1+12/2+5%
alla calcolatrice presente nel mio sistema, ottengo questo risultato: 181,65.
Se quella espressione la faccio calcolare dal mio codice, sopra riportato, ottengo questo risultato: 181,65.
Se la faccio calcolare dal tuo codice ottengo questo risultato: 173,05.

Chi sbaglia ?  ???

Sbaglia che non ci ho capito più nulla e da giorni che cerco di risolvere questo problema delle percentuali senza arrivare mai ad una soluzione, funzionano solo con le operazioni semplici.

In pratica sto creando  la calcolatrice con gambas e mi sono  bloccato con le percentuali, mi sa che li tolgo perchè le ho provate tutte. Sarà non ci arrivo io a risolvere.....
« Ultima modifica: 05 Maggio 2023, 22:10:41 da Gratisweb »

Offline Archimedes

  • Gamberetto
  • *
  • Post: 12
    • Mostra profilo
Re:Percentuali
« Risposta #37 il: 06 Maggio 2023, 19:17:15 »
Non hai una calcolatrice di sistema? Verifica i risultati con quella.

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:Percentuali
« Risposta #38 il: 06 Maggio 2023, 21:08:07 »
Adesso funziona, ho provato il codice di Vuott ma spuntano come al solito altri errori cioè ne sistemo 2 e ne spuntano altri

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Percentuali
« Risposta #39 il: 07 Maggio 2023, 06:30:54 »
Citazione
ho provato il codice di Vuott ma spuntano come al solito altri errori
Sottolineo che il mio codice prende in considerazione soltanto le espressioni contenenti un solo valore di percentuale.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »