terça-feira, 31 de julho de 2012

Comandos para controle do fluxo do programa




If Then Else

O comando If permite ao programa tomar decisões. Ele pode ter duas sintaxes:

Primeira sintaxe:

    If <expressão_lógica> Then Comando;

Expressão_lógica pode ser simples ou até relações complexas. Se a expressão_lógica resultar verdadeira (TRUE), então o comando será executado caso contrário não. Para os casos em que tivermos mais de um comando para serem executados, eles deverão vir delimitados pelas palavras Begin e End.

    If <expressão_lógica> Then
    Begin
      Comando_1;
      Comando_2;
      Comando_3;
      . . .
    End;

No caso acima, se expressão_lógica for  TRUE  então todos comandos inclusos entre as palavras  Begin  e  End  serão executados, caso contrário não.

    Segunda sintaxe:

    If <expressão_lógica> Then Comando_1
                          Else Comando_2;

Neste caso, se expressão_lógica for TRUE então comando_1 será executado e comando_2 não, caso contrário, comando_2 será executado e comando_1 não. Repare que não temos ; no final de comando_1.

Podemos também escrever:

    If <expressão> Then Begin
                           Comando_1;
                           Comando_2;
                           . . .
                        End          (* não tem ; *)
                   Else Begin
                           Comando_3;
                           Comando_4;
                           . . .
                        End;

Exemplos:

    Program Exemplo_1;
    Uses CRT;
    Var i : Integer;
    Begin
       Clrscr;
       Write('Digite um inteiro maior que 100 --> ');
       Readln(i);
       Writeln;
       Writeln;
       If (i>100)
          Then Writeln('Você conseguiu')
          Else Writeln(i,' não e maior que 100');
    End.

    Program Exemplo_2;

{Programa para determinar o maior numero entre dois lidos do teclado}

Uses CRT;
    Var Numero_1,Numero_2 : Integer;
    Begin
       ClrScr;
       Write('Primeiro numero ----> ');
       Readln(Numero_1);
       Write('Segundo numero -----> ');
       Readln(Numero_2);
       Writeln;
       Writeln;
       If (Numero_1 > Numero_2)
          Then Write(Numero_1,' e o maior')
          Else If (Numero_2 > Numero_1)
                  Then Writeln(Numero_2,' e o maior')
                  Else Writeln('são iguais');
    End.

    Program Exemplo_3;

{Programa para colocar em ordem crescente 3 números lidos do teclado}

    Uses CRT;
    Var x,y,z : Integer;
    Begin
       ClrScr;
       Write('Primeiro numero --> ');
       Readln(x);
       Write('Segundo numero ---> ');
       Readln(y);
       Write('Terceiro numero --> ');
       Readln(z);
       Writeln;
       Writeln;
       If (x>=y)
          Then If (x>=z)
                  Then If (y>=z)
                          Then Writeln(x,' ',y,' ',z)
                          Else Writeln(x,' ',z,' ',y)
                  Else Writeln(z,' ',x,' ',y)
          Else If (y>=z)
                  Then If (x>=z)
                          Then Writeln(y,' ',x,' ',z)
                          Else Writeln(y,' ',z,' ',x)
                  Else Writeln(z,' ',y,' ',x);
    End.

Labels e Goto

A instrução Goto permite desviar a seqüência de execução do programa para um determinado Label pré-definido. Para utilizarmos algum Label, ele deve, obrigatoriamente, ser declarado na subárea Label.

Exemplos:

    Program Exemplo_1;

{Programa para colocar em ordem crescente 3 números lidos do teclado}

    Uses CRT;
    Label Inicio;
    Var x,y,z : Integer;
        tecla : Char;
    Begin
       Inicio:
       ClrScr;
       Write('Primeiro numero --> ');
       Readln(x);
       Write('Segundo numero ---> ');
       Readln(y);
       Write('Terceiro numero --> ');
       Readln(z);
       Writeln;
       Writeln;
       If (x>=y)
          Then If (x>=z)
                  Then If (y>=z)
                          Then Writeln(x,' ',y,' ',z)
                          Else Writeln(x,' ',z,' ',y)
                  Else Writeln(z,' ',x,' ',y)
          Else If (y>=z)
                  Then If (x>=z)
                          Then Writeln(y,' ',x,' ',z)
                          Else Writeln(y,' ',z,' ',x)
                  Else Writeln(z,' ',y,' ',x);
       Writeln;
       Write('Deseja Continuar --> ');
       Tecla:=Readkey;
       If ((Tecla = 'S') OR (Tecla = 's')) Then Goto Inicio;
    End.

Program Exemplo_2;

