Oppure

Loading
27/06/09 12:53
genuzzu
Questo codice dovrebbe restituirmi l' ordine di tre numeri per grandezza... ma li ordina in modo sbagliato...
Private Sub Command2_Click()
a = InputBox("inserisci il primo numero")
b = InputBox("inserisci il secondo numero")
c = InputBox("inserisci il terzo numero")
If a > b Then
    If b > c Then
        MsgBox ("l' ordine è " & a & " " & b & " " & c & "!")
    Else
        If a > c Then
            MsgBox ("l' ordine è " & a & " " & c & " " & b & "!")
        Else
            MsgBox ("l' ordine è " & c & " " & b & " " & a & "!")
        End If
        End If
Else
    If a > c Then
        MsgBox ("l' ordine è " & b & " " & a & " " & c & "!")
    Else
        If c > b Then
            MsgBox ("l' ordine è " & c & " " & a & " " & b & "!")
        Else
            MsgBox ("l' ordine è " & b & " " & a & " " & c & "!")
        End If
    End If
End If
End Sub

:(
edit: ma visualizza quello nelle parentesi come commento? lol
Ultima modifica effettuata da genuzzu 27/06/09 12:55
aaa
27/06/09 13:55
Louis
Guarda a mio avviso l'approccio con il problema é sbagliato. Dovresti usare le matrici.
In particolare c'é un algoritmo chiamato BubbleSort che provvede con facilità all'ordinamento crescente o decrescente di una serie numerica. Fai una ricerca ...
8-)
aaa
27/06/09 14:03
Enemy
Ho letto gia' un posto che non ricordo il link, puoi utilizzare un ciclo, per il codice te l'ho riadattato. Poi la modifica e' intuitiva.
L'ordine di stampa e' in modo decrescente.


a = InputBox("inserisci il primo numero")
b = InputBox("inserisci il secondo numero")
c = InputBox("inserisci il terzo numero")

Dim i, k, j As Integer
Dim stamp(3) As Integer

stamp(1) = a
stamp(2) = b
stamp(3) = c

 For i = 1 To 3
            k = stamp(i)
            For j = 0 To 3 - i
                If stamp(i) < stamp(i + j) Then
                    stamp(i) = stamp(i + j)
                    stamp(i + j) = k
                    k = stamp(i)
                End If
            Next j
        Next i
        For i = 1 To 3
            MsgBox ("L' ordine e' " & stamp(i))

        Next i



aaa
27/06/09 14:31
genuzzu
Il mio problema è che ho un compito che mi dice che devo arrivarci usando degli if annidati. In quel modo non è possibile? Mi sa che ha sbagliato il professore...
aaa
29/06/09 5:06
Louis
Ciao gennuzzo,
Se si tratta di permutazioni semplici senza ripetizione,
ad esempio degli elementi dell'insieme {a,b,c} sono 3! = 6: abc, acb, bac, bca, cab, cba.
il problema potrebbe trovare la seguente soluzione:


Private Sub Command2_Click()
    Dim a As Integer, b As Integer, c As Integer
    
    a = InputBox("inserisci il primo numero")
    b = InputBox("inserisci il secondo numero")
    c = InputBox("inserisci il terzo numero")
    
    'a,b,c:
    If a > b And c < a And c < b Then
        MsgBox ("l' ordine è" & Space(1) & a & "a" & "," & Space(1) & b & "b" & Space(1) & "," & Space(1) & c & "c" & Space(1) & "!")
    'a,c,b:
    ElseIf a > c And b < a And b < c Then
        MsgBox ("l' ordine è" & Space(1) & a & "a" & "," & Space(1) & c & "c" & Space(1) & "," & Space(1) & b & "b" & Space(1) & "!")
    'b,a,c,:
    ElseIf b > a And c < b And c < a Then
        MsgBox ("l' ordine è" & Space(1) & b & "b" & "," & Space(1) & a & "a" & Space(1) & "," & Space(1) & c & "c" & Space(1) & "!")
    'b,c,a:
    ElseIf b > c And a < b And a < c Then
        MsgBox ("l' ordine è" & Space(1) & b & "b" & "," & Space(1) & c & "c" & Space(1) & "," & Space(1) & a & "a" & Space(1) & "!")
    'c,a,b:
    ElseIf c > a And b < c And b < a Then
        MsgBox ("l' ordine è" & Space(1) & c & "c" & "," & Space(1) & a & "a" & Space(1) & "," & Space(1) & b & "b" & Space(1) & "!")
    'c,b,a:
    ElseIf c > b And a < c And a < b Then
        MsgBox ("l' ordine è" & Space(1) & c & "c" & "," & Space(1) & b & "b" & Space(1) & "," & Space(1) & a & "a" & Space(1) & "!")
    End If
End Sub


Fai delle prove e vedi se il problema è quello sopra detto, non vorrei aver sbagliato tutto; mi raccomando !! :-|
aaa
29/06/09 16:40
genuzzu
Avevo sbagliato un' altra cosa... elseif è un alternativa, ma in questo caso non serviva. Grazie lo stesso!
aaa