AIUTO PROGRAMMA VISUAL BASIC!?

ciao,

devo fare un programma visual basic, e vorrei sapere come si fa a sapere se mi danno alcuni numeri (num) se sono ordinati in modo crescento o decrescente?

ALLA MIGLIORE PRIMA RISPOSTA 10 PUNTI!

Update:

no, parlo del visual basic (VB) 6.0, no quello di excel..

Comments

  • Ammetto che non sia scritto molto bene (cercate di capirmi... sono le 2.30 di notte!)

    ma dovrebbe funzionare... vedi se fa al caso tuo:

    ---------------------------------------------------------------------------------------------------

    VB6 code

    ---------------------------------------------------------------------------------------------------

    Option Explicit

    Private Enum enSort

    enNoSort = 0 'Valori non ordinati

    enSortAsc = 1 'Valori in ordine ascendente

    enSortDesc = 2 'Valori in ordine discendente

    enAllSameValue = 3 'Valori tutti uguali

    End Enum

    'un pulsante tanto per attivare il tutto...

    '

    Private Sub Command1_Click()

    Dim i As Integer

    'Qualche divagazione per imparare a compilare gli array...

    '4 array di esempio: 2 dichiarati di dimensione fissa, 2 variabile.

    'ci serviranno per provare la funzione

    'L'array così dichiarato è allocato ad una dimensione fissa e non può essere riallocato

    Dim iArrayAsc(0 To 9) As Integer '(NB: sono 10 elementi!)

    Dim iArrayDesc(0 To 9) As Integer

    'L'array così dichiarato è allocato ad una dimensione variabile e può essere riallocato.

    Dim iArrayUnsorted() As Integer

    Dim iArraySameValue() As Integer

    'Prima di essere usato va dimensionato almeno una volta. L'istruzione ReDim ridefinisce

    'la dimensione (Solo ultima dimensione in array polidimensionali)

    ReDim iArrayUnsorted(0 To 9) '(NB: sono 10 elementi!)

    ReDim iArraySameValue(0 To 9) '(NB: sono 10 elementi!)

    'Compiliamo i 4 array per provare...

    'Assegna dati ad array con contenuto ordinato ascendente

    For i = 0 To 9

    iArrayAsc(i) = i 'assegna il valore i all'elemento i-esimo dell'array.

    'se l'array fosse polidimensionale si va per coordinate... come nella battaglia navale :)

    'Assegna dati ad array con contenuto ordinato discendente

    iArrayDesc(i) = 9 - i 'si poteva anche fare con un for con step -1, ovviamente...

    'Assegna sempre lo stesso valore tutti elementi array

    iArraySameValue(i) = 10

    Next i

    '(assegnamo valori sparsi al terzo array, che ci restituirà esito "non ordinato")

    iArrayUnsorted(0) = 1

    iArrayUnsorted(1) = 13

    iArrayUnsorted(2) = 5

    iArrayUnsorted(3) = 6

    iArrayUnsorted(4) = 56

    iArrayUnsorted(5) = 34

    iArrayUnsorted(6) = 11

    iArrayUnsorted(7) = 2

    iArrayUnsorted(8) = 3

    iArrayUnsorted(9) = 4

    'Interroghiamo gli array...

    Debug.Print CheckArraySort(iArrayAsc())

    Debug.Print CheckArraySort(iArrayDesc())

    Debug.Print CheckArraySort(iArrayUnsorted())

    Debug.Print CheckArraySort(iArraySameValue())

    End Sub

    ' CheckArraySort

    '

    ' Verifica sequenzialità array

    '

    ' Parameters:

    ' iCheckArray [IN] Array da verificare

    '

    ' Returns:

    ' Codice di relazione definito da enumerazione enSort

    '

    '

    Private Function CheckArraySort(ByRef iCheckArray() As Integer) As enSort

    Dim i As Integer

    Dim bAsc As Boolean

    Dim bDesc As Boolean

    bAsc = True

    bDesc = True

    'LBound e UBound restituiscono gli indici rispettivamente inferiore e superiore della matrice

    For i = LBound(iCheckArray) To UBound(iCheckArray) - 1

    bAsc = bAsc And (iCheckArray(i) <= iCheckArray(i + 1))

    bDesc = bDesc And (iCheckArray(i) >= iCheckArray(i + 1))

    'evita iterazioni successive: è sufficiente una discordanza a invalidare l'ordinamento!

    If Not (bAsc Or bDesc) Then Exit For

    Next i

    Select Case True

    Case (bAsc And Not bDesc): CheckArraySort = enSortAsc

    Case (bDesc And Not bAsc): CheckArraySort = enSortDesc

    Case (Not bAsc And Not bDesc): CheckArraySort = enNoSort

    Case (bAsc And bDesc): CheckArraySort = enAllSameValue

    End Select

    End Function

    ---------------------------------------------------------------------------------------------------

    PS: il codice era diligentemente indentato, ma a yahoo questo non importa molto e te lo sbatte tutto allineato a sx... nell'IDE dovrebbe risultare un po' più leggibile

  • è sufficiente memorizzarli in un array e poi confrontarli a coppie con un ciclo for che scandisce tutto l'array

    se il prima è maggiore del secondo sempre allora è decrescente

    se il primo è minore del secondo sempre allora è crescente

    se no non è ordinato

  • Un sito mille risposte ! mica una !

  • Parli del visual basic di excel????

    se si allora presumo che i numeri devono essere scritti a mano sulle celle di excel in riga (nella prima riga)

    Sub Macro1()

    If Cells(1, 1).Value > Cells(1, 2).Value And Cells(1, 2).Value > Cells(1, 3).Value And Cells(1, 3).Value > Cells(1, 4).Value And Cells(1, 4).Value > Cells(1, 5).Value Then

    MsgBox "Ordine decrescente"

    ElseIf Cells(1, 1).Value < Cells(1, 2).Value And Cells(1, 2).Value < Cells(1, 3).Value And Cells(1, 3).Value < Cells(1, 4).Value And Cells(1, 4).Value < Cells(1, 5).Value Then

    MsgBox "Ordine crescente"

    Else

    MsgBox "I numeri non sono ordinati"

    End If

    End Sub

    Questo è il codice

Sign In or Register to comment.