Você está na página 1de 17

CAPTULO 6 - ESTRUTURA DE SELEO 6.

1 - INTRODUO Existem problemas que podem ter mais de um caminho a ser seguido para seleo correta, ou existem restries em suas solues. O sujeito que ir executar o algoritmo, em dado momento, deve ento tomar a deciso do caminho que dever seguir para chegar soluo correta do problema. Esta deciso, do caminho a ser seguido, tem de estar fundamentada em alguma lgica. E funo de quem escreve o algoritmo, dar condies para o sujeito que o executa, fazer a escolha correta do caminho para se chegar soluo do problema. Um exemplo simples de problema que pode ter metodologias diferentes em sua soluo, so os clculos das razes de equaes polinomiais do 2. grau (ax2 + bx + c = 0). Se o termo b2 - 4ac for maior ou igual a zero, as razes sero reais, caso contrrio, sero complexas. No seria correto ns escrevermos um algoritmo que resolvesse somente a parte de razes reais, ou, a parte complexa, pois a metodologia que vai ser usada somente ser conhecida em tempo de execuo do algoritmo. Logo, temos que descrever a soluo por ambas as metodologias, mas deixando claro para o sujeito que vai execut-la, que ele ter de fazer uma escolha entre os caminhos possveis. Mas se deixssemos a critrio de quem executa o algoritmo, ser que ele sempre escolheria o caminho correto? Pelo sim, pelo no, no podemos arriscar. Por isso, que, alm de dizermos que existe mais de um caminho para a soluo do problema, ainda temos de prover subsdios para que o mesmo faa a escolha do caminho correto. Assim, o simples fato de ns informarmos que a soluo do problema tem duas ou mais metodologias diferentes em sua soluo, no funcionam. Temos ainda, que dizer em quais situaes ele utilizar a metodologia A, e em que outras ele utilizar a B. No caso das razes de polinmio do 2. grau, poderamos utilizar a seguinte descrio narrativa: se o resultado de b2 - 4ac for maior ou igual a zero, ento utilize a metodologia de clculo de razes reais, seno utilize a metodologia de clculo de razes complexas. 6.2 - ESTRUTURA SE ENTO A estrutura se ento permite determinar se um certo conjunto de instrues de um algoritmo deve ou no ser executada. A sintaxe geral (ver figura 6.1) desta instruo : se condio ento inst1; inst2; inst3; ..... instN; bloco de instrues

CAPTULO 6 - ESTRUTURAS DE SELEO

61

onde:

se ento a instruo de seleo. condio pode ser um identificador do tipo lgico, ou uma expresso relacional, ou uma expresso lgica. instl; ...; instN formam o conjunto de instrues que sero ou no executadas.

se condio

V inst_1; inst_2; ......; inst_N;

Figura 6.1 Estrutura SE ENTO A semntica desta instruo : O termo condio de instruo somente poder produzir o valor falso ou verdadeiro. Assim, a semntica desta instruo ser: se o valor de condio for verdadeiro ento, execute o bloco de instrues (inst1; ....; instN) ligado palavra ento, e posteriormente, execute a primeira instruo que estiver aps o comando se ento que est sendo executado. Seno, se o valor de condio for falso, ento ignore o bloco de instrues ligado a palavra ento, e desvie o controle de execuo para a primeira instruo aps a instruo se ento que est sendo executado. FALSO - - - - - Fluxo a ser seguido se o valor de de condio for Falso VERDADEIRO se condio ento inst1; inst2; inst3; ......... instN; instX;

Fluxo a ser seguido se o valor de de condio for Verdadeiro

CAPTULO 6 - ESTRUTURAS DE SELEO

62

6.3 - EXERCCIOS RESOLVIDOS R.6.l - Dado um nmero inteiro, calcule o triplo do mesmo caso ele seja positivo ou nulo, ou o dobro caso ele seja negativo (ver figura 6.2). ae (num); as (res); {num nmero a ser fornecido} {res resultado do problema}

