Escolar Documentos
Profissional Documentos
Cultura Documentos
< 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)
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.
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.
While(faa enquanto)
Repeat(repita)
for (para repetir de um nmero at algum nmero}
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
<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.
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.
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.
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.