Upload
phungphuc
View
226
Download
0
Embed Size (px)
Citation preview
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Introdução à Computação
Estruturas de Repetição II
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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
– Exemplos de aplicação com ciclos encadeados.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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.
Ciclos controlados por contador
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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 lidoslblMed
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Resolução - Código
Option ExplicitPrivate 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 / neEnd 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 do ciclo!
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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
NextEnd if...
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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!
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Resolução - Form
Option Explicit
Private Sub cmdSair_Click() EndEnd 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.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil
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 então é capicua.
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 inicial e final a assumir pela v.c. do ciclo.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Resolução - Traçagem
Iteração alg aux cap aux <> 00 121 0
1 TRUE
1
12
1
2 TRUE
2
1
12
3 TRUE
1
0
121
4 FALSE
aux = numcap = 0Do While aux <> 0
alg = aux Mod 10 aux = aux \ 10 cap = cap * 10 + alg
Loop
Teste com num = 121
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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 estiver errado.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Resolução – Código (I)
Option Explicit
Private Sub cmdSair_Click() EndEnd 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.
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Resolução – Código (cont.)
For x = 1 To nanota = 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
End Sub
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.
Ciclo
exte
rior
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)
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Formatação de saída de dados
Formatos especificados pelo programador - Símbolos utilizados0 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
Consultar pag. 22 e 23 da sebenta
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil Formatação de saída de dados
Formatos standardGeneral 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 milharesPercent Multiplica o valor por 100 e acrescenta símbolo %
Scientific Usa notação científica padrãoCurrency Formato monetário
> Passa todos os caracteres para maiúsculas< Passa todos os caracteres para minúsculas
O que é pedido O que é mostradomeuTexto = Format(256.3, “###0.000”) 256.3meuTexto = Format(3256.3, “fixed”) 3256.30meuTexto = Format(0.125, “#.0000”) 0.1250
meuTexto = Format(14.3256, “000.0”) 014.3meuTexto = Format(“Olá”, “>”) OLÁ
Exemplos
Estruturas de Repetição II ISEP–DEI, Angelo Martins © 2006ISEP-DEI, António Silva, © 2007
APROGCivil 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– O que permite agilizar a resolução de problemas,
identificando blocos conhecidos que se repetem frequentemente em problemas.