Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gratisweb - 03 Maggio 2023, 17:03:25

Titolo: Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 17:03:25
Creo un textbox e scrivo un operazione per esempio:

5+5+10%-1+400-10%

se la scrivo senza risultati mi da il totale ma se la scrivo per calcolare anche le percentuali mi va in errore, quinddi non accetta le le percentuali.
Titolo: Re:Percentuali
Inserito da: Gianluigi - 03 Maggio 2023, 17:12:57
Creo un textbox e scrivo un operazione per esempio:

5+5+10%-1+400-10%

se la scrivo senza risultati mi da il totale ma se la scrivo per calcolare anche le percentuali mi va in errore, quinddi non accetta le le percentuali.

Senza il tuo codice, non posso risponderti  :-\
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 17:17:02
In un form ho messo un textbox con all' interno ho scritto:

5+5+10%-1+400-10%

poi ho inserito un commandbutton in modo che cliccanddoci mi appare il risultato totale in una label1 che ho messo

in questo command1 ho scritto

Codice: [Seleziona]
Dim espressione As String
Dim Totale2 As String
   espressione = textbox1.Text
   Totale2 = Eval(espressione)

label1.text = Totale2
Ma va in errore mentre se scrivo senza usare percentuali funziona
Titolo: Re:Percentuali
Inserito da: Gianluigi - 03 Maggio 2023, 17:22:42
Puoi per cortesia leggere questa guida* e usare il forum come si deve?

Grazie

*
https://www.gambas-it.org/smf/index.php?topic=7397.msg47179#msg47179
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 17:27:07
Puoi per cortesia leggere questa guida* e usare il forum come si deve?

Grazie

*
https://www.gambas-it.org/smf/index.php?topic=7397.msg47179#msg47179

Corretto
Titolo: Re:Percentuali
Inserito da: Gianluigi - 03 Maggio 2023, 17:37:02
Per ottenere una percentuale, ad esempio del 10%, occorre moltiplicare  per 0.1
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 17:38:35
Lo so, ma il problema è che nella textxbox non lo fa, come ho scritto prima se metto nella textbox il calcolo da fare come questo

5+5+10%-1+400-10%

va in errore ma se scrivo nella textbox 5+5+10%-1+400-10 il risultato me lo da

Sarà è eval che non accetta la percentuale
Titolo: Re:Percentuali
Inserito da: Gianluigi - 03 Maggio 2023, 18:03:01
Eval non è una calcolatrice, e devi anche tener conto dell'ordine di valutazione degli operatori.