objetos num, res : inteiro; incio leia (num); se num for maior ou igual a zero, ento calcule o seu triplo e armazene o resultado em res; se num for menor que zero, ento calcule o seu dobro e armazene o resultado em res; escreva (res); fim. Neste nosso algoritmo, misturamos textos j padronizados na nossa linguagem algortmica, com textos descritos em linguagem natural. De forma algortmica, isto no vlido, mas uma tcnica muito utilizada no desenvolvimento de algoritmos, a qual chamada de refinamentos sucessivos. As partes do algoritmo que forem descritas em linguagem natural (narrativa) so refinadas para a linguagem algortmica numa etapa posterior. As vantagens disto, que uma simples frase em linguagem natural pode representar um grande nmero de instrues algortmicas, e com o uso desta tcnica, primeiro ns estruturamos logicamente o algoritmo para depois resolv-lo definitivamente. Um outro ponto positivo a decomposio da soluo do problema. Existem problemas, ou certas partes de um problema, que so de difceis definies algortmicas. Assim, quando estivermos descrevendo um algoritmo que resolva problemas deste tipo, nas partes mais complicadas, ou mais trabalhosas, simplesmente colocaremos uma frase que nos indique que naquele ponto tais detalhes ainda devero ser implementados. E assim, seguimos na descrio do nosso algoritmo como se todos os detalhes acima j estivessem implementados (mas no esto) em linguagem algortmica. Estes detalhes, ainda no resolvidos, devem ser implementados em um segundo detalhamento do algoritmo. S que, a diferena, que agora nos preocupamos somente com os pontos que sobraram, e no com todo o algoritmo. Caso, neste segundo detalhamento, ainda existam dificuldades na implementao algortmica dos detalhes ainda no resolvidos, podemos criar os detalhes do detalhe, deixando a soluo algortmica para um terceiro detalhamento. E assim sucessivamente, at obtermos um texto coerente com a linguagem algortmica.

CAPTULO 6 - ESTRUTURAS DE SELEO

63

incio

leia (num);

se num >= 0

triplo de num;

se num < 0

dobro de num;

escreva (res);

fim.

Figura 6.2 Fluxograma do exerccio resolvido R.6.1 Obviamente que o problema R.6.l. no tem muito de complexo, ou trabalhoso, para usar a tcnica de refinamentos sucessivos (ver figura 6.3); mas ns no poderamos perder oportunidade do contexto para inserir esta nova tcnica. A soluo correta do mesmo dada a seguir:

CAPTULO 6 - ESTRUTURAS DE SELEO

64

var num, res : inteiro; incio leia (num); se num >= 0 ento res 3 * num; se num < 0 ento res 2 * num; escreva (res); fim.
incio

leia (num);

se num >= 0

res 3*num;

se num < 0

res 2*num;

escreva (res);

fim.

Figura 6.3 Fluxograma do exerccio resolvido R.6.1 usando a tcnica de refinamentos sucessivos

CAPTULO 6 - ESTRUTURAS DE SELEO

65

R.6.2 - Uma determinada loja est fazendo promoes de vendas. Qualquer compra que um cliente fizer at R$ 100,00 receber 5% de descontos. Se a compra for maior que R$ 100,00, mas inferior a R$ 200,00, o desconto ser de 10%. Se for superior ou igual a R$ 200,00, o desconto ser de 20%. Faa um algoritmo (ver figura 6.4) que calcule o desconto do total da compra de um cliente, e informe tambm, o total a pagar j com os descontos.

Soluo 1: var Tcompra, desconto, Tpagar : real; incio leia (Tcompra); se Tcompra <= 100.0 ento desconto (5/100) * Tcompra; se (Tcompra > 100.0) e (Tcompra < 200.0) ento desconto (10/100) * Tcompra; se Tcompra >= 200.0 ento desconto (20/100) * Tcompra; Tpagar Tcompra - desconto; escreva (desconto, Tpagar); fim.

Soluo 2: var Tcompra, desconto, Tpagar : real; incio leia (Tcompra); desconto (5/100) * Tcompra; {estamos assumindo que o maior parte dos clientes far sua compra entre R$ 100,00 e R$ 200,00. Mas de qualquer maneira iremos verificar se realmente est nesta faixa, caso tenhamos errado, devemos substituir o valor do desconto} se (Tcompra > 100.0) e (Tcompra < 200) ento desconto (5/100) * Tcompra; se Tcompra >= 200.0 ento desconto (20/100) * Tcompra; Tpagar Tcompra - desconto; escreva (desconto, Tpagar); fim.

