Estruturas de repetição
em Pascal
Prof. Luis Otavio Alvares
INE/UFSC
1
Lógica de
programação
• ESTRUTURAS DE REPETIÇÃO
•para ...até... faça ..
•enquanto ... faça ..
•repita ... até ...
2
Exemplo Para
• Ler 50 números fornecidos pelo usuário e calcular e exibir a
média.
Pseudocódigo:
1. Início
2. Soma = 0
<<< o acumulador precisa ter um valor inicial
3. Para cont =1 até 50 faça
3.1
ler num
3.2
soma = soma + num
4. Media = soma / cont
5. Mostrar media
6. Fim
3
E se eu quisesse calcular a média de N números?
Lógica de
programação
– Para esse problema construímos um algoritmo que será genérico, ou
seja, que poderá ser usado para calcular a média de quantos números se
quiser!
– Pseudocódigo:
1- Início
2- Mostrar “De quantos valores você quer calcular a média?”
3- Ler QUANT
(aqui se descobre quantas repetições)
4- SOMA = 0
5- Para CONT = 1 até QUANT faça
5.1Ler N
(aqui é lido cada número, um em cada ciclo)
5.2SOMA = SOMA + N
(aqui os valores lidos são acumulados)
6- MEDIA = SOMA / QUANT
(isto está fora do loop)
7- Mostrar MEDIA
8- Fim
4
Estruturas de repetição
em Pascal
5
Estrutura de repetição: comando for
• Comando for
for <variável de controle> := <valor inicial> to
do <comando>;
<valor limite>
for <variável de controle> := <valor inicial> downto <valor limite>
do <comando>;
Um só
comando
to
downto
incrementa
decrementa
+1
-1
6
7
Comando for
for <variável de controle> := <valor inicial> to/downto <valor limite>
do <comando>;
for <variável de controle> := <valor inicial> to/downto <valor limite>
do begin
<comando 1>;
.......
<comando n>;
end;
O(s) comando(s) será(o) executado(s) até o valor limite (inclusive)
O incremento ou decremento é executado automaticamente
após a execução do(s) comando(s)
8
Exemplo
Program testeFor;
var
I,K:integer;
begin
K:= 5;
for I := K+1 to K+3
do writeln ('I= ',I);
readln;
end.
Saída
I= 6
I= 7
I= 8
9
for <variável de controle> := <valor inicial> to <valor limite>
do <comando>
valor inicial
valor limite
expressões
• avaliadas somente uma vez, na entrada do comando
• resultado deve ser do mesmo tipo da variável de controle
variável de controle
• integer ou char
• pode ser utilizada no comando
• pode ser alterada no comando (mas não é recomendável)
10
Exemplo
Program testeFor;
var
I,K:integer;
begin
k:=8;
for I := 5 to K
do begin
k:=7;
writeln('I= ',I ,'
end;
readln;
end.
Saída:
K= ',k );
I= 5
I= 6
I= 7
I= 8
K= 7
K= 7
K= 7
K= 7
11
Exemplo
Program Letras;
var Letra: char;
begin
for Letra := 'a' to 'z'
do write (Letra,' ');
writeln ('Fim');
readln;
end.
Saída:
a b c d e f g h i j k l m n o p q r s t u v w x y z Fim
12
Exercício
Escrever um programa que lê 5 valores, e conta quantos
destes valores são negativos, escrevendo esta informação.
program conta_negativos;
var
numero, cont, neg:integer;
Begin
Neg:=0;
for cont:=1 to 5
do begin
write('Digite um numero inteiro: ');
readln (numero);
if numero<0
then neg:=neg+1;
end;
writeln ('O numero de valores negativos eh ', neg);
readln;
end.
13
Cuidado!!!
• Se o valor da variável de controle do
comando for for alterado explicitamente
dentro do bloco de repetição …
• Exemplo:
saída:
program teste_for;
var
I:integer;
begin
for I:=1 to 10
do begin
writeln('I= ',I);
if I=5 then I:=8;
end;
readln;
end.
I=
I=
I=
I=
I=
I=
I=
1
2
3
4
5
9
10
14
Lembre-se!!!
Qual o valor da variável de controle do for após a execução
do comando for?
Exemplo:
saída:
program teste2_for;
var
I:integer;
begin
for I:=1 to 10
do writeln('I= ',I);
writeln('Valor de I apos o for: ',I);
readln;
end.
I= 1
I= 2
I= 3
I= 4
I= 5
I= 6
I= 7
I= 8
I= 9
I= 10
Valor de I apos o for: 10
15
Só use quando estritamente necessário:
E para forçar o término da repetição? Use um break.
Exemplo :
program teste3_for;
var
I:integer;
begin
for I:=1 to 10
do begin
writeln('I= ',I);
if i=5 then break;
end;
writeln('Valor de I apos o for: ',I);
readln;
end.
saída:
I= 1
I= 2
I= 3
I= 4
I= 5
Valor de I apos o for: 5
Atenção para o valor de
saída da variável de
controle
16
Cuidado!!
• Faça sempre um teste de mesa com os
valores inicial e final do loop do comando for,
pois a maioria dos erros são na primeira ou
na última execução do laço.
• Erros comuns:
– Executar o laço (repetição) uma vez a mais ou a
menos que o desejado
– Atribuir o valor inicial de alguma variável dentro
do laço, quando deveria ser fora
– Não atribuir o valor inicial de uma variável
(principalmente em for s aninhados)
17
Comando de repetição para número fixo de repetições
• número conhecido
For I := -10 to 10 do Writeln(I);
• número desconhecido
Readln ( N );
For I := 1 to N
Do begin
readln ( Nome );
Writeln ( Nome );
end;
18
Exercício
• Faça um programa para calcular e escrever o
valor de S:
S
1 3 5 7
99
    ... 
1 2 3 4
50
var
I:integer;
S:real;
Begin
S:=0;
for I:=1 to 50
do S:=S+(I*2-1)/I;
writeln(S:1:6);
readln;
end.
19
exercício
• Escreva um programa Pascal para informar o
fatorial de um número lido.
20
Exemplo de solução: fatorial
Program Fatorial;
var
num, Fat, I : integer;
begin
write('informe um numero positivo: ');
readln(num);
if num <=0
then writeln('o numero deve ser positivo')
else begin
Fat := 1;
for I:= 2 to num
do Fat := Fat * I;
writeln ( 'Fatorial de ',num,' = ' , Fat);
end;
readln;
end.
21
• Faça um programa para calcular os números
primos menores que 100
22
program primos;
var
n,I:integer;
ehprimo:boolean;
begin
for n:=2 to 99
do begin
ehprimo:=true;
for I:=2 to n-1 do
if (n MOD I)=0 then ehprimo:=false;
if ehprimo then writeln(n,' eh primo');
end;
readln;
end.
23
Exercício
Faça um programa para ler 500 valores e
informar o maior e sua posição
24
Program MaiorEPosicao ;
var N: real; { lido }
Maior: real; { guarda o maior lido }
Posicao: integer; { posicao do maior dos lidos }
K: integer; { variavel de controle do for }
begin
readln(N);
maior:=N; { por enquanto o primeiro é o maior }
Posicao := 1;
for K := 2 to 500
do begin
O que acontece se
readln(N);
entre os números lidos
if N >= Maior
existem valores iguais?
then begin
Maior := N;
Posicao := K;
end;
end; { do comando for }
writeln('Maior lido: ', Maior:5:1, ' na posicao ', Posicao);
readln;
end.
25
Comandos for aninhados
saída
...
for K := 1 to 3
do begin
readln (N);
for L := 1 to N
do writeln(L);
end;
...
...
for K := 1 to 5
do for L := 1 to 3
do writeln(‘K=‘,K, ‘L=‘,L);
...
K=1 L=1
K=1 L=2
K=1 L=3
K=2 L=1
K=2 L=2
K=2 L=3
K=3 L=1
K=3 L=2
K=3 L=3
K=4 L=1
K=4 L=2
K=4 L=3
K=5 L=1
K=5 L=2
K=5 L=3
26
Comando while
Pseudo-linguagem
Pascal
enquanto <condição>
while <condição>
faça <comando >
do <comando >
Um só
comando
27
Exemplo 1:
var
a:integer;
begin
a := 1;
while (a < 5)
do a := a + 1;
writeln('Valor de a = ', a);
readln;
end.
Saída:
Valor de a = 5
Obs. 1) a variável de controle
de término a, neste caso,
também PRECISOU ser
inicializada!
Obs. 2) neste caso, o corpo do
while tem apenas 1 comando,
a:= a +1 !
Exemplo 2:
...
k := 1;
while k < 4
do begin
writeln(‘Iteracao: ‘, k);
k:= k +1;
end;
...
Comando
Composto
Obs.1: a variável de
controle de término k,
neste caso, foi
inicializada com k:=1!
Obs.2: como o corpo do
WHILE tem 2 comandos,
precisa-se usar o
comando composto Begin....End.
Exemplos
...
A := 1;
while A < 5 do A:= A + 1;
writeln(A);
...
...
A := 10; B := 4;
while A – 2 > B + 1
do begin
writeln(A, ' ', B);
A := A - 1;
end;
...
...
A:= 1;
while A <= 5
do begin
writeln(A);
A := A + 1;
end;
...
...
A := 0;
while A < 5
do begin
A := A + 1;
writeln(A);
end;
...
O comando while ...
• Conclusão
– A variável ou variáveis que fazem parte da
condição de término deverão ter seu valor
atribuído através de um comando de leitura ou de
atribuição
• Antes da estrutura de repetição while e
• Dentro da estrutura
Utilização de variável boolean
Exemplos
...
Segue := true;
while Segue
do begin
readln(A);
if A <> 0
then writeln(A)
else Segue := false
end;
...
S := 0;
readln(A);
while A <> 0
do begin
writeln(A);
S := S + 1;
readln(A)
end;
writeln(S);
...
...
Parar := false;
while not Parar
do begin
readln(A);
if A <> 0
then writeln(A)
else Parar := true
end;
...
...
• 1a vez que testa A já
deve ter um valor
• S informa quantos valores
foram lidos
Ex: Escreva um programa que leia o nome e as 3 notas dos alunos de uma classe e
mostre o nome do aluno seguido da sua media. O programa deverá deverá ser
encerrado quando o nome for igual a ‘ZZZ’.
VAR
nome:string;
cont:integer;
media, nota, soma:real;
BEGIN
write('Digite o nome do aluno. (ZZZ para encerrar): ');
readln(nome);
while nome<>'ZZZ'
do begin
soma:=0;
for cont:=1 to 3
do begin
write ('Digite nota: ');
readln (nota);
soma:=soma+nota;
end;
media:=soma/3;
writeln('A media do aluno ',nome,' eh ', media:1:2);
writeln('Digite o nome do aluno. (ZZZ para encerrar): ');
readln(nome);
end;
readln;
END.
Estruturas de repetição
•para ... faça ..
•enquanto ... faça ..
•repita ... até ...
Comando repeat
Pseudo-linguagem
repita
<comandos >
até <condição>
Pascal
repeat
<comandos >
until <condição>
vários
comandos
Exemplos
...
...
Achou := false;
repeat
readln(Nome);
writeln(Nome);
if Nome = ‘Ana Terra’
then Achou := true
until Achou;
A := 0;
repeat
A := A + 1;
writeln(A)
until A = 10;
...
...
...
repeat
readln(Nome);
writeln(Nome);
writeln(‘Outro ? (s/n) ’);
readln(Resposta)
until (Resposta=‘n’);
...
Exercício
Faça um programa Pascal que leia 10 valores positivos e informe
o maior deles. Valores não positivos devem ser ignorados.
var
I:integer;
maior,N:real;
begin
maior:=0;
for I:=1 to 10
do begin
repeat
write('forneca o ', I, '. numero positivo: ');
readln(N);
if not(N>0)
then writeln('numero invalido!!');
until N>0;
if N>maior then maior:=N;
end;
writeln('o maior numero fornecido foi: ',maior:1:3);
readln;
end.
37
Diagramas de sintaxe
Comando while
WHILE
Expressão lógica
DO
comando
Comando repeat
REPEAT
Comandos
Separados
por ;
Comandos
Separados por ;
UNTIL
Expressão lógica
Comando
;
Download

Slide - UFSC