none
VB.NET -> Rilevare valore MAX? RRS feed

  • Domanda

  • Non mi permette di rilevare il valore max tra più di 2 valori come risolvo.

            Dim SP As String = Label13.Text, CX As Integer, MAX_D As Integer, MAX_S As Integer, MAX As Integer, XD1 As Integer = (A + B), XD2 As Integer = (A + C), XD3 As Integer = (A + D), XD4 As Integer = (A + E), XD5 As Integer = (B + C), XD6 As Integer = (B + D), XD7 As Integer = (B + E), XD8 As Integer = (C + D), XD9 As Integer = (C + E), XD10 As Integer = (D + E)
            '
            If SP = "*2" Then CX = 2
            If SP = "*3" Then CX = 3
            If SP = "*4" Then CX = 4
            If SP = "*5" Then CX = 5
            '
            If XD1 <= 40 Then XD1 *= CX Else XD1 = -100
            If XD2 <= 40 Then XD2 *= CX Else XD2 = -100
            If XD3 <= 40 Then XD3 *= CX Else XD3 = -100
            If XD4 <= 40 Then XD4 *= CX Else XD4 = -100
            If XD5 <= 40 Then XD5 *= CX Else XD5 = -100
            If XD6 <= 40 Then XD6 *= CX Else XD6 = -100
            If XD7 <= 40 Then XD7 *= CX Else XD7 = -100
            If XD8 <= 40 Then XD8 *= CX Else XD8 = -100
            If XD9 <= 40 Then XD9 *= CX Else XD9 = -100
            If XD10 <= 40 Then XD10 *= CX Else XD10 = -100
            '
            If A <= 40 Then A *= CX Else A = -100
            If B <= 40 Then B *= CX Else B = -100
            If C <= 40 Then C *= CX Else C = -100
            If D <= 40 Then D *= CX Else D = -100
            If E <= 40 Then E *= CX Else E = -100
            '
            MAX_D = Math.Max(XD1, XD2, XD3, XD4, XD5, XD6, XD7, XD8, XD9, XD10) - 6
            MAX_S = Math.Max(A, B, C, D, E) - 3
            '
            MAX = Math.Max(MAX_D, MAX_S)

    • Modificato _F_ mercoledì 13 novembre 2019 10:51
    mercoledì 13 novembre 2019 10:47

Risposte

  • Aggiungo che, nel caso di utilizzo di una matrice di interi, si può usare la funzione Max della matrice (o meglio, della IEnumerable (Of integer) )

            Dim mtxInt() As Integer = {1, 2, 3, 4, 5, 6, 7}
            Debug.Print(mtxInt.Max.ToString)

    • Contrassegnato come risposta _F_ mercoledì 13 novembre 2019 15:16
    mercoledì 13 novembre 2019 13:11

