7. Estrutura de Decisão Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas para que se decida qual o caminho a ser seguido. Têm-se 2 tipos de estrutura de decisão: Se; Escolha. Em linguagem C, o equivalente ao Se é a função if() e o equivalente ao Escolha é a função switch(). 7.1. if() Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro (.V.), então um determinado conjunto de instruções (comandos compostos) é executado. Caso contrário, ou seja, quando o resultado da avaliação for falso (.F.), nada é executado e o fluxo de execução segue para o primeiro comando após o fim da estrutura. Pseudocódigo Se (condição) Então Comando 1; if (condição) Comando 1; 36
Exemplo 1: Algoritmo Algoritmo Exemplo1; Var a: inteiro; Inicio Escreva ( Entre com o valor de A: ); Leia (a); Se (a<0) então Escreva ( O valor de A é menor que zero ); Fim main() int a; printf("entre com o valor de A: "); scanf("%d",&a); if (a<0) printf("o valor de A eh menor que zero. \n"); 7.2. if() else Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro (.V.), então um determinado conjunto de instruções (comandos compostos) é executado. Caso contrário, ou seja, quando o resultado da avaliação for falso (.F.), um comando diferente é executado. Após a execução de uma das partes (verdadeira ou falsa) o fluxo de execução segue para o primeiro comando após o fim da estrutura. 37
Pseudocódigo Se (condição) Então Comando 1; Senão Comando 2; if (condição) Comando 1; else Comando 2; 38
Exemplo 2: Algoritmo Algoritmo Exemplo2; Var salario: real; Inicio Escreva ( Entre com o salario: ); Leia (salario); Se (salário>50000) então Escreva ( Você ganha bem ); senão Escreva ( Você precisa ganhar mais ); Fim main() float salario; printf("entre com seu salario: "); scanf("%f",&salario); if(salario>50000) printf("voce ganha bem.\n"); else printf("voce precisa ganhar mais.\n"); 39
7.3. Encadeamento de if() Trata-se de um recurso que permite ao usuário utilizar uma estrutura if dentro de outra obtendo, assim, diversas respostas possíveis. Exemplo 3: Pseudocódigo Algoritmo Encadeamento; Var num: inteiro; Inicio Escreva ( Entre com um número: ); Leia (num); Se (num = 0) Então Escreva ( Número zero. ); Senão Se ( num < 0) Então Escreva ( Número negativo. ); Senão Escreva ( Número positivo. ); Fim 40
main() int num; printf("entre com um numero: "); scanf("%d",&num); if(num == 0) printf("numero zero.\n"); else if(num<0) printf("numero negativo.\n"); else printf("numero positivo.\n"); 7.4. switch() A utilização do switch oferece inúmeras vantagens em relação a utilização da estrutura ninho de if s. Um exemplo prático é a facilidade de escrita de uma estrutura composta por múltiplas escolhas, que requer diversas alternativas, a partir de um certo programa de computador. Porém, a estrutura switch só pode ser utilizada quando estamos testando uma situação de igualdade para uma mesma variável. 41
Pseudocódigo Escolha (variável) Caso <valor_1> Comando 1; Caso <valor_2> Comando 2;... Caso <valor_n> Comando n; Senão Comando n + 1; Fim_escolha switch (variável) case valor_1 : Comando 1; case valor_2 : Comando 2;... case valor_n : Comando n; default: Comando n + 1; Exemplo 4: 42
Pseudocódigo Algoritmo Exemplo4; Var opcao: literal[1]; Inicio Escreva ( Entre com uma letra: ); Leia (opcao); Escolha (opcao) caso A : Escreva ( Letra A ); caso B : Escreva ( Letra B ); caso C : Escreva ( Letra C ); caso D : Escreva ( Letra D ); senão: Escreva ( Não é A, B, C nem D. ); Fim_Escolha Fim #include <conio.h> main() char opcao; puts("entre com uma letra: "); opcao = getch(); switch (opcao) case 'A': printf("letra A.\n"); case 'B': printf("letra B.\n"); case 'C': printf("letra C.\n"); case 'D': printf("letra D.\n"); default: printf("nao eh A, B, C nem D.\n"); Nesta estrutura é opcional a utilização da cláusula default para representar uma alternativa que significa Em nenhum dos casos anteriores. Também é importante saber que a execução do comando switch segue os seguintes passos: 1. A expressão é avaliada. 2. Se o resultado da expressão for igual a uma constante, então a execução começará a partir do comando associado a essa constante e prossegue com a execução de todos os comandos até o fim do switch, ou até que se encontre uma instrução de parada denominada break. 3. Se o resultado da expressão não for igual a nenhuma das constantes e já estiver sido incluída no comando switch a opção default, o comando associado ao default será executado. Caso contrário, isto é, se a opção default não estiver presente, o processamento continuará a partir do comando seguinte ao switch. 43
#include <conio.h> main() char opcao; puts("entre com uma letra: "); opcao = _getch(); switch (opcao) case 'A': printf("letra A.\n"); break; case 'B': printf("letra B.\n"); break; case 'C': printf("letra C.\n"); break; case 'D': printf("letra D.\n"); break; default: printf("nao eh A, B, C nem D.\n"); Os operadores lógicos apresentados no item 6.6.6, 6.6.7 e 6.6.8 são normalmente utilizados em conjuntos com a estrutura de decisão if(). A seguir são apresentados exemplos de programas que fazem uso destes operadores. Exemplo 5: 44
Algoritmo Algoritmo Exemplo5; Var n1,n2: inteiro; Inicio Escreva ( Digite dois números: ); Leia (n1,n2); Se ((n1=0)e(n2=0)) então Escreva ( Você forneceu apenas o número zeros ); senão Escreva ( Soma=, n1+n2); Fim main() int n1, n2; printf("digite dois numeros: "); scanf("%d %d",&n1,&n2); if((n1==0)&&(n2==0)) printf("voce forneceu apenas o numero zero.\n"); else printf("soma = %d \n", n1+n2); Exemplo 6: 45
Algoritmo Algoritmo Exemplo6; Var n1,n2: inteiro; Inicio Escreva ( Digite dois números: ); Leia (n1,n2); Se ((n1<0ou(n2<0)) então Escreva ( Pelo menos um dos números é negativo ); senão Escreva ( Você informou apenas números positivos ); Fim main() int n1, n2; printf("digite dois numeros: "); scanf("%d %d",&n1,&n2); if((n1<0) (n2<0)) printf("pelo menos um dos numeros eh negativo.\n"); else printf("voce informou apenas numeros positivos.\n"); Exemplo 7: 46
Algoritmo Algoritmo Exemplo7; Var n: inteiro; Inicio Escreva ( Digite um número: ); Leia (n); Se (nao(n<>0)) então Escreva (n, é igual de zero ); senão Escreva (n, é diferente a zero ); Fim main() int n; printf("digite um numero: "); scanf("%d",&n); if(!(n!=0)) printf("%d eh igual a zero.\n", n); else printf("%d eh diferente de zero.\n",n); Exercícios 1. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que peça para o usuário informar dois números inteiros. Ao final do processamento, imprimir qual é o maior e o menor desses números. 2. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que peça para o usuário informar três números inteiros. Ordenar estes números de forma crescente e apresentar o resultado na tela. 3. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que peça para o usuário informar uma letra qualquer. No final do processamento, o programa deverá informar se a letra é vogal ou consoante. 4. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C para ler um número real, se este número for negativo, transforme-o em positivo e exiba o resultado ao operador. 5. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C para ler um número real equivalente ao comprimento de uma peça. Verificar se o valor lido encontra-se dentro da faixa de tolerância especificada, informando o resultado ao operador (limite especificado: 20 ± 0,000002 cm). 6. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que 500, se o salário for maior ou igual a 500 e menor ou igual a 1000, seu reajuste será de 10%, caso seja ainda maior que 1000, o reajuste deverá ser de 5%. 7. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que leia dois números fornecidos pelo usuário e uma operação matemática (soma, subtração, multiplicação e divisão). Efetuar a operação matemática escolhida utilizando os números fornecidos e exibir o resultado. 47
8. Observe o fluxograma abaixo e escreve o programa em equivalente. 9. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que leia três números e se o último desses números for menor ou igual a 5 então ele faz a quarta variável receber a subtração das duas primeiras multiplicada pela terceira, se não, receber a soma das duas primeiras multiplicada pela terceira. Apresentar na tela os três números e o resultado. 10. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que leia três valores para os lados de um triângulo e verifique se eles formam um triângulo. Se formarem, dizer que tipo de triângulo ele é: isósceles, escaleno ou equilátero. 11. Uma agência bancária possui dois tipos de investimentos, conforme o quadro a seguir. Faça um algoritmo ( e Pseudocódigo) e o programa em linguagem C que receba o tipo e o valor do investimento, calcule e mostre o valor corrigido de acordo com o tipo de investimento de todos os clientes do banco. Tipo Descrição Rendimento mensal 1 Poupança 3% 2 Fundos de renda fixa 4% 12. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que receba um número inteiro e mostre em qual faixa de números inteiros ele aparece: a. Abaixo de 15; b. Entre 15 e 35; c. Acima de 35. 13. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que dada a idade de um nadador classifica-o em uma das seguintes categorias: Categoria Idade Infantil A 5-7 anos Infantil B 8-10 anos Juvenil A 11-13 anos Juvenil B 14-17 anos Adulto Maiores de 18 anos 48
14. Criar um algoritmo ( e Pseudocódigo) e o programa em linguagem C que receba o código correspondente ao cargo de um funcionário e mostre o cargo: Código Cargo 1 Escriturário 2 Secretária 3 Caixa 4 Gerente 5 Diretor 15. Faça um algoritmo ( e Pseudocódigo) e o programa em linguagem C para calcular a conta final de um hóspede de um hotel fictício, contendo: o nome do hóspede, o tipo do apartamento, o número de diárias utilizadas, o valor unitário da diária, o valor total das diárias, o valor do consumo interno, o subtotal, o valor da taxa de serviço e o total geral. Considere que: a. Serão lidos o nome do hóspede, o tipo do apartamento utilizado (A, B, C ou D), o número de diárias utilizadas pelo hóspede e o valor do consumo interno do hóspede; b. O valor da diária é determinado pela seguinte tabela: TIPO DO APTO. VALOR DA DIÁRIA (R$) A 150,00 B 100,00 C 75,00 D 50,00 c. O valor total das diárias é calculado pela multiplicação do número de diárias utilizadas pelo valor da diária; d. O subtotal é calculado pela soma do valor total das diárias e o valor do consumo interno; e. O valor da taxa de serviço equivale a 10% do subtotal; f. A total geral resulta da soma do subtotal com a taxa de serviço. 16. Analise os trechos de fluxogramas abaixo e informe o valor que será exibido na tela para o usuário. Considere os seguintes valores: A = 2, B = 3, C = 5, D = 9. Saída = Saída = 49
Saída = Saída = Saída = Saída = 50