CAPTULO 6 - ESTRUTURAS DE SELEO

66

incio

leia (Tcompra);

se Tcompra <= 100

desconto (5/100)*Tcompra;

se Tcompra > 100 e Tcompra < 200

desconto (10/100)*Tcompra;

se Tcompra >= 200

desconto (20/100)*Tcompra;

Tpagar Tcompra-desconto;

escreva (desconto, Tpagar);

fim.

CAPTULO 6 - ESTRUTURAS DE SELEO

67

incio

leia (Tcompra);

desconto (5/100)*Tcompra;

se Tcompra > 100 e Tcompra < 200

desconto (10/100)*Tcompra;

se Tcompra >= 200

desconto (20/100)*Tcompra;

Tpagar Tcompra-desconto;

escreva (desconto, Tpagar);

fim.

Figura 6.4 Fluxogramas das solues 1 e 2 do exerccio resolvido R.6.2

CAPTULO 6 - ESTRUTURAS DE SELEO

68

6.4 - INSTRUO SE ENTO SENO A estrutura se ento seno (ver figura 6.5) nos permite fazer uma escolha entre duas alternativas mutuamente exclusivas. A sintaxe geral desta instruo : se condio ento inst11; inst12; inst13; ........... inst1N; seno bloco de instrues 2 inst21; inst22; inst23; ........... inst2M; se ento seno uma instruo de seleo composta. condio pode ser um identificador do tipo lgico, ou uma expresso relacional, ou uma expresso lgica. inst11;...;inst1N forma o conjunto de instrues do bloco de instrues 1 inst21;...;inst2M forma o conjunto de instrues do bloco de instrues 2

bloco de instrues 1

onde:

A semntica desta instruo, tem a seguinte definio: Como condio somente poder fornecer um valor lgico (falso ou verdadeiro), ento temos duas possibilidades para avaliar: ou executamos o bloco de instrues 1 (ento), ou executamos o bloco de instrues 2 (seno), mas qualquer um dos blocos que for executado, implica na excluso do outro.

se condio

inst_11; inst_12; ......; inst_1N;

inst_21; inst_22; ......; inst_2M;

Figura 6.5 Estrutura SE ENTO SENO

CAPTULO 6 - ESTRUTURAS DE SELEO

69

Se o valor avaliado de condio for verdadeiro, ento o bloco de instrues 1 ser executado e por conseguinte, o bloco 2 ser ignorado. Seno caso o valor avaliado de condio for falso, ento o bloco de instrues 2 ser executado, e o bloco 1 ser ignorado. Note que nesta instruo sempre teremos que executar um dos blocos de instrues. Aps a execuo de um dos blocos, o controle de execuo deve ser transferido para a primeira instruo que vier aps a estrutura se ento seno. FALSO - - - - - Fluxo a ser seguido se o valor de condio for falso

VERDADEIRO se condio ento inst11; inst12; inst13; ... inst1N; seno inst21; inst22; inst23; .......... inst2M; instX; 6.5 - EXERCCIOS RESOLVIDOS

Fluxo a ser seguido se o valor de condio for verdadeiro

R.6.3 - Dados dois nmeros inteiros quaisquer, faa um algoritmo que descubra qual o maior valor entre eles (ver figura 6.6). Soluo: var num1, num2, maior : inteiro; incio leia (num1, num2); {Conhecendo os valores dos nmeros} se num1 > num2 {Caso o 1. nmero for maior que o 2.} ento maior num1; seno maior num2; {Caso o 2. nmero seja maior ou igual ao 1.} escreva (maior); fim.

CAPTULO 6 - ESTRUTURAS DE SELEO

70

INSTRUO
num1

AO
num2 maior

var num1, num2, maior leia (num1, num2); (supondo 5 e 8 como valores) se num1 > num2 ento maior num1; seno maior num2; escreva (maior);
5 8

incio

leia (num1, num2);

se num1 > num2

maior num1;

maior num2;

escreva (maior);

fim.