Più di questo non saprei dire  :-\
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 19:43:07
Non comprendo davvero (https://forum.ubuntu-it.org/images/smilies/sbonk.gif) perché usi "Eval()" per la gestione di un'operazione con le percentuali, essendo facilmente gestirle con calcoli, come suggerito da Gianluigi.
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 19:56:17
Per ottenere una percentuale, ad esempio del 10%, occorre moltiplicare  per 0.1

Ma non si fa /100 ?
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 21:19:26
Non comprendo davvero (https://forum.ubuntu-it.org/images/smilies/sbonk.gif) perché usi "Eval()" per la gestione di un'operazione con le percentuali, essendo facilmente gestirle con calcoli, come suggerito da Gianluigi.

se scrivo su texbox un operazione per esempio 5 * 10 * 20 +1 /2

come faccio ad ottenere il risultato ?
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 21:37:21
Sì, va bene "Eval()":

Codice: [Seleziona]
TextBox1.Text = "5 * 10 * 20 + 1 / 2"

Print Eval(TextBox1.Text)
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 21:39:19
Sì, va bene "Eval()":

Codice: [Seleziona]
TextBox1.Text = "5 * 10 * 20 + 1 / 2"

Print Eval(TextBox1.Text)

Il problema è con la %
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 21:46:22
Sì, penso che tu debba risolvere la percentuale prima con un calcolo in apposita riga di codice, e poi passare il risultato parziale ad "Eval()".   :-\
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 21:48:11
Sì, penso che tu debba risolvere la percentuale prima con un calcolo in apposita riga di codice, e poi passare il risultato parziale ad "Eval()".   :-\

E questo il problema, che ancora non ci sono arrivato. Anche se metto le formule non funzionano cioè danno risultati errati.
Ho usato una chat gpt mi da il codice ma me lo da sbagliato
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 21:53:15
Mostraci queste formule che hai utilizzato...
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 21:59:42
Mostraci queste formule che hai utilizzato...

formula
percentuale = (valore_percentuale / 100) * valore_totale

Applico il 40%
Codice: [Seleziona]
   Dim Risultato As String
    Dim Espressione As String
    espressione = "5+1+30*3+(40/100)*100"
    Risultato = Eval(Espressione)
    Print "Il risultato dell'espressione " & Espressione & " è: " & Risultato
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 22:02:49
Eh... questo codice funziona.
Dove è invece il problema ?  ???

Come vedi, trovando prima la percentuale, in "Eval()" non hai problemi.
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 22:09:48
Eh... questo codice funziona.
Dove è invece il problema ?  ???

Come vedi, trovando prima la percentuale, in "Eval()" non hai problemi.

Come risultato mi da 136, invece se lo faccio da calcolatrice come risultato mi da 136

se lo faccio dda calcolatrice fisica
5+1+30*3+40%

mi da 134,4
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 22:12:59
Non desidero avventurarmi in "Eval()", poiché io non lo uso mai. quindi in sostanza non lo conosco adeguatamente.  :-X
Suppongo che il segno di percentuale non lo supporti, e pertanto non lo comprenda.  :-\
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 22:14:48
Non desidero avventurarmi in "Eval()", poiché io non lo uso mai. quindi in sostanza non lo conosco adeguatamente.  :-X
Suppongo che il segno di percentuale non lo supporti, e pertanto non lo comprenda.  :-\

al posto di eval cosa usi ?
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 22:16:55
Faccio fare i calcoli in modo esplicito, in sostanza.
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 22:24:49
Faccio fare i calcoli in modo esplicito, in sostanza.

Avevo fatto prima i calcoli in modo esplicito ma però c'era il problema della regola cioè che prima deve iniziare a moltiplicare e poi alla fine aggiungere cioè mi spiego
Prima deve eseguire le moltiplicazioni e divisioni e poi alla fine le addizioni e sottrazioni.
Siccome eval la regola la applica però dda il problema con la percentuale.........
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 22:31:46
Gambas pensa lui a svolgere le operazione in base all'ordine di valutazione degli operatori.
Laddove servono le parentesi per separare, ad esempio, il calcolo di una percentuale dal resto, le imponi adeguatamente.
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 22:34:35
Gambas pensa lui a svolgere le operazione in base all'ordine di valutazione degli operatori.
Laddove servono le parentesi per separare, ad esempio, il calcolo di una percentuale dal resto, le imponi adeguatamente.

Ma io devo risolvere il problema delle percentuali
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 22:37:06
...in che senso ?
Titolo: Re:Percentuali
Inserito da: Gratisweb - 03 Maggio 2023, 22:55:58
...in che senso ?

Rileggi i post di prima
Titolo: Re:Percentuali
Inserito da: Gianluigi - 03 Maggio 2023, 23:38:33
Ho perso il filo di questa discussione, sono anziano, pertanto vado a dormire.
L'algebra non la conosco e non conosco Eval, però so che Eval funziona se passi una formula corretta.
Devi costruire la formula prima di passarla, per esempio:

Il risultato corretto del primo calcolo è 369

Prova questo codice:

Codice: [Seleziona]
Public Sub Main()

  Print Eval("((((5+5)*1.1)-1)+400)*0.9") ' risultato corretto
  Print Eval("5+5*1.1-1+400*0.9") ' risultato errato
  Print Eval("5+5+10%-1+400-10%+1-1") ' risultato errato

End

Qui quanto scritto sul libro tedesco:
https://gambas-buch.de/doku.php?id=k19:k19.8:start
https://gambas-buch.de/doku.php?id=k19:k19.8:k19.8.1:start
https://gambas-buch.de/doku.php?id=k19:k19.8:k19.8.2:start
https://gambas-buch.de/doku.php?id=k19:k19.8:k19.8.4:start

Buonanotte
Titolo: Re:Percentuali
Inserito da: vuott - 03 Maggio 2023, 23:50:40
Rileggi i post di prima
eh... se non vuoi o non puoi usare "Eval()", le devi porre in modo esplicito nel codice.
Per esempio, se vuoi sapere quant'è il 40% del valore di 200, nel codice porrai la formula:
  (200 * 40) / 100
oppure, come diceva Gianluigi:
  200 * 0.4 (che deriva da: 200 * (40 /100) )

Per esempio, se voglio porre un "Button" al centro del "Form", suo Contenitore, posso fare:
Codice: [Seleziona]
Public Sub Button1_Click()

  Button1.Move((Me.W / 2) - (Button1.W * 0.5), (Me.H / 2) - (Button1.H * 0.5))

End
Ho posto esplicitamente i calcoli di due proporzioni con le seguenti formule:
   (Button1.W * 0.5)
   (Button1.H * 0.5)
per impostare posizione orizzontale e verticale del "Button".
Titolo: Re:Percentuali
Inserito da: Gratisweb - 04 Maggio 2023, 16:17:54
Non riesco a fare un codice che calcola la percentuale corretta che danno le calcolatrici fisiche....

In un form metto un textbox1.text
un commandbutton1

dentro il textbox1 scrivo una operazione contenente una percentuale
ed appena premo il command button mi deve dare il risultato corretto visualizzandolo tramite il print

ma ho provato molti codici ma non riesco ad arrivare ad una soluzione

Questo è uno dei tanti codici:

Codice: [Seleziona]
    Dim espressione As String
    Dim risultato As Float
    Dim errore As String
   
    espressione = textbox1.text
   
    ' Cerchiamo la percentuale nell'espressione e la sostituiamo con la formula corretta
    If InStr(espressione, "%") <> 0 Then
        espressione = Replace(espressione, "%", "/100")
    End if
   
    ' Elaboriamo l'espressione matematica e gestiamo eventuali errori
    errore = Error
    risultato = Eval(espressione)
    If errore = 0 Then
        Print "Il risultato dell'espressione è: " & risultato
    Else
        Print "Errore nell'elaborazione dell'espressione: " & errore
    End if
print risultato
Titolo: Re:Percentuali
Inserito da: vuott - 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...  :-\
Titolo: Re:Percentuali
Inserito da: Gratisweb - 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 ?
Titolo: Re:Percentuali
Inserito da: Gratisweb - 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 ?
Titolo: Re:Percentuali
Inserito da: vuott - 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
Titolo: Re:Percentuali
Inserito da: Gratisweb - 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 ?
Titolo: Re:Percentuali
Inserito da: vuott - 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 ?  ???
Titolo: Re:Percentuali
Inserito da: Gratisweb - 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.....
Titolo: Re:Percentuali
Inserito da: Archimedes - 06 Maggio 2023, 19:17:15
Non hai una calcolatrice di sistema? Verifica i risultati con quella.
Titolo: Re:Percentuali
Inserito da: Gratisweb - 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
Titolo: Re:Percentuali
Inserito da: vuott - 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.