exercícios - aula do dia 18

exercícios - aula do dia 18

por Flávio Soares Correa da Silva -
Número de respostas: 0

Senhores,

acho que descobri o motivo pelo qual nossos exercícios de hoje não estavam funcionando.

Se for mesmo o que eu acho que é, esbarramos - vejam só que coisa - em um bug do Excel.

Depois de várias tentativas, observei que o problema estava na identificação do tipo As Integer na chamada da Sub de dentro da Function. Daí me lembrei que no ano passado nós havíamos encontrado um bug na definição dos tipos de variáveis internas, e tentei resolver da mesma maneira que fizemos no ano passado: separando linha por linha as definições das variáveis.

Ou seja, em vez de

Dim x, y As Integer

escrevi

Dim x As Integer

Dim y As Integer

Funcionou!

Por favor estudem e testem o programa abaixo:

Sub Troca(p1 As Integer, p2 As Integer, c As Integer)
    Dim u As Integer
    u = Cells(p1, c)
    Cells(p1, c) = Cells(p2, c)
    Cells(p2, c) = u
End Sub

Function PosicaoMenor(inicio As Integer, fim As Integer, c As Integer) As Integer
    Dim i As Integer
    Dim posMenor As Integer
    Dim menor As Integer
    menor = Cells(inicio, c)
    posMenor = inicio
    i = inicio + 1
    Do While (i <= fim)
        If (menor > Cells(i, c)) Then
            menor = Cells(i, c)
            posMenor = i
        End If
    i = i + 1
    Loop
    PosicaoMenor = posMenor
    Call Troca(inicio, posMenor, c)
End Function

Observem, entretanto, que a nossa lista de exercícios de hoje ficou com muitas pendências! Por favor, se tiverem tempo, procurem fazer pelo menos alguns dos exercícios propostos, para não ficarmos muito atrasados com os exercícios.

Observem também o programa abaixo. Ele faz a mesma coisa que o de cima, mas de uma forma mais organizada. Por favor estudem esse programa, testem e procurem entender por que ele é melhor organizado. Na próxima aula esse será um de nossos assuntos.

Sub Troca(p1 As Integer, p2 As Integer, c As Integer)
    Dim u As Integer
    u = Cells(p1, c)
    Cells(p1, c) = Cells(p2, c)
    Cells(p2, c) = u
End Sub

Function PosicaoMenor(inicio As Integer, fim As Integer, c As Integer) As Integer
    Dim i As Integer
    Dim posMenor As Integer
    Dim menor As Integer
    menor = Cells(inicio, c)
    posMenor = inicio
    i = inicio + 1
    Do While (i <= fim)
        If (menor > Cells(i, c)) Then
            menor = Cells(i, c)
            posMenor = i
        End If
    i = i + 1
    Loop
    PosicaoMenor = posMenor
End Function

Sub MAESTRO()
    Dim iniMaestro As Integer
    Dim fimMaestro As Integer
    Dim colMaestro As Integer
    Dim posMaestro As Integer
    iniMaestro = Cells(1, 1)
    fimMaestro = Cells(2, 1)
    colMaestro = Cells(3, 1)
    posMaestro = PosicaoMenor(iniMaestro, fimMaestro, colMaestro)
    Call Troca(iniMaestro, posMaestro, colMaestro)
End Sub