Programação Imperativa

Aula 8

Sumário


Instruções de decisão múltipla

Na aula anterior estudamos a instrução if-else. Essa instrução permite que o computador prossiga por um caminho ou por outro mediante o valor de uma condição ser verdadeiro ou falso. Por essa razão, costuma designar-se por instrução de selecção ou de decisão simples.

Contudo, existem situações em que queremos que o computador escolha um caminho de entre N alternativas possíveis. Nesses casos temos uma escolha múltipla. Para conseguir tal efeito, podemos programar o computador utilizando uma sequência encadeada de instruções if-else.

Exemplo: o programa seguinte pergunta o ano em que o aluno anda e escreve uma frase apropriada consoante a resposta.

        #include <stdio.h>

        main()
        {
          int ano;

          printf("Em que ano é que andas (1..5) ?\n");
          scanf("%d", &ano );
          if( ano == 1 )
            printf("És caloiro!\n");
          else
            if( ano == 2 )
              printf("És do segundo ano\n");
            else
              if( ano == 3 )
            printf("És do terceiro ano\n");
              else
            if( ano == 4 )
              printf("És do quarto ano\n");
            else
              if( ano == 5 )
                printf("És do quinto ano\n");
             else
                printf("Escreve um ano entre 1 e 5\n");
        }

Ao ser executado, o programa vai fazer o seguinte:

        Em que ano é que andas (1..5) ?
        1
        És caloiro!

Se introduzisse-mos 3 iria aparecer:

        Em que ano é que andas (1..5) ?
        3
        És do terceiro ano


Nas situações em que há uma escolha múltipla, pode-se sempre fazer como no exemplo acima. No entanto, a linguagem C tem uma instrução própria para este tipo de situações: a instrução switch.

Exemplo: o programa seguinte faz exactamente a mesma coisa que o programa do exemplo anterior, mas utiliza a instrução switch em vez do comboio de if ... else if ...else if ... else if ...

        #include <stdio.h>

        main()
        {
          int ano;

          printf("Em que ano é que andas (1..5) ?\n");
          scanf("%d", &ano );
          switch( ano )
          {
            case 1: printf("És caloiro!\n");
                break;
            case 2: printf("És do segundo ano\n");
                break;
            case 3: printf("És do terceiro ano\n");
                break;
            case 4: printf("És do quarto ano\n");
                break;
            case 5: printf("És do quinto ano\n");
                break;
            default: printf("Escreve um ano entre 1 e 5\n");
          }
       }

A instrução switch funciona do seguinte modo. Primeiro, o computador calcula o valor do que está dentro de parentesis logo a seguir à palavra switch. No exemplo acima, trata-se do valor da variável ano. Baseado nesse valor, o computador salta para o caso apropriado. Por exemplo, se o valor for 3, o computador salta para a instrução que vem a seguir a case 3:. Depois prossegue com as instruções restantes até aparecer a instrução break;. Esta instrução faz com que o computador salte para fora do switch, isto é, o programa prossegue com a instrução que aparece imediatamente a seguir à chaveta correspondente ao final da instrução switch.

O caso default: é opcional e é executado se nenhum dos outros casos ocorrer.

Tudo o que se pode fazer com a instrução switch também se pode fazer com uma sequência encadeada de if-else tal como foi ilustrado no início. No entanto, quando temos muitas opções diferentes, é aconselhável usarmos a instrução switch porque o programa fica mais legível.


Operadores lógicos

Na aula passada, vimos que podíamos usar operadores relacionais, tais como <, <=, >, >=, == e !=. Estes operadores podem ser combinados com operadores lógicos de conjunção, disjunção e negação que na linguagem C são escritos por &&, || e ! respectivamente.

Símbolo Significado
&&
conjunção (e)
||
disjunção (ou)
!
negação (não)

Exemplo:

        if( x > 0 && x < 10 )
          ...

Significa

        se x é maior do que 0 e x é menor do que 10
          ...

Outro exemplo:

        if( x < -2 || x > 2 )
          ...

Significa

        se x é menor do que -2 ou x é maior do que 2
          ...