Você está na página 1de 39

Estruturas de repetição

em Pascal

Eng. Maurício Filipe João


Quembo
Lógica de
programação

• ESTRUTURAS DE REPETIÇÃO

•para ...até... faça ..

•enquanto ... faça ..

•repita ... até ...


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
E se eu quisesse calcular a média de N números? Fundamento 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.1- Ler N (aqui é lido cada número, um em cada ciclo)
5.2- SOMA = SOMA + N (aqui os valores lidos são acumulados)
6- MEDIA = SOMA / QUANT (isto está fora do loop)
7- Mostrar MEDIA
8- Fim
Estruturas de repetição em Pascal
Estrutura de repetição: comando for

• Comando for

for <variável de controle> := <valor inicial> to <valor limite>


do <comando>;

for <variável de controle> := <valor inicial> downto <valor limite>


do <comando>;

to incrementa +1
Um só downto decrementa -1
comando
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)
Exemplo
Program testeFor;
var Saída
I,K:integer;
begin I= 6
K:= 5; I= 7
for I := K+1 to K+3 I= 8
do writeln ('I= ',I);
readln;
end.
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)
Exemplo
Program testeFor;
var
I,K:integer;
begin Saída:
k:=8;
for I := 5 to K I= 5 K= 7
do begin I= 6 K= 7
k:=7; I= 7 K= 7
writeln('I= ',I ,' K= ',k ); I= 8 K= 7
end;
readln;
end.
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
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.
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; I= 1
var I= 2
I:integer; I= 3
begin I= 4
for I:=1 to 10 I= 5
do begin I= 9
writeln('I= ',I); I= 10
if I=5 then I:=8;
end;
readln;
end.
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; I= 1
var I= 2
I:integer; I= 3
begin I= 4
for I:=1 to 10 I= 5
do writeln('I= ',I); I= 6
writeln('Valor de I apos o for: ',I); I= 7
readln; I= 8
end. I= 9
I= 10
Valor de I apos o for: 10
Só use quando estritamente necessário:
E para forçar o término da repetição? Use um break.

Exemplo : saída:

program teste3_for; I= 1
var I= 2
I:integer; I= 3
begin I= 4
for I:=1 to 10 I= 5
do begin Valor de I apos o for: 5
writeln('I= ',I);
if i=5 then break;
end;
writeln('Valor de I apos o for: ',I); Atenção para o valor de
readln; saída da variável de
end. controle
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)
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;
Exercício
• Faça um programa para calcular e
escrever o valor de S:
1 3 5 7 99
S     ... 
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.
exercício
• Escreva um programa Pascal para
informar o fatorial de um número lido.
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.
• Faça um programa para calcular os
números primos menores que 100
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.
Exercício
Faça um programa para ler 500 valores e
informar o maior e sua posição
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.
Comandos for aninhados
saída
... ... K=1 L=1
K=1 L=2
for K := 1 to 3 for K := 1 to 5 K=1 L=3
do begin do for L := 1 to 3 K=2 L=1
readln (N); do writeln(‘K=‘,K, ‘L=‘,L); K=2 L=2
for L := 1 to N K=2 L=3
... K=3 L=1
do writeln(L); K=3 L=2
end; 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
Comando while

Pseudo-linguagem Pascal
enquanto <condição> while <condição>
faça <comando > do <comando >

Um só
comando
Exemplo 1:

var Obs. 1) a variável de controle


a:integer; de término a, neste caso,
begin também PRECISOU ser
a := 1; inicializada!
while (a < 5)
do a := a + 1; Obs. 2) neste caso, o corpo do
writeln('Valor de a = ', a); while tem apenas 1 comando,
readln; a:= a +1 !
end.

Saída:
Valor de a = 5
Exemplo 2:

Obs.1: a variável de
controle de término k,
neste caso, foi
... inicializada com k:=1!
k := 1;
while k < 4
do begin Obs.2: como o corpo do
writeln(‘Iteracao: ‘, k); WHILE tem 2 comandos,
k:= k +1; precisa-se usar o
end; comando composto -
... Begin....End.

Comando
Composto
Exemplos

...
... A := 10; B := 4;
A := 1; while A – 2 > B + 1
while A < 5 do A:= A + 1; do begin
writeln(A); writeln(A, ' ', B);
... A := A - 1;
end;
...

... ...
A:= 1; A := 0;
while A <= 5 while A < 5
do begin do begin
writeln(A); A := A + 1;
A := A + 1; writeln(A);
end; 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 S := 0;
readln(A); readln(A);
if A <> 0
then writeln(A) while A <> 0
else Segue := false do begin
end; writeln(A);
... S := S + 1;
readln(A)
... end;
Parar := false;
while not Parar writeln(S);
do begin ...
readln(A); • 1a vez que testa A já
if A <> 0
then writeln(A) deve ter um valor
else Parar := true • S informa quantos valores
end; 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 Pascal
repita repeat
<comandos > <comandos >
até <condição> until <condição>

vários
comandos
Exemplos ...
... Achou := false;
A := 0; repeat
repeat readln(Nome);
A := A + 1; writeln(Nome);
writeln(A) if Nome = ‘Ana Terra’
until A = 10; then Achou := true
... until Achou;
...

...
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.
Diagramas de sintaxe
Comando while
WHILE Expressão lógica DO comando

Comando repeat
Comandos
REPEAT Separados por ; UNTIL Expressão lógica

Comandos
Separados Comando
por ; ;
Obrigado pela atenção

Eng. Maurício Filipe João


Quembo

Você também pode gostar