{Programa para determinar se 3 valores lidos do teclados são lados de um triângulo
Observações:
Supondo que x,y,z, sejam os valores lidos, então:
1-) Se x<y+z e y<x+z e z<x+y então x,y,z são lados de um triângulo e se:
2-) x=y=z então é um triângulo Equilátero
3-) x=y ou x=z ou y=z então é um triângulo Isósceles
4-) x<>y<>z então é escaleno}

Label INICIO;
    Uses CRT;
    Var x,y,z : Real;
        Tecla : Char;
    Begin
    INICIO:
       ClrScr;
       Write('X = ');
       Readln(x);
       Write('Y = ');
       Readln(y);
       Write('Z = ');
       Readln(z);
       Writeln;Writeln;
       If (x<y+z) and (y<x+z) and (z<x+y)
          Then If (x=y) and (x=z)
                  Then Writeln('TRIÂNGULO EQUILÁTERO')
                  Else If (x=y) Or (x=z) Or (y=z)
                          Then Writeln('TRIÂNGULO ISÓSCELES')
                          Else Writeln('TRIÂNGULO ESCALENO')
          Else Writeln('X,Y,Z NÃO SÃO LADOS DE UM TRIÂNGULO');
       Writeln;Writeln;
       Write('Deseja Continuar ? --> ');
       Tecla:=ReadKey;
       If (Tecla='s') Or (Tecla='S')
          Then Goto INICIO;
    End.

For

Este comando permite que um grupo de operações ou comandos sejam repetidos um certo número de vezes. Sintaxe geral:
    For <variável> := <valor inicial> to/downto <valor final> do <comando>;

A variável deverá ser, obrigatoriamente, do tipo integer (qualquer um), char ou Boolean. A variação de variável entre valor inicial e valor final será crescente e de um em um, quando utilizamos a palavra to, e decrescente de um em um, quando utilizamos a palavra downto.

Exemplos:

    Program Exemplo_1;
    Uses CRT;
    Var i : Integer;
    Begin
       ClrScr;
       For i:=10 to 15 do Writeln(i); (* para i igual a 10 até 15 faça escreva i *)
    End.

    Program Exemplo_2;
    Uses CRT;
    Var i : Integer;
    Begin
       ClrScr;
       For i:=10 downto 1 do Writeln(i);
    End.

     Program Exemplo_3;
    Uses CRT;
    { Este programa escreve na tela os quadrados dos números de 1 até 20 }
    Var i : Integer;
    Begin
       ClrScr;
       For i:=1 to 20 do
           Begin
              Write('Valor de i --> ');
              Write(i:3);
              Write('..... quadrado de i = ');
              Writeln(i*i:5);
           End;
    End.

    Program Exemplo_4;
    Uses CRT;
{Este programa calcula a soma entre todos os números compreendidos entre dois números lidos do teclado }

    Label INICIO;
    Var i,Numero_1,Numero_2,soma : Integer;
        Tecla                    : Char;
    Begin
    INICIO:
       ClrScr;
       Write('Primeiro Numero --> ');
       Readln(Numero_1);
       Write('Segundo Numero ---> ');
       Readln(Numero_2);
       Writeln;
       Writeln;
       Soma:=0;
       For i:=Numero_1 to Numero_2 do Soma:=Soma+i;
       Writeln('Soma entre ',Numero_1,' e ',Numero_2,' = ',soma);
       Writeln;
       Writeln;
       Write('Deseja Continuar ? --> ');
       tecla:=ReadKey;
       If ((Tecla = 'S') OR (Tecla='s')) Then Goto INICIO;
       ClrScr;
       Write('Tchau .........');
    End.

    Program Exemplo_5;
    Uses CRT;

{Programa para cálculo de fatorial de um número lido do teclado. Lembrando que fatorial de um número é definido como segue:
            N! = 1.2.3.4...N
         e  0! = 1}
    Label Inicio,fim;
    Var n,Fatorial,i : Integer;
    Begin
       Clrscr;
    Inicio:
       Write('N = ( menor que 0 = fim) --> ');
       Readln(n);
       If n<0 then goto Fim;
       Fatorial:=1;
       Writeln;
       If (n>0)
          Then For i:=1 to n do
                       Fatorial:=Fatorial*i;
       Writeln('Fatorial de ':30,n,' = ',fatorial);
       Writeln;
       Goto Inicio;
       Fim:
    End.

Repeat Until

Repete um bloco de instruções até que uma certa condição seja satisfeita. Sua sintaxe é:

    Repeat
        Comando_1;
        Comando_2;
        Comando_3;
        . . .
    Until (expressão_lógica);