Tutte le risposte

  • La cosa più semplice, considerato che hai tante variabili "slegate" tra loro (quindi non, giusto per esempio, una matrice) è fare una funzione a cui passi tutte le variabili, compari le prime due e tiri fuori il valore massimo (chiamiamolo Max1), poi trovi il massimo tra Max1 e la terza variabile (diciamo Max2), poi trovi il massimo tra Max2 e la quarta variabile ecc..

    Oppure lavori con una matrice di integer e rtamite Linq troviamo il massimo.

     
    mercoledì 13 novembre 2019 11:01
  • Sono a livello 0 in programmazione, mi arrangio come posso non so come creare una matrice e non so cosa sia rtamite Linq.

    Grazie per la risposta, cercherò di capire, se non riesco farò sapere .... ma credo di non riuscirci.

    Ma posso sempre farle una ad una in un processo lungo scrivendo riga per riga ogni combinazione, procedimento lungo ma possibile che volevo evitare.

    Siccome Excel riesce a ricercare il valore Max tra moltissimi è possibile inviare questa ricerca ad Excel facendomi restituire il risultato, possibilmente facendo funzionare il tutto anche a chi non possiede Excel, il mio progetto dovrà funzionare su vari pc senza limitazioni.


    • Modificato _F_ mercoledì 13 novembre 2019 11:19
    mercoledì 13 novembre 2019 11:17
  • Ciao,

    non c'è bisogno di provare ogni combinazione possibile, tanto a te serve solo il massimo.

    Ti spiego meglio con solo 4 variabili per semplicità

            Dim A As Integer = 3
            Dim B As Integer = 1
            Dim C As Integer = 7
            Dim D As Integer = 2
    
            Dim tmpMax As Integer = Math.Max(A, B) ' qui avrai 3, cioè il valore di A
            tmpMax = Math.Max(tmpMax, C) ' ora tmpMax varrà 7, cioè il valore di C
            tmpMax = Math.Max(tmpMax, D) ' qui avrai ancora 7, dato che tmpMax valeva 7, il valore di C, che è maggiore di D



    mercoledì 13 novembre 2019 13:06
  • Aggiungo che, nel caso di utilizzo di una matrice di interi, si può usare la funzione Max della matrice (o meglio, della IEnumerable (Of integer) )

            Dim mtxInt() As Integer = {1, 2, 3, 4, 5, 6, 7}
            Debug.Print(mtxInt.Max.ToString)

    • Contrassegnato come risposta _F_ mercoledì 13 novembre 2019 15:16
    mercoledì 13 novembre 2019 13:11
  • Non mi restituisce il valore più alto, non so cosa faccia.

            Dim SP As String = Label13.Text, CX As Integer, XD1 As Integer = (A + B), XD2 As Integer = (A + C), XD3 As Integer = (A + D), XD4 As Integer = (A + E), XD5 As Integer = (B + C),
                XD6 As Integer = (B + D), XD7 As Integer = (B + E), XD8 As Integer = (C + D), XD9 As Integer = (C + E), XD10 As Integer = (D + E), XA As Integer = 0, XB As Integer = 0,
                XC As Integer = 0, XD As Integer = 0, XE As Integer = 0, XD1X As Integer = 0, XD2X As Integer = 0, XD3X As Integer = 0, XD4X As Integer = 0, XD5X As Integer = 0, XD6X As Integer = 0,
                XD7X As Integer = 0, XD8X As Integer = 0, XD9X As Integer = 0, XD10X As Integer = 0
            '
            If SP = "*2" Then CX = 2
            If SP = "*3" Then CX = 3
            If SP = "*4" Then CX = 4
            If SP = "*5" Then CX = 5
            '
            If A < 40 Then XA = A * CX
            If B < 40 Then XB = B * CX
            If C < 40 Then XC = C * CX
            If D < 40 Then XD = D * CX
            If E < 40 Then XE = E * CX
            '
            If XD1 <= 40 Then XD1X = XD1 * CX
            If XD2 <= 40 Then XD2X = XD2 * CX
            If XD3 <= 40 Then XD3X = XD3 * CX
            If XD4 <= 40 Then XD4X = XD4 * CX
            If XD5 <= 40 Then XD5X = XD5 * CX
            If XD6 <= 40 Then XD6X = XD6 * CX
            If XD7 <= 40 Then XD7X = XD7 * CX
            If XD8 <= 40 Then XD8X = XD8 * CX
            If XD9 <= 40 Then XD9X = XD9 * CX
            If XD10 <= 40 Then XD10X = XD10 * CX
            '
            Dim mtxInt() As Integer = {XA, XB, XC, XD, XE, XD1X, XD2X, XD3X, XD4X, XD5X, XD6X, XD7X, XD8X, XD9X, XD10X}
            '
            Label16.Text = mtxInt.Max.ToString 

    mercoledì 13 novembre 2019 15:09
  • Rettifico, il codice funziona benissimo, grazie è il resto del codice che non ci va d'accordo ma lo risolverò.... spero!?

    Grazie!

    ok! Ho risolto tutto, non era colpa della tua soluzione!

    Grazie ancora vbMizio!


    • Modificato _F_ mercoledì 13 novembre 2019 16:26
    mercoledì 13 novembre 2019 15:16