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.

<br />
leia(numero)<br />
se (numero MOD 2 = 0) então<br />
   início<br />
      escreva(&quot;O número é par.&quot;)<br />
   fim<br />

 

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

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:

<br />
leia(numero)<br />
se(numero MOD 2 = 0)<br />
   então<br />
      escreva(&quot;O número é par.&quot;)<br />
   senão<br />
      escreva(&quot;O número é impar.&quot;)<br />
fim-se<br />

 

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

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.

<br />
leia(idade)<br />
se (idade &lt; 13)<br />
   então<br />
      Escreva(&quot;Criança&quot;)<br />
senão se (idade &gt;= 13 e &lt; 21)<br />
      escreva(&quot;Adolescente&quot;)<br />
   senão<br />
      escreva(&quot;Adulto&quot;)<br />
fim-Se<br />

 

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

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.

<br />
...<br />
escolha (votos)<br />
   caso (votos = 1) : candidato1 ← candidato1 + 1<br />
   caso (votos = 2) : candidato2 ← candidato2 + 1<br />
senão<br />
   escreva(&quot;Voto inválido&quot;)<br />
fim-escolha<br />

 

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

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! 🙂