Neste caso, todos os comandos entre as palavras reservadas Repeat e Until serão executadas, até que a expressão lógica seja verdadeira (TRUE), obviamente, devemos ter o cuidado para que ela venha a ser TRUE em determinado momento, pois caso contrário, teremos um LOOP  INFINITO, (o programa fica preso dentro da estrutura Repeat - Until).

    Exemplos:

    Program Exemplo_1;
    Uses CRT;

{Programa exemplo para mostrar o funcionamento da estrutura Repeat Until}

    Var i : Integer;
    Begin
       ClrScr;
       i:=1;
       Repeat
          Writeln(i);
          i:=i+1;
       Until i=10;
    End.

    Program Exemplo_2;
    Uses CRT;

{Programa que soma os números pares compreendidos entre dois números lidos do teclado}

    Var par,numero_1,numero_2,soma:Integer;
    Begin
       Clrscr;
       Soma:=0;
       Write('Primeiro Numero ---> ');
       Readln(numero_1);
       Write('Segundo Numero ----> ');
       Readln(numero_2);
       par:=numero_1;
       If par MOD 2 <> 0 then par:=par+1; (* Verifica se o primeiro número é par, se não for adiciona-se um *)
       Repeat
          Soma:=soma+par;
          par:=par+2;
       Until par>numero_2;
       Writeln;writeln;
       Write('Soma dos números pares entre ');
       Writeln(numero_1,' e ',numero_2,' = ',soma);
    end.

    Program Exemplo_3;
    Uses CRT;

{Programa para cálculo de fatorial.}

    Label inicio,fim;
    Var n,i,fatorial:integer;
    Begin
       ClrScr;
    inicio:
       Write('N = (menor que 0 = fim) --> ');
       Readln(n);
       If n<0 then goto fim;
       Writeln;
       fatorial:=1;
       i:=1;
       if n>1
          then Repeat
                  i:=i+1;
                  fatorial:=fatorial*i;
               Until i=n;
        Writeln('fatorial de ':30,n,' = ',fatorial);
        Writeln;
        goto inicio;
    fim:
    End.

While Do

A estrutura  While..Do  permite controlar o número de vezes que uma instrução ou bloco de instruções será executado. Ela difere da instrução  Repeat..Until  porque esta só avalia a expressão lógica no final do primeiro Loop, enquanto que a instrução While..Do avalia a expressão lógica antes da primeira interação, isto significa que, eventualmente, pode não ocorrer sequer a primeira interação.

    A sintaxe de While..Do é:

    While <expressão_lógica> Do <comando>;

    ou

    While <expressão_lógica> Do
    Begin
      comando_1;
      comando_2;
      . . .
    End;

    Exemplos:

    Program Exemplo_1;
    Uses CRT;
{Programa exemplo que escreve na tela de 0 até 10}
    Var i : Integer;
    Begin
       ClrScr;
       i:=0;
       While (i<11) Do
          Begin
             Writeln(i);
             i:=i+1;
          End
    End.
    Program Exemplo_2;
    Uses CRT;

{Programa que lê números do teclado e depois informa a média dos números lidos, a quantidade lida, e soma deles}

    Label INICIO;
    Const Quant_de_num : Integer = 0;
          Soma             : Real    = 0;
          Media            : Real    = 0;
    Var   Numero       : Real;
          Tecla             : Char;
    Begin
    INICIO:
       ClrScr;
       Write('Valor numérico (menor que 0=fim) --> ');
       Readln(Numero);
       While (Numero>=0) Do
          Begin
             Soma := Soma + Numero;
             Quant_de_num := Quant_de_num + 1;
             Write('Valor numérico (menor que 0=fim) --> ');
             Readln(Numero);
          End;
       If Quant_de_num > 0
          Then Begin
                 Media := Soma/Quant_de_num;
                 Writeln;
                 Writeln('Quantidade de números = ',Quant_de_num);
                 Writeln('Soma ................ = ',Soma:10:2);
                 Writeln('Media ............... = ',Media:10:2);
              End
           Else Writeln('Não se realizou cálculos');
        Writeln;
        Write('Deseja continuar ? ---> ');
        tecla:=ReadKey;
        If (Tecla='s') Or (Tecla='S') Then Begin
                                             Quant_de_num:=0;
                                             Soma := 0;
                                             Goto Inicio;
                                           End;
    End.

Case

Esta instrução nos permite selecionar uma opção baseada no valor de uma variável ou expressão. Existem duas sintaxes, a saber:

     Sintaxe número 1:

    Case <expressão ou variável> of
        <valor 1> : Comando_1;
        <valor 2> : Comando_2;
        . . .
        <valor n> : Comando_n;
    End;
    ou
    Case <expressão ou variável> of

        <valor 1> : Begin
                      comando_1;
                      comando_2;
                      . . .
                    End;
        <valor 2> : Begin
                      comando_1;
                      comando_2;
                      . . .
                    End;
        . . .
        <valor n> : Begin
                      comando_1;
                      comando_2;
                      . . .
                    End;
    End;

