Ordenacao - estudos preliminares
Considere dados um inteiro maior que zero N na célula (1,1) da planilha, e N números inteiros dispostos na coluna 2 da planilha, ocupando as células (1,2), (2,2), ..., (N,2).
1. Construa uma função que recebe como parâmetro o valor N e devolve o menor valor encontrado na coluna 2, dentre os valores colocados em (1,2), (2,2), ..., (N,2).
2. Construa uma função que recebe como parâmetros o valor N e um número inteiro U, e devolve o índice correspondente à linha, na coluna 2 da planilha, em que o valor U ocorre pela primeira vez. Se U não ocorrer nenhuma vez na coluna 2, considerando as linhas de 1 a N, então essa função deve devolver o valor 0.
3. Construa um procedimento que recebe como parâmetros dois inteiros I e J, e troca os valores encontrados na coluna 2 da planilha, exatamente nas linhas I e J da planilha.
4. Finalmente, construa um procedimento que utiliza os três procedimentos anteriores, para colocar o menor valor de uma lista fornecida de valores na primeira posição da lista. O valor que estiver ocupando originalmente a primeira posição da lista deve ser deslocado para a posição que originalmente era ocupada pelo menor valor.
Por exemplo, se N = 5 e os valores fornecidos na segunda coluna da planilha forem os valores
7, 3, 4, 1, 8
então a primeira função construída deverá apontar que o menor valor fornecido é o número 1. A segunda função construída, se utilizada com U = 1, deverá apontar que a primeira ocorrência desse valor na seqüência fornecida é na posição 4. Finalmente, se o procedimento for utilizado com I = 1 e J = 4, a seqüência original deve ser alterada, resultando em
1, 3, 4, 7, 8
Questões adicionais:
- Que condições devem ser atendidas pela seqüência fornecida para esse procedimento conseguir colocar uma série de números em ordem crescente?
- O que faltaria para esse procedimento conseguir colocar qualquer série de números em ordem crescente?
Dim i As Integer
Dim menor As Integer
i = 2
menor = Cells(1, 1)
Do While i <= N
If Cells(i, 1) < menor Then
menor = Cells(i, 1)
End If
i = i + 1
Loop
menorNumero = menor
End Function
Function ondeMenor(N As Integer, U As Integer) As Integer
Dim i As Integer
Dim onde As Integer
onde = 0
i = 1
Do While (i <= N And onde = 0)
If U = Cells(i, 1) Then
onde = i
End If
i = i + 1
Loop
ondeMenor = onde
End Function
Sub troca(i As Integer, j As Integer)
Dim temp As Integer
temp = Cells(i, 1)
Cells(i, 1) = Cells(j, 1)
Cells(j, 1) = temp
End Sub
Sub arrumaPrimeiro()
Dim menor As Integer
Dim onde As Integer
Dim quant As Integer
quant = Cells(1, 2)
menor = menorNumero(quant)
onde = ondeMenor(quant, menor)
Call troca(1, onde)
End Sub