Figura 6.6 Fluxograma do exerccio resolvido R.6.3

CAPTULO 6 - ESTRUTURAS DE SELEO

71

R.6.4 - Faa um algoritmo (ver figura 6.7) que receba como argumento de entrada o total de ganhos de uma pessoa, em reais, e que calcule o desconto do imposto de renda, segundo a tabela a seguir: FAIXA SALARIAL EM R$ at 500,00 de 500,00 at 1.500,00 de 1.500,00 at 2.500,00 acima de 2.500,00 refinamento 1 - definir os objetos necessrios - conhecer o total de ganhos da pessoa - verificar em qual faixa salarial os seus ganhos encontram - em funo da faixa salarial, verificar o % devido para o IR - calcular o montante que deve ser pago ao IR - informar o resultado refinamento 2 ae (Tganho); as (TpagarIr); {Tganho = Total de ganhos, em reais} {TpagarIr = Total a pagar de Imposto de renda} ALQUOTA DE DESCONTO (isento) 0% 10% 15% 25%

objetos Tganho, TpagarIr, alquota : real; {alquota = varivel auxiliar usada nos clculos do imposto a pagar, sua funo ser de armazenar o percentual do imposto devido} incio leia (Tganho); se Tganho <= 500 {se os ganhos da pessoa so at 500,} ento {ento ela isenta do imposto de renda} alquota 0; seno {se a pessoa ganha mais de 500 ento verifique, qual a alquota devida para o IR} TpagarIr Tganho * aliquota; {clculo do IR devido} escreva (TpagarIr); fim. Estamos usando a tcnica de refinamentos sucessivos. Definimos, em primeiro lugar, os objetos e depois tentamos ating-los passo-a-passo. Desta forma a soluo algortmica fica mais fcil.

CAPTULO 6 - ESTRUTURAS DE SELEO

72

Apesar de aparecer mais trabalhosa, esta tcnica permite escrever algoritmos com confiabilidade, ou seja, com menor risco de errar. E acredite, s vezes descobrir um erro em um algoritmo mais difcil do que refaz-lo. refinamento 3 var Tganho, TpagarTr, alquota : real; {alquota = varivel auxiliar usada nos clculos do imposto a pagar, sua funo ser de armazenar o percentual do imposto devido} incio leia (Tganho); {se os ganhos da pessoa so at 500,} se Tganho <= 500 ento {ento ela isenta do imposto de renda} alquota 0; seno se Tganho <= 1500 {se no for isenta, qual o % devido para o IR} ento alquota 10/100; seno se Tganho <= 2500 ento alquota 15/100; seno alquota 25/100; TpagarIr Tganho * aliquota; {clculo do IR devido} escreva (TpagarIr); fim.
incio

leia (Tganho);

se Tganho <= 500

alquota 0;

calcular diferena;

TpagarIr Tganho*alquota;

escreva (TpagarIr);

fim.

CAPTULO 6 - ESTRUTURAS DE SELEO

73

incio

leia (Tganho);

se Tganho <= 500

alquota 0;

se Tganho <= 1500

alquota 10/100;

se Tganho <= 2500

alquota 15/100;

alquota 25/100;

TpagarIr Tganho*alquota;

escreva (TpagarIr);

fim.

Figura 6.7 Fluxogramas do exerccio resolvido R.6.4 usando a tcnica de refinamentos sucessivos

CAPTULO 6 - ESTRUTURAS DE SELEO

74

