Oppure

Loading
12/08/21 20:01
bernie
Buona sera
non so se il titolo della discussione è corretto.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button15.Click
        Dim Valore As Long = 0
        Dim KL As Long = 0
        Dim G As Long = 0
        Dim n As Byte = 0
        G = TextBox1.Text
        While Valore <= 9
            For n = 1 To 7
                KL = (Math.Truncate((G / (200 * ((40 * n) / 1000))) * 100)) / 100

                Valore = (Math.Truncate(0.004233 * (6000 / KL) * 10)) / 10

                If n > 7 Then
                    MsgBox("n fuori range ")
                    Exit While
                End If

                If Valore > 12 Then
                    MsgBox("valore fuori range")
                    Exit While
                End If
            Next
        End While
        Label22.Text = n
    End Sub

Inserisco un valore nella textbox, premo il pulsante e l'etichetta mi mostra il risultato del calcolo.
Se per qualche ragione il risultato è fuori dal range stabilito mi segnala la cosa .
Fino qui tutto ok , però , se voglio cambiare il valore della textbox e rifare un calcolo , il risultato non cambia .
Dove sbaglio ?
aaa
12/08/21 22:03
Carlo
leggendo senza provare vedo:

If n > 7 Then
MsgBox("n fuori range ";)
Exit While
End If

perché n dovrebbe diventare > 7 se viene incrementatao dal for e sappiamo che va da 1 a 7?

Dove lo mostri il risultato: Label22.Text = n? (se non si esce prematuramente dal for e dal wile con un fuori range, sarà sempre 8)

Quali sono i valori impostabili e quali dovrebbero essere i risultati?

Se il numero inserito in TextBox1.Text produce per tutti i valori di n, 1...7 un Valore sempre <= 9 si resterà nel loop per sempre...
in programmazione tutto è permesso
16/08/21 20:07
bernie
Pensando di semplificare le cose le ho solo complicate
Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click
        Label22.Text = ""
        Label23.Text = ""
        Label24.Text = ""
        Dim DP As Long = 200.8      'costante
        Dim G As Long
        G = TextBox1.Text           ' questo è il prametro che va impoastao , un valore che può essere tra 1 e 500
        Dim d As Long = 1           ' questo valore è una costante , può essere cambiato ma difficilmente 
        Dim LS As Long = 3          ' questo valore è quasi una costante , può essere cambiato, in un range da 0 a 10
        Dim HS As Long = 10         ' questo valore è quasi una costante , può essere cambiato, in un range da LS a 10
        Dim VL As Long              ' valore che si vuole trovare
        Dim KL As Long              ' valore che si vuole trovare 
        Dim pl As Long              ' questo valore può essere 6-12-40 decisione impostabile
        Dim livelli As Long         ' questo valore può avere due valori , 7 oppure 4 è legato a pl , se pl=40 livelli=4 altrimenti livelli=7
        Dim n As Long               ' valore che si vuole trovare 
        If ListBox1.Text = 40 Then
            livelli = 4
            pl = 40
        ElseIf ListBox1.Text = 12 Then
            livelli = 7
            pl = 12
        Else
            livelli = 7
            pl = 6
        End If

        For n = 1 To livelli
            KL = (Math.Truncate((G / (DP * d * ((pl * n) / 1000))) * 100)) / 100
            VL = (Math.Truncate(0.004233 * (6000 / KL) * 100)) / 100
            If n < livelli And (VL > LS And VL < HS) Then
                Label22.Text = n
                Label23.Text = KL
                Label24.Text = VL
                Exit For

            End If
        Next
    End Sub

Il valore che si imposta è G , devo trovare tre valori , n, VL,KL.
VL deve essere nel range di LS e HS .
KL non ha limitazioni
n deve essere un numero intero compreso tra 1 e 4 oppure tra 1 e 7 a secondo di cosa si sceglie nella listbox.
Le formule per trovare KL ed VL sono corrette .
Quello che ho cercato di fare è incrementare la n fino a quanto il valore di KL non mi consente di avere un VL maggiore di LS e minore di HS quel punto esco dal ciclo .
Continua a darmi valori di n maggiori del dovuto

Ultima modifica effettuata da bernie 16/08/21 20:26
aaa
17/08/21 6:28
nessuno
Così si capisce poco, partiamo dal problema e non dal codice.

Esiste una formula su cui ragionare, tipo

x=y*w/k ...

?

Magari ci dai la formula, ci fai un esempio numerico concreto e ci dici cosa vuoi trovare a partire da quali dati.

E' inutile inserirsi nel ragionamento del tuo codice che è magari completamente sbagliato.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
17/08/21 8:01
bernie
Ok nessuno
KL=G/(D*(pl*n)*1000))
VL=0.004233*(6000/KL)
G=180
pl=40
D=201
VL deve essere compreso tra 3 e 10
n varia da 1 a 4
Scusate se non sono stato chiaro.
Grazie.
Ultima modifica effettuata da bernie 17/08/21 8:09
aaa
17/08/21 8:55
nessuno
Andiamo per passi ...

Se VL deve essere compreso tra 3 e 10 allora KL deve essere compreso tra

2.5398 e 8.46596

Il valore di n è un intero da 1 a 4? O può essere anche non intero?

E comunque, tu quale elemento dell'espressione vuoi trovare dai tuoi calcoli dato che

(2.5398 ... 8.46596) = G/(D*(pl* (1...4))*1000))

??
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
17/08/21 9:36
bernie
n può essere solo un intero. 1-2-3-4
Io ho G, devo trovare KL, VL ed n.
aaa
17/08/21 9:44
nessuno
bernie ci dobbiamo capire ...

Tu conosci G e conosci anche VL perché hai dato dei limiti.

Quindi ti chiedo in questa formula

(2.5398 ... 8.46596) = 180/(D*(pl* (1...4))*1000))

quello che non conosci è D e pl ... sono questi che vuoi conoscere?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.