A expressão ou variável no comando Case deve ser do tipo simples, normalmente Char ou Integer. Após a avaliação da expressão, seu valor ou o valor da variável é comparado com os diversos valores discriminados. Se houver algum que satisfaça, o comando subsequente será executado.

    Sintaxe número 2:

    Case <expressão ou variável> of

        <valor 1> : Comando_1;
        <valor 2> : Comando_2;
        . . .
        <valor n> : Comando_n;
    Else Comando;
    End;

Neste caso, se o resultado da expressão ou o valor da variável não satisfizer nenhum dos valores discriminados, então o comando que estiver na frente da cláusula Else será executado.

    Exemplos:

    Program Exemplo_1;
    Uses CRT;

{Programa exemplo da instrução Case. Calcula a soma, ou a subtração, ou a multiplicação, ou a divisão entre dois números lidos do teclado}

    Var  oper : Char;
         x,y  : Real;
    Begin
       ClrScr;
       Write('Valor de X = ');
       Readln(x);
       Write('Valor de Y = ');
       Readln(y);
       Writeln;
       Write('Operação --> ');
       oper:=ReadKey;
       Writeln(oper);Writeln;
       Case Oper of
            '+' : Write('X + Y = ':10,x+y:6:2);
            '-' : Write('X - Y = ':10,x-y:6:2);
            '*' : Write('X * Y = ':10,x*y:6:2);
            '/' : Write('X / Y = ':10,x/y:6:2);
            Else  Writeln(oper,'  não e operação');
       End; (* case *)
    End. (* programa *)

    Program Exemplo_2;
    Uses CRT;

{Programa para cálculo de área de figuras}

    Var escolha,continua : Char;
        x,y : real;
    Begin
       Repeat
          ClrScr;
          Write('Calculo de área de figuras':53);
          Gotoxy(25, 5);Write('1 - Sair do programa');
          Gotoxy(25, 7);Write('2 - Triângulo');
          Gotoxy(25, 9);Write('3 - Quadrado');
          Gotoxy(25,11);Write('4 - Retângulo');
          Gotoxy(25,13);Write('5 - Circulo');
          TextBackGround(7);
          TextColor(0+16);
          Gotoxy(10,17);Write('Sua escolha ---> ');
          escolha:=ReadKey;
          Textbackground(0);
          Textcolor(14);
          Case escolha of
             '2' : Begin
                      ClrScr;
                      Writeln('Calculo da área de triangulos':55);
                      continua:='s';
                      While Continua='s' Do
                      Begin
                         Writeln;
                         Write('Base   = ');
                         Readln(x);
                         Write('Altura = ');
                         Readln(y);
                         Writeln;
                         Writeln('Área = ',x*y/2:8:2);
                         Writeln;
                         Writeln;
                         Write('Mais cálculos (s/n) --> ');
                         continua:=ReadKey;
                         Writeln;Writeln;
                      End;
                   End;
             '3' : Begin
                      ClrScr;
                      Writeln('Calculo da área de quadrados':55);
                      continua:='s';
                      While Continua='s' Do
                      Begin
                         Writeln;
                         Write('lado = ');
                         Readln(x);
                         Writeln;
                         Writeln('Área = ',x*x:8:2);
                         Writeln;
                         Writeln;
                         Write('Mais cálculos (s/n) --> ');
                         continua:=Readkey;
                         Writeln;Writeln;
                      End;
                   End;
             '4' : Begin
                      ClrScr;
                      Writeln('Calculo da área de retangulos':55);
                      continua:='s';
                      While Continua='s' Do
                      Begin
                         Writeln;
                         Write('comprimento = ');
                         Readln(x);
                         Write('largura     = ');
                         Readln(y);
                         Writeln;
                         Writeln('Área = ',x*y:8:2);
                         Writeln;
                         Writeln;
                         Write('Mais cálculos (s/n) --> ');
                         continua:=readkey;
                         Writeln;Writeln;
                      End;
                   End;
             '5' : Begin
                      ClrScr;
                      Writeln('Calculo da área de circulos':55);
                      continua:='s';
                      While Continua='s' Do
                      Begin
                         Writeln;
                         Write('raio = ');
                         Readln(x);
                         Writeln;
                         Writeln('Área = ',PI*x*x:8:2);
                         Writeln;
                         Writeln;
                         Write('Mais cálculos (s/n) --> ');
                         continua:=readkey;
                         Writeln;Writeln;
                      End;
                   End;
          End;
       Until escolha='1';
    End.

Nenhum comentário:

Postar um comentário