APROG
Civil
Introdução à Computação
APROG
Civil
Conteúdo
●
Ciclo
For ... Next
–
Apresentação da sintaxe e de exemplos deste ciclo.
●Validação
de entrada de dados
–
Apresentação de dois algoritmos de validação de entrada de
dados através de InputBox.
●
Ciclos
encadeados
APROG
Civil
Ciclo For … Next
●
A estrutura FOR...NEXT permite construir de uma
forma compacta ciclos que percorrem o conjunto de
valores de um intervalo
predefinido
.
–
Sintaxe (geral)
Para <variável> = <valor inicial> até <valor final> <bloco de instruções>
Próximo valor <variável> –
Explicação
●
A
variável de controlo
do ciclo vai percorrer o intervalo de valores
compreendidos entre o
valor inicial
e o
valor final
.
●
O ciclo termina quando o valor dessa variável ultrapassar o
valor
final
(num ciclo crescente).
●
A
variável de controlo
do ciclo deve ser do tipo integer e o seu
incremento (ou decremento) tem que ser um valor inteiro.
APROG
Civil
Sintaxe do ciclo For … Next
●
Há duas variantes deste ciclo.
–
Ciclo com incremento unitário
For <variável> = <val_inicial> To <val_final> <bloco de instruções>
Next
–
Ciclo com incremento definido pelo programador (positivo ou
negativo)
For <variável> = <val_inicial> To <val_final> Step <valor> <bloco de instruções>
Next Em ambos os casos:
• o incremento ou decremento da variável de controle do ciclo é
automático.
• A condição de funcionamento do ciclo é implícita.
APROG
Civil
Exemplo de aplicação
●
Elabore um programa que leia uma sequência de N
números inteiros, em que N é dado pelo utilizador. O
programa deverá apresentar a média dos números
introduzidos. Deverá ainda apresentar cada um dos
números lidos.
●
Sugestão:
–
Como o número de elementos a ler é antecipadamente
conhecido (neste caso, dado pelo utilizador) pode ser
utilizado um ciclo For.
APROG
Civil
Resolução - Form
txtNE - TextBox para introdução do número de elementos a ler
InputBox para leitura dos elementos
lstNUm - ListBox para apresentar os números lidos
APROG
Civil
Resolução - Código
Option Explicit
Private Sub cmdLer_Click()
Dim ne As Integer, x As Integer, s As Long, num As Integer lstNum.Clear lblMed.Caption = "" ne = Val(txtNE.Text) If ne <= 0 Then
MsgBox "Não há elementos a considerar!“, vbCritical Else
For x = 1 To ne
num = Val(InputBox("Elemento nº " & x)) lstNum.AddItem num s = s + num Next lblMed.Caption = s / ne End If End Sub
Leitura e validação do número de elementos da sequência.
Termina quando x ultrapassar o valor de ne
Incrementa x e volta ao início do ciclo.
A variável de controlo não pode ser alterada dentro
APROG
Civil
Execução passo a passo
Iteração ne x x <= ne num s 3 0 0 0 1 1 True 2 0+2 -> 2 2 2 True 3 2+3 -> 5 3 3 True 4 5+4 -> 9 4 4 False Teste com sequência de 3 elementos: 2,3,4 ... ne = Val(txtNE.Text) If ne <= 0 Then MsgBox "Não há... Else For x = 1 To ne num = Val(InputBox...) lstNum.AddItem num s = s + num Next End if ...
APROG
Civil
Ciclos encadeados
●
Elabore um programa que apresente numa ListBox
todos as capicuas existentes num intervalo dado pelo
utilizador (os limites do intervalo devem ser
validados).
●
Resolução
–
Um número é capicua se for idêntico à sequência dos seu
algarismos, por ordem inversa.
–
É preciso verificar se cada um dos números do intervalo é
capicua.
((((0*10+5)*10+4)*10+3)*10+2)*10+1 -> 54321 12345 <> 54321 => não é capicua!
APROG
Civil
Resolução - Form
Option Explicit
Private Sub cmdSair_Click() End
End Sub
lstCap – ListBox com as capicuas do intervalo
txtInf e txtSup – TextBoxes com limite inferior e superior
MsgBox com a mensagem de erro no intervalo.
APROG
Civil
Private Sub cmdProc_Click()
Dim num As Long, aux As Long, cap As Long, alg As Integer Dim inf As Long, sup As Long
lstCap.Clear
inf = Val(txtInf.Text) sup = Val(txtSup.Text)
If inf < 0 Or inf > sup Then
MsgBox "Atenção: Intervalo errado!", vbCritical Else
For num = inf To sup aux = num
cap = 0
Do While aux <> 0 alg = aux Mod 10 aux = aux \ 10
cap = cap * 10 + alg Loop
If cap = num Then
lstCap.AddItem cap End If Next End If End Sub
Resolução - Código
Leitura e validação dos limites do intervaloÉ calculado o “inverso” de cada número do intervalo.
Se o número for igual ao inverso
Cada número é copiado para aux de forma a ser processado sem afectar o valor de num
A variável de controle (v.c.) do ciclo num foi também usada para guardar os sucessivos valores a processar. Fizeram-se coincidir os limites da gama a processar com os valores
APROG
Civil
Resolução - Traçagem
Iteração alg aux cap aux <> 0 0 121 0 1 TRUE 1 12 1 2 TRUE 2 1 12 3 TRUE 1 0 121 4 FALSE aux = num cap = 0 Do While aux <> 0 alg = aux Mod 10 aux = aux \ 10
cap = cap * 10 + alg Loop
Teste com num = 121
APROG
Civil
Validação de entrada de dados
●
Problema:
–
Pretende-se validar os dados introduzidos pelo utilizador
durante um ciclo, através de InputBoxes. Caso os dados
estejam errados, o utilizador deve voltar a introduzi-los.
●
Solução
–
Utiliza-se um ciclo para controlar a entrada de dados. Há
duas abordagens possíveis:
●
Ciclo DLU / DLW
– A leitura é feita dentro do ciclo.
●
Ciclo DWL / DUL
– A primeira leitura é feita fora do ciclo. Só entra no ciclo se o valor lido
APROG
Civil
Validação - Exemplo
●
Exemplo: leitura de notas entre 0 e 20
–
DLU
–
DWL
Do
nota = Val(InputBox("Nota nº " & x)) Loop Until nota >= 0 And nota <= 20
A InputBox informa também o utilizador do erro.
O ciclo só termina quando a nota for válida.
nota = Val(InputBox("Nota nº " & x)) Do While nota < 0 Or nota > 20
nota = Val(InputBox(“Erro: Introduza novamente “ _ & “ a nota nº " & x))
Loop
O ciclo só é executado se a nota for inválida.
APROG
Civil
Exemplo de aplicação
●
Elabore um programa que leia as notas dos alunos de
uma disciplina (número de alunos dado pelo utilizador)
e apresente a média das notas e a melhor e a pior
nota. Devem também ser apresentadas numa ListBox
todas as notas lidas.
●
Notas para a resolução:
–
O número de alunos deve ser validado (>0)
–
Como o número de alunos é conhecido, pode utilizar-se um
ciclo For para leitura das notas. Para cada nota usa-se um
ciclo para validar a nota (entre 0 e 20).
–
A leitura das notas é efectuada através de uma InputBox.
–
Para cada nota lida, verificar se é menor do que a pior ou
maior do que a melhor.
APROG
Civil
Resolução - Form
MsgBox com a mensagem de erro de Nº de alunos inválido.
InputBox para intrudução de cada uma das notas.
TextBox para introdução do Número de alunos. L i s t B o x p a r a apresentar as notas 3 Label para apresentar resultados. botão cmdLer ao qual se associa o programa
APROG
Civil
Resolução – Código (I)
Option Explicit
Private Sub cmdSair_Click() End
End Sub
Private Sub cmdLer_Click()
Dim na As Integer, nota As Integer, soma As Integer Dim max As Integer, min As Integer, x As Integer
na = Val(txtNA.Text) If na <= 0 Then
MsgBox "Erro: Número de alunos inválido!" Else
soma = 0
max = -1 ' valores iniciais min = 21
' continua ....
Comentário
Os valores iniciais devem, neste caso, ser impossíveis. Assim, na primeira iteração são de certeza alterados.
Variáveis para a melhor e pior notas até ao momento.
APROG
Civil
Resolução – Código (cont.)
For x = 1 To na
nota = Val(InputBox("Nota nº " & x)) Do While nota < 0 Or nota > 20
nota = Val(InputBox("Nota inválida! - Nota nº " & x)) Loop
lstNotas.AddItem Format(x, "00") & " - " & nota soma = soma + nota
If nota > max Then ' compara com melhor anterior max = nota
End If
If nota < min Then ' compara com pior anterior min = nota
End If Next
lblMed.Caption = soma / na ' calcula a média das notas lblMelhor.Caption = max
lblPior.Caption = min End If
Ciclo interior para validação da nota.
Se a nota é maior do que o máximo actual passa a ser o novo máximo.
Se a nota é menor do que o mínimo actual passa a ser o novo mínimo.
A função Format permite formatar o resultado de uma expressão de
acordo com as instruções contidas numa “string” de formatação.
Sintaxe:
Format
(
expressão
, string_de_formatação)
APROG
Civil
Formatação de saída de dados
Formatos especificados pelo programador - Símbolos utilizados 0 Localizador de dígitos Mostra um dígito ou um zero
# Localizador de dígitos Mostra um dígito ou nada . Separador decimal
, Separador dos milhares
% Localizador de percentagem Resultado da expressão multiplicado por 100, com % na posição especificada
APROG
Civil
Formatação de saída de dados
Formatos standard
General Number Número sem separador dos milhares
Fixed Nº c/ pelo menos 1 dígito à esquerda e 2 à direita do ponto dec. Standard Como o Fixed mas com separador dos milhares
Percent Multiplica o valor por 100 e acrescenta símbolo % Scientific Usa notação científica padrão
Currency Formato monetário
> Passa todos os caracteres para maiúsculas
< Passa todos os caracteres para minúsculas
O que é pedido O que é mostrado
meuTexto = Format(256.3, “###0.000”) 256.3
meuTexto = Format(3256.3, “fixed”) 3256.30
meuTexto = Format(0.125, “#.0000”) 0.1250
meuTexto = Format(14.3256, “000.0”) 014.3
meuTexto = Format(“Olá”, “>”) OLÁ
APROG
Civil
Conclusão
●
Estudamos dois ciclos:
–
Do … Loop
●
4 variantes – DWL, DUL, DLW, DLU
●
Pode ser utilizado em qualquer situação.
–For … Next
●
2 variantes – ciclo crescente e decrescente
●Só pode ser aplicado a intervalos de valores.
●
Os limites do intervalo têm que ser numéricos, inteiros e constantes.
●O incremento tem que ser constante.
●
Introduzimos o conceito de padrão
–