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