Escolar Documentos
Profissional Documentos
Cultura Documentos
Seleção Composto
Os problemas abordados podiam ser resolvidos
utilizando apenas um comando de seleção. Eram
problemas que se limitavam a teste de apenas duas
alternativas.
Foi o caso de testar se um número é par ou ímpar
Em problemas mais complexos, nos defrontaremos
com teste de mais de duas alternativas.
Neste caso, precisaremos utilizar mais de um
comando de seleção, até testarmos todas as
condições possíveis exigidas para a solução do
problema.
Vejamos o caso da análise de um valor, para
sabermos se esse valor é positivo, nulo ou
negativo.
Neste caso temos três alternativas para
testar. Para isto teremos que utilizar pelo
menos dois comandos de seleção. Uma
possível solução seria:
Exemplos
Program testa_positivo_nulo_negativo;
Var
.....N : Integer;
Begin
.....Writeln('Digite um valor inteiro qualquer');
.....Readln(N);
.....if N > 0
..........then Writeln('Valor lido eh positivo");
.....if N = 0
..........then Writeln('Valor lido eh nulo");
.....if N < 0
..........then Writeln('Valor lido eh negativo"); ..........
.....Readln;
end.
A solução anterior funciona, porém de forma não muito
eficiente.
Observe que, em caso do número ser positivo, o primeiro
comando de seleção ativaria o comando de saída com a
mensagem 'Valor lido eh positivo', mas mesmo assim o
programa continuaria testando as outras duas condições
(N=0 e N<0), considerando-se que os próximos comandos
de seleção estão em sequência.
Teríamos então execução de instruções desnecessárias, o
que comprometeria a performance do programa.
Em programas simples como esse, o problema não seria
tão crítico. Porém em programas com grandes volumes de
processamento, a estrutura utilizada causaria certamente
ineficiência na execução.
Para resolver esse problema, o
ideal é utilizarmos os comandos
de seleção na forma endentada,
em que a condicão falsa de um
primeiro teste implicaria em
testar uma nova condição, e
assim sucessivamente.
A solução do mesmo problema usando comandos de seleção
endentados seria:
Program testa_positivo_nulo_negativo;
Var
.....N : Integer;
Begin
.....Writeln('Digite um valor inteiro qualquer');
.....Readln(N);
.....if N > 0
..........then Writeln('Valor lido eh positivo")
.... .....else if N = 0
...............then Writeln('Valor lido eh nulo")
...............else Writeln('Valor lido eh negativo"); ..........
.....Readln;
end.
Observe que neste caso precisamos
utilizar apenas dois comandos de
seleção, pois a negação de que N é
nulo implica que ele é negativo, desde
que a condição de N positivo foi
descartada no primeiro comando de
seleção
Mais um Exemplo
Programa para obter a soma, diferença,
produto ou quociente de dois valores
lidos: