Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2016
    Messaggi
    3

    [Primissime armi] Ho un dubbio sul funzionamento di questo codice Select Case

    Salve a tutti,
    ho cominciato qualche giorno fa ad interessarmi alla programmazione e, nello specifico, a Visual Basic. Sto leggendo il più possibile da libri, siti web, ecc. ma mi pare di capire che la migliore scuola è quella sul campo, per cui sto provando a risolvere alcuni esercizietti che ho trovato in rete.

    L'esercizio in questione richiede di stampare a video il peso minore, controllare se i pesi sono uguali, controllare se i pesi rientrano nel range 40-180 kg.

    Io ho scritto il codice più sotto, che nella maggior parte dei casi funziona bene, mentre in altri no. Ad esempio: se ho due valori di 47 e 48, mi dice che i valori non rientrano nel range...

    Immagino che il mio errore consista nell'aver messo AND nel SELECT CASE, ma non capisco perché funziona bene in molti casi.

    Immagino che tali problemi siano fin troppo elementari per chi mastica un minimo di programmazione, ma da qualche parte si dovrà pur cominciare, no?

    form.PNG


    codice:
    Private Sub CommandButton1_Click()
    
    
    Dim peso1, peso2 As Single
    
    
    peso1 = Val(TextBox1)
    peso2 = Val(TextBox2)
    
    
    Select Case (peso1 And peso2)
        Case 40 To 180
            If (peso1 <> peso2) Then
                If (peso1 < peso2) Then
                    MsgBox ("Il peso minore è" & " " & peso1 & " " & "kg")
                Else
                    MsgBox ("Il peso minore è" & " " & peso2 & " " & "kg")
                End If
            Else
                MsgBox ("Entrambi gli oggetti pesano" & " " & peso1 & " " & "kg")
            End If
        Case Else
            MsgBox ("Sono ammessi solo valori compresi tra 40 e 180 kg")
    End Select
    
    
    
    End Sub

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ti confermo che l'errore è nell'usare AND nel Select Case.
    Evidentemente quello che hai letto sui libri non l'hai ancora capito.
    Meglio fare una ripassatina.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2016
    Messaggi
    3
    Ok, ho risolto così. Anche se mi rimane il dubbio sul perché il precedente metodo funzionasse per la maggior parte delle possibili coppie di valori.

    Mi chiedevo se la nuova formulazione non fosse eccessivamente ridondante. Dite che si può risparmiare qualche riga di codice?

    codice:
    Private Sub CommandButton1_Click()
    
    
    Dim peso1, peso2 As Single
    
    
    peso1 = Val(TextBox1)
    peso2 = Val(TextBox2)
    
    
        If ((peso1 >= 40) And (peso1 <= 180)) And ((peso2 >= 40) And (peso2 <= 180)) Then
            If (peso1 <> peso2) Then
                If (peso1 < peso2) Then
                    MsgBox ("Il peso minore è" & " " & peso1 & " " & "kg")
                Else
                    MsgBox ("Il peso minore è" & " " & peso2 & " " & "kg")
                End If
            Else
                MsgBox ("Entrambi gli oggetti pesano" & " " & peso1 & " " & "kg")
            End If
        Else
            MsgBox ("Sono ammessi solo valori compresi tra 40 e 180 kg")
        End If
    
    
    End Sub

  4. #4
    Quote Originariamente inviata da pink87 Visualizza il messaggio
    ...Anche se mi rimane il dubbio sul perché il precedente metodo funzionasse per la maggior parte delle possibili coppie di valori.
    L' operatre AND esegue una congiunzione logica tra due espressioni Boolean oppure una congiunzione bit per bit tra due espressioni numeriche.


    Se scrivi: Debug.Print((47 And 48).ToString) vedrai che il risultato della congiunzione bit per bit è = 32.

    Per cui:

    Select Case 32
    Case 40 to 180.... 32 è fuori range


    Riguardo al risparmiare codice... risparmiare si può sempre. Occorre vedere se ne vale la pena.

    Ad esempio dichiarando una unica matrice e facendo un Sort, in modo da porre gli elementi in ordine crescente.

    In tal modo se Elemento1 >= 40 lo sarà sicuramente anche Elemento2, e se Elemento2 <= 180 lo sarà sicuramente anche Elemento1. Se non sono uguali il peso minore è sicuramente Elemento1 senza bisogno di altra verifica.
    Ultima modifica di eziogsv; 21-03-2016 a 19:40

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2016
    Messaggi
    3
    Ti ringrazio molto! Mi hai dato diversi spunti interessanti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.