Pascal/Estrutura de repetição: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
m Revertidas edições por 189.72.152.196 (discussão) para a última versão por Heldergeovane
Linha 73: Linha 73:
clrscr;
clrscr;
contad:=0; {iniciamos o contador declarando seu primeiro valor}
contad:=0; {iniciamos o contador declarando seu primeiro valor}
while cont<10 do {Enquanto cont<10, condição é testada a cada repetição}
while contad<10 do {Enquanto cont<10, condição é testada a cada repetição}
begin
begin
writeln('7 x ',contad,' = ',7*contad);
writeln('7 x ',contad,' = ',7*contad);

Revisão das 21h10min de 3 de abril de 2009

acima: Pascal


Estrutura de repetição

Toda vez que precisamos repetir determinado número de vezes uma determinada seqüência de comandos, usamos um laço de repetição, que corresponderia repetir o mesmo trecho um número X de vezes sem ter de escrever o mesmo trecho X vezes.

Exemplo: Calcular a média de 50 alunos (sem repetição).

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.00) and (N2<=10.00) and (N3<=10.00) then
            begin
   .     .    . MEDIA :=(N1+N2+N3)/3;
   .     .    . writeln( “O aluno de nome “,NOME,” tem a média “,MEDIA,” em suas notas.”);
   .     .  end
   .   else
   .     .  begin
   .     .    .  writeln(“Não são aceitas notas negativas.”);
   .     .  end;
{2º 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 média “,MEDIA,” em suas notas.”);
   .     .  end
   .   else
   .     .  begin
   .     .    .  writeln(“Não são 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.00) and (N2<=10.00) and (N3<=10.00) then
            begin
   .     .    . MEDIA :=(N1+N2+N3)/3;
   .     .    . writeln( “O aluno de nome “,NOME,” tem a média “,MEDIA,” em suas notas.”);
   .     .  end
   .   else
   .     .  begin
   .     .    .  writeln(“Não são aceitas notas negativas.”);
   .     .  end;
end.

Contador

Utilizamos uma variável que será incrementada a cada repetição, isto é, a cada repetição contamos +1 na variável, até um valor de acordo com o número de vezes que queremos repetir.

No exemplo acima, como queremos 50 alunos, contaríamos 50 repetições.

Sintaxe:

CONT:integer; ( Variável inteira que irá contar o número de repetições )
CONT:=1; ( Iniciação do contador, ele deve começar com algum valor )
CONT: CONT+1; ( Incrementar o contador em +1, repare que em cada repetição ele irá aumentar +1) 

Testes lógicos

Usamos testes lógicos para saber quando parar a repetição, ou seja, estabelecemos uma condição para a repetição continuar, caso contrário o programa ficaria preso na repetição eternamente. Por exemplo, usando o contador, a cada repetição testamos o número do contador até que ele alcance quantidade desejada, caso o contador atinja a quantidade de vezes que queremos repetir, o loop (repetição) pára.

Exemplo: programa para fazer a tabuada de multiplicação do número 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, condição é testada a cada repetição}
  begin
   writeln('7 x ',contad,' = ',7*contad);
   contad:=contad+1; {incrementamos o contador a cada repetição}
  end;
 readkey;
end.

Comandos de repetição

Em Pascal os principais comandos de repetição são

While(faça enquanto)
Repeat(repita)
for  (para repetir de um número até algum número}

While (enquanto)

Usando o while pedimos ao Pascal para repetir "enquanto" a expressão for verdadeira.

Sintaxe

while <condição> then
 begin
   <comandos>;
   <comandos>;
 end;

Veja o exemplo acima usando while:

program  média_notas;
var
NOME: string;
N1, N2, N3, MEDIA: real;
CONT: integer;
begin
   .  CONT:=0;  
   .  while CONT<=50 then
   .    begin
   .    .   CONT:=CONT+1;
   .    .   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 média “,MEDIA,” em suas notas.”);
   .    .    .   end
   .    .   else
   .    .    .   writeln(“Não são aceitas notas negativas.”);
   .    end;
end.

Repeat (repita até)

O comando repeat executa repetidamente uma sequência de comandos "até" (until) que uma dada condição seja verdadeira.

Sintaxe:

 repeat
   <comando1>;
   <comando2>;
   <comando3>;
 until <condição>;

Observação: este comando não precisa de begin (início) e end (fim) para demarcar o corpo da repetição.

Exemplo: Faça um programa para pedir um número, em seguida escrever uma tabuada de multiplicação deste número, caso for digitado o número 0, parar o programa.

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

for to (para de até)

O comando for, diferentemente dos comandos de repetição repeat e while, permite que uma sequência de comandos seja executada um número definido de vezes. A variável 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 média 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 faça}
   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 média ',MEDIA,' em suas notas.');
       end
     else
       begin
         writeln('Notas invalidas!');
       end;
   end;
end.

Crítica

Usamos uma crítica para conferir se foi digitado um valor correto, usando para isso um teste lógico, dentro de uma repetição (laço), de onde só sairá quando for digitado um valor desejado, ou seja, obrigando que seja digitado um valor válido.

Exemplo: Programa para calcular a média 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 inválidas! Digite notas de 0 a 10!');
         readln(N1,N2,N3);
       end;
     MEDIA:=(N1+N2+N3)/3;
     writeln('A média do aluno ',NOME,' é: ',MEDIA:2:2);
   end;
  readkey;
end. 

Exercícios

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 média de altura entre as mulheres.

- O número de homens e a diferença percentual entre estes e as mulheres.

- Critique as variáveis onde for necessário.

Resolução:

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 variáveis}
 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 inválida! 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 inválido! 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 válida}
          begin  {repete até a altura ser válida}
              writeln('Altura inválida! 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 média de alturas entre as mulheres é :',soma_alt/cont_f:2:2);
   writeln('o número de homens é: ',cont_m:3);
   write('A diferença 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.