Você está na página 1de 9

Pascal/Estrutura de repetio

< Pascal
Existem 3 alteraes pendentes a aguardar reviso. A verso publicada foi verificada a 27 de

dezembro de 2013.

Pascal
Estrutura Condicional

Estrutura de Dados

ndice
[esconder]

1Contador
2Testes lgicos

3Comandos de repetio

o 3.1While (enquanto)

o 3.2Repeat until (repita at)

o 3.3for to (para de at)

4Crtica

5Exerccios

Toda vez que precisamos repetir determinado nmero de vezes uma determinada
seqncia de comandos, usamos um lao de repetio, que corresponderia repetir o
mesmo trecho um nmero X de vezes sem ter de escrever o mesmo trecho X vezes
Exemplo: Calcular a mdia de 50 alunos (sem repetio)

program media_notas;
var
NOME: string;
N1, N2, N3, MEDIA: real;
begin
{1 ALUNO}
read(NOME,N1,N2,N3);
if (N1>=0) and (N2>=0) and (N3>=0) and (N1<=10) and
(N2<=10) and (N3<=10) then
begin
MEDIA :=(N1+N2+N3)/3;
writeln( 'O aluno de nome ',NOME,' tem a mdia
',MEDIA,' em suas notas ');
end
else
begin
writeln('No so aceites notas negativas ');
end;
{2 ALUNO}
read(NOME,N1,N2,N3);
if (N1>=0) and (N2>=0) and (N3>=0) and (N1<=10) and
(N2<=10) and (N3<=10) then
begin
MEDIA :=(N1+N2+N3)/3;
writeln( 'O aluno de nome ',NOME,' tem a mdia
',MEDIA', em suas notas ');
end
else
begin
writeln('No so aceitas notas negativas ');
end;
{3 ALUNO}

{50 ALUNO}
read(NOME,N1,N2,N3);
if (N1>=0) and (N2>=0) and (N3>=0) and (N1<=10) and
(N2<=10) and (N3<=10) then
begin
MEDIA :=(N1+N2+N3)/3;
writeln( 'O aluno de nome ',NOME,' tem a mdia
',MEDIA,' em suas notas ');
end
else
begin
writeln('No so aceitas notas negativas ');
end;
end.

Contador[editar | editar cdigo-fonte]


Utilizamos uma varivel que ser incrementada a cada repetio, isto , a cada repetio
contamos +1 na varivel, at um valor de acordo com o nmero de vezes que queremos
repetir
No exemplo acima, como queremos 50 alunos, contaramos 50 repeties
Sintaxe:
CONT:integer; ( Varivel inteira que ir contar o nmero de
repeties )
CONT:=1; ( Iniciao do contador, ele deve comear com algum valor )
CONT:= CONT+1; ( Incrementar o contador em +1, repare que em cada
repetio ele ir aumentar +1)

Testes lgicos[editar | editar cdigo-fonte]


Usamos testes lgicos para saber quando parar a repetio, ou seja, estabelecemos uma
condio para a repetio continuar, caso contrrio o programa ficaria preso na repetio
eternamente Por exemplo, usando o contador, a cada repetio testamos o nmero do
contador at que ele alcance quantidade desejada, caso o contador atinja a quantidade de
vezes que queremos repetir, o loop (repetio) pra
Exemplo: programa para fazer a tabuada de multiplicao do nmero 7:

program tabuada;
uses CRT;
var
contad:integer;
begin
clrscr;
contad:=0; {iniciamos o contador declarando seu primeiro
valor}
while contad<10 do {Enquanto cont<10, condio testada a cada
repetio}
begin
writeln('7 x ',contad,' = ',7*contad);
contad:=contad+1; {incrementamos o contador a cada repetio}
end;
readkey;
end.

Comandos de repetio[editar | editar cdigo-fonte]


Em Pascal os principais comandos de repetio so

While(faa enquanto)
Repeat(repita)
for (para repetir de um nmero at algum nmero}

While (enquanto)[editar | editar cdigo-fonte]


Usando o while pedimos ao Pascal para repetir "enquanto" a expresso for verdadeira
Sintaxe
while <condio> do
begin
<comandos>;
<comandos>;
end;

Veja o exemplo acima usando while:

program media_notas;
uses crt;
var
NOME: string;
N1, N2, N3, MEDIA: real;
CONT: integer;
begin
clrscr;
CONT:=0;
while CONT<=50 do
begin
CONT:=CONT+1;
write ('Digite o nome: ');
read (NOME);
write ('nota 1: ');
read (N1);
write ('nota 2: ');
read (N2);
write ('Nota 3: ');
read (N3);
MEDIA:=(N1+N2+N3)/3;
if (MEDIA >= 6) then
begin
writeln('O aluno de nome ',NOME,' tem a mdia
',MEDIA,' em suas notas ');
end
else
writeln('REPROVADO');
end;
end.

Repeat until (repita at)[editar | editar cdigo-fonte]


O comando repeat executa repetidamente uma sequncia de comandos "at" (until) que
uma dada condio seja verdadeira
Sintaxe:

repeat
<comando1>;
<comando2>;
<comando3>;
until <condio>;

Observao: este comando no precisa de begin (incio) e end (fim) para demarcar o
corpo da repetio
Exemplo: Faa um programa para pedir um nmero, em seguida escrever uma tabuada de
multiplicao deste nmero, caso for digitado o nmero 0, parar o programa

program tabuada;
uses CRT;
var
num:real;
cont:integer;
begin
repeat
clrscr;
write('Digite um nmero para ver sua tabuada de multiplicao ');
read(num);
cont:=0;
while cont<10 do {temos aqui uma repetio dentro de outra}
begin
writeln(num:4:2,' x ',cont,' = ',(num*cont):6:2);
cont:=cont+1; {a cada repetio o cont aumenta +1}
end;
readkey; {parada para ver o resultado at ser teclado algo}
until num=0; {condio para parar a repetio principal}
clrscr;
write('Foi digitado o nmero 0! programa encerrado!');
readkey;
end.

for to (para de at)[editar | editar cdigo-fonte]


O comando for, diferentemente dos comandos de repetio repeat e while, permite que
uma sequncia de comandos seja executada um nmero definido de vezes A varivel
usada para contador j recebe um valor inicial e incrementada pelo comando
Sintaxe:

for contador:=ValorInicial to ValorFinal do


begin
comandos;
end;

Exemplo: Programa para calcular a mdia de 3 notas de 10 alunos:

program media_notas;
var
NOME:string;
N1,N2,N3,MEDIA:real;
CONT:integer;
begin
FOR CONT:=1 to 10 do {para cont de 1 a 10 faa}
begin
write('Digite o nome e as 3 notas do ',cont,'o aluno ');
read(NOME,N1,N2,N3);
if (N1>=0) and (N2>=0) and (N3>=0) and (N1<=10 00) and (N2<=10
00) and (N3<=10 00) then
begin
MEDIA:=(N1+N2+N3)/3;
writeln('O aluno de nome ',NOME,' tem a mdia ',MEDIA,' em
suas notas ');
end
else
begin
writeln('Notas invalidas!');
end;
end;
end.

Crtica[editar | editar cdigo-fonte]


Usamos uma crtica para conferir se foi digitado um valor correto, usando para isso um
teste lgico, dentro de uma repetio (lao), de onde s sair quando for digitado um valor
desejado, ou seja, obrigando que seja digitado um valor vlido
Exemplo: Programa para calcular a mdia de 3 notas de 10 alunos, criticando a nota
digitada:

program media_notas;
var
NOME:string;
N1,N2,N3,MEDIA:real;
CONT:integer;
begin
clrscr;
FOR CONT:=1 to 10 do
begin
write('Digite o nome e as 3 notas do ',cont,'o aluno ');
readln(NOME,N1,N2,N3);
while (N1<0) or (n1>10) or (N2<0) or (N2>10) or (N3<0) or
(N3>10) do
begin {repete enquanto as notas forem menores que 0 ou maiores
que 10!}
writeln('Notas invlidas! Digite notas de 0 a 10!');
readln(N1,N2,N3);
end;
MEDIA:=(N1+N2+N3)/3;
writeln('A mdia do aluno ',NOME,' : ',MEDIA:2:2);
end;
readkey;
end.

Exerccios[editar | editar cdigo-fonte]


01 Construa um programa que leia um conjunto de dados contendo altura e sexo
(MASCULINO ou FEMININO) de N pessoas e calcule e escreva:

a maior e a menor altura do grupo e de quem esta altura ( Se HOMEM ou


MULHER )
a mdia de altura entre as mulheres

O nmero de homens e a diferena percentual entre estes e as mulheres

Critique as variveis onde for necessrio

Resoluo:

program alturamf;
uses CRT;
var
quant,cont,cont_m,cont_f:integer;
sexo,sme_alt,sma_alt:string;
alt,alt_maior,alt_menor,alt_media,soma_alt,dif:real;
begin
{inicializa as variveis}
cont_m := 0;
cont_f := 0;
alt_menor := 10;
alt_maior := 0;
soma_alt := 0;
writeln('Qual a quantidade de pessoas?');
readln(quant);
while quant<1 do {obriga a quantidade de pessoas ser positiva}
begin
writeln('Quantidade invlida! Digite uma quantidade maior que
1!');
readln(quant);
end;
for cont:=1 to quant do
begin
writeln('Qual o sexo da ',cont,'o pessoa?<m> masculino ou <f>
feminino');
readln(sexo);
while (sexo<>'m') and (sexo<>'f') do
begin
writeln('Sexo invlido! Digite <m> para masculino ou <f> para
feminino!');
readln(sexo);
end;
writeln('Qual a altura da ',cont,'o pessoa?');
readln(alt);
while (alt<0 2) or (alt>2 5) do {obriga uma altura vlida}
begin {repete at a altura ser vlida}
writeln('Altura invlida! Digite uma altura entre 0 2
e 2 5!');
readln(alt);
end;
if alt<alt_menor then {testa a menor altura}
begin
alt_menor:=alt; {guarda a menor altura}
sme_alt:=sexo; {guarda o sexo da menor altura}
end;
if alt>alt_maior then {testa a maior altura}
begin
alt_maior:=alt; {guarda a maior altura}
sma_alt:=sexo; {guarda o sexo da maior altura}
end;
if sexo='m' then {testa se o sexo e m}
cont_m:=cont_m+1; {conta a quantidade de homens}
else
begin
cont_f := cont_f+1; {conta a quantidade de mulheres}
soma_alt := soma_alt+alt; {soma a altura feminina}
end;
end ;
clrscr;
writeln('Resultado:');
write('A maior altura : ',alt_maior:2:2,'m de um');
if sma_alt='m' then writeln(' homem')
else writeln('a mulher');
writeln('A mdia de alturas entre as mulheres
:',soma_alt/cont_f:2:2);
writeln('o nmero de homens : ',cont_m:3);
write('A diferena percentual entre homens e mulheres : ');
dif:=(cont_m/quant)*100-(cont_f/quant)*100;
if dif>0 then write(dif:2:2,'% a mais de homens');
else write(abs(dif):2:2,'% a mais de mulheres');
readkey;
end.

Você também pode gostar