Estruturas de Seleção

Padrão

Olá pessoal! Não, eu não morri, só sumi por um tempo maior do que eu planejava. E não peguei a gripe suína também. Pelo menos por enquanto. A minha faculdade é uma das únicas da região que não suspendeu as aulas. Enfim, melhor assim. Sinceramente acho que essas medidas de suspender a volta às aulas por uma, duas semanas não adianta em nada.

Bem, mas vamos ao que interessa. No último post, eu deixei alguns exercícios pra vocês treinarem a elaboração de algoritmos e a implementação na linguagem Pascal. Então aqui você encontra as soluções para os exercícios (tanto a resolução algorítmica quanto as implementações em Pascal). As implementações foram feitas no PascalZim. Portanto, se alguém for compilar em algum outro ambiente, como o Turbo Pascal, não se esqueçam de adicionar depois da seção Program a seção Uses.

Vamos então ao nosso assunto de hoje. Até agora, todos os programas que fizemos eram totalmente sequenciais, ou seja, começavam da primeira linha e iam executando uma em seguida da outra, até a última linha. Dessa forma o nosso programa executa sempre as mesmas ações, o que não acontece com os programas em geral. Os programas geralmente, baseados em algum dado, selecionam porções do código a serem executadas, realizando operações diferenciadas a cada execução. Para representar essa seleção em nosso programa utilizamos as estruturas de seleção.

A primeira estrutura de seleção que iremos conhecer é o Se. O Se é utilizado quando esperamos por uma condição. O bloco de código referente só sera executado se a condição for verdadeira. A seguir temos um exemplo algoritmico da utilização dessa estrutura e sua implementação em Pascal.

leia(numero)
se (numero MOD 2 = 0) então
   início
      escreva("O número é par.")
   fim

 

readln(numero);
if (numero MOD 2 = 0) then
   begin
      write('O número é par.');
   end;

Neste exemplo, lemos do usuário a variável numero. Se o resto da divisão do conteúdo da variável for igual a zero, será mostrada na tela a frase O número é par. A partir disso, podemos criar condições para o nosso programa, executando determinadas tarefas somente se algumas condições forem satisfeitas. Mas e se, por exemplo o número não fosse par? Ele seria ímpar… mas como faríamos isso no programa? A estrutura do Se é composta do Senão, que é executado caso a condição do Se não seja satisfeita. A seguir temos o exemplo da utilização do Se com o Senão na forma algoritmica e na linguagem Pascal:

leia(numero)
se(numero MOD 2 = 0)
   então
      escreva("O número é par.")
   senão
      escreva("O número é impar.")
fim-se

 

readln(numero);
if (numero MOD 2 = 0) then
   begin
      write('O número é par.');
   end
else
   begin
      write('O número é ímpar.');
   end;

Dessa forma, se o número digitado fosse par, a mensagem O número é par. Caso contrário, a mensagem O número é ímpar. seria exibida. Além disso, podemos encadear vários ‘Ses’, criando uma série de condições. Podemos também, colocar mais de uma condição ou negar uma condição, com a utilização dos operadores lógicos e, ou e não.

leia(idade)
se (idade < 13)
   então
      Escreva("Criança")
senão se (idade >= 13 e < 21)
      escreva("Adolescente")
   senão
      escreva("Adulto")
fim-Se

 

readln(idade);
if (idade < 13) then
   begin
      write('Criança');
   end
else if (idade >= 13 and idade < 21) then
   begin
      write('Adolescente');
   end
else
   begin
      write('Adulto');
   end;

Ah, um detalhe. Percebam que em Pascal, somente o último End de uma sequência de Ifs tem ponto-e-vírgula! Observando o exemplo acima, podemos realizar diversas tarefas, encadeando diversos Ifs / Elses. Apesar de simples, esta estrutura é vastamente utilizada na programação. Porém, quando precisamos conferir o valor de uma variável frente a muitos valores, o uso de Ifs encadeados torna-se trabalhoso, principalmente ao programador, além de deixar o código repleto de Begins e Ends. Para resolver problemas do tipo, utilizamos uma estrutura chamada Escolha ou Case. Com ela, podemos comparar o conteúdo de uma variável frente a diversas constantes, de uma forma bem mais organizada que o simples encadeamento de Ifs. A seguir, temos um exemplo de um programa de apuração de votos, com a utilização do Escolha.

...
escolha (votos)
   caso (votos = 1) : candidato1 ← candidato1 + 1
   caso (votos = 2) : candidato2 ← candidato2 + 1
senão
   escreva("Voto inválido")
fim-escolha

 

case votos of
   1 : candidato1 := candidato1 + 1;
   2 : candidato2 := candidato2 + 2;
else
   write('Voto inválido');
end;

Neste caso, a variável votos foi comparada com os valores 1 e 2. Dependendo do seu conteúdo,  incrementa-se a variável correspondente ao candidato. Caso o voto não confira com nenhuma das opções do case, ele irá executar o comando para escrever Voto inválido na tela. Nesta estrutura, assim como no se, o uso do senão é facultativo, ou seja, ele não precisa necessariamente estar presente, sendo utilizado de acordo com a necessidade. Outro ponto é que os valores constantes comparados não precisam ser necessariamente inteiros. Podem ser, por exemplo, um tipo caracter.

Bom, pessoal, é isso. No começo pode ser que vocês estranhem um pouco estas estruturas, mas com o tempo elas virão a estar presente em praticamente todas as aplicações que vocês fizerem. E lembrem-se que, em caso de dúvida, podem me mandar um e-mail (rafaelmgn@yahoo.com.br ou rafaeldtoledo@gmail.com) ou simplesmente deixar um comentário aqui no blog.

Obrigado pela visita e até o próximo post com as Estruturas de Repetição. Abraço a todos! 🙂