6.5 - EXERCCIOS PROPOSTOS Faa um algoritmo para resolver cada um dos problemas abaixo: 1) Um funcionrio ganha P reais por hora normal trabalhada. Sabendo-se que a jornada normal de trabalho de 40 horas/semana e que o mesmo ganha 50% a mais sobre o valor da hora normal, por hora extra trabalhada. Ao serem fornecidos o valor da hora normal e a quantidade de horas trabalhada na semana. Calcule: o salrio normal semanal, o salrio extra e o salrio bruto do funcionrio. 2) Refaa o exerccio 1, considerando que sobre o salrio bruto do funcionrio incidem as seguintes taxas: a) 10% de INSS; b) Imposto de Renda (IR) de acordo com a seguinte tabela: faixa salarial R$ at 2.000,00 de 2.000,01 at 3.000,00 de 3.000,01 at 4.500,00 acima de 4.500,00 c) Imposto Sindical 0,5%. Informe os salrios parciais (vantagens), o total das vantagens, os descontos e o salrio lquido do funcionrio. 3) Fornecidos 2 valores descobrir qual o maior valor, e coloc-los em ordem crescente. 4) Fornecidos 3 valores descobrir qual o maior valor e o menor valor entre os mesmos. 5) Numa certa loja de eletrodomsticos, o vendedor encarregado da seo de televisores recebe, mensalmente, um salrio fixo mais comisso. Esta comisso calculada em relao ao tipo e a quantidade de televisores vendidos por ms, obedecendo a seguinte tabela: TIPO DE TV a cores preto-e-branco N. DE APAR. VEND. at 10 mais de l0 at 20 mais de 20 COMISSO (R$) / APAR. VEND. 5,00 10,00 2,00 4,00 alquota de desconto % isento 8% 10 % 15 %

Sobre o seu salrio fixo h um desconto de 10% referente ao INSS. Caso o seu salrio bruto exceda a R$ 100,00 haver desconto de imposto de renda, segunda a tabela abaixo, aplicada sobre o valor excedente a R$ 100,00.

CAPTULO 6 - ESTRUTURAS DE SELEO

75

FAIXA SALARIAL at 100,00 de 100,01 at 150,00 mais de 150.00 Calcule: a) a comisso do funcionrio; b) o salrio bruto do funcionrio; c) os valores de cada desconto; d) o total dos descontos; e) o salrio lquido.

ALIQUOTA (%) isento 10 15

6) Na linha de montagem de uma fbrica existem 3 classes de operrios: 1 - os que montam at 30 peas por ms 2 - os que montam de 31 at 35 peas por ms 3 - os que montam mais de 35 peas por ms Os operrios de classe 1 ganham salrio mnimo. Os da classe 2 ganham o mnimo mais uma comisso de 3% (do salrio mnimo) por pea montada acima das 30 iniciais, e os da classe 3, recebem o mnimo mais 5% por pea acima das 30 iniciais. Calcule o salrio bruto do operrio, informando o valor ganho com comisso. 7) Dado um conjunto contendo quatro valores (i, a, b, c), sendo i um valor inteiro, faa: se i = l, ordene em ordem crescente a,b,c se i = 2, ordene em ordem decrescente a,b,c se i = 3, informar os trs valores, de forma que o maior valor entre a, b e c fique entre os outros dois. Para qualquer outro valor de i divida a soma de a, b e c pelo maior valor entre os mesmos. 8) Dado um par de coordenada cartesiana (X, Y), determinar em que quadrante (ou sobre que eixo) do sistema cartesiano encontra-se esta coordenada. Use a seguinte codificao: VALOR INFORMADO (0, 0) (1, 1) (2, 1) (-3, -3) (-4, 4) (-1, 0) (0, -2) SIGNIFICADO coordenada na origem do sistema coordenada no quadrante 1 coordenada no quadrante 2 coordenada no quadrante 3 coordenada no quadrante 4 coordenada sobre o eixo X coordenada sobre o eixo Y

CAPTULO 6 - ESTRUTURAS DE SELEO

76

9) Fornecidos 3 valores inteiros, coloca-los em ordem crescente (utilize o menor nmero de comparaes (3)). 10) Sabe-se que o dia da semana fornecido entre 1. de maro de 1700 a 28 de fevereiro de 2100, pode ser determinado atravs do seguinte mtodo: N = (365,25 * g(a, m)) + (30,6 * f(m)) + d - 621049 ,m)) ds = [N / 7 ]* 7 + C + 1 onde: d m a ds o dia do ms atual o ms atual o ano atual o dia da semana (1,2,...,7) 1 domingo e 7 sbado m - 13, se m 2 f(m) = m + 1, se m > 2

a - 1, se m 2 g(a, m) = a, se m > 2

2, se N < 36523 C = 1, se 36523 N < 73048 0, se N > 73048 parte fracionria de

parte inteira de

Você também pode gostar