• Nenhum resultado encontrado

Cláusula if-else com condições compostas

No documento Introdução ao C em 10 aulas (páginas 40-43)

Até agora, foi ensinado a utilizar a estrutura de decisão if-else com apenas um bloco, com dois blocos, e com n blocos de instruções. Foi ensinado também a utilizar os operadores relacionais apresentados na tabela8. Agora é necessário aprender a fazer testes de condição com a combinação de operadores lógicos, em que é possível fazer uso de conjunções, disjunções e negação (LOPES; GARCIA, 2002). Em linguagem C é possível combinar vários operadores em uma mesma condição, inclusive pode-se também combinar operadores diferentes. Para iniciar, veja primeiro a tabela9que apresenta os operadores lógicos. Na sequência veja um exercício para exemplificar o uso da combinação de condições.

Tabela 9 – Operadores lógicos

Operador Lógico Representação em C Exemplo E (conjunção) && x > 1 && x < 19 OU (disjunção) || (duas barras verticais) x == 1 || x == 2 NÃO (negação) ! (exclamação) ! Continuar

Fonte: Adaptado deDamas(2007, p. 63)

2.5.1

Exercício de Exemplo

O hospital local está fazendo uma campanha para receber doação de sangue. O pro- penso doador deve inicialmente se cadastrar informando o seu nome completo, sua idade, seu peso, responder a um breve questionário e apresentar um documento oficial com foto. Faça um programa que permita ao hospital realizar o cadastro dos voluntários para avaliar a aptidão quanto à doação de sangue. Para estar apto a doar, o voluntário deve ter idade entre 16 e 69, pesar pelo menos 50 kg, estar bem alimentado e não estar resfriado. O programa deve ler os dados e imprimir no final o nome do voluntário e se ele está apto ou não.

2.5. Cláusula if-else com condições compostas 37

1 #include <stdio.h>

2 #include <stdlib.h>

3 void main() {

4 char nome[30];

5 int idade, bemAlimentado, resfriado;

6 float peso;

7 printf("Informe o nome:");

8 scanf("%s", &nome);

9 printf("Informe o peso:");

10 scanf("%f", &peso);

11 printf("Informe a idade:");

12 scanf("%d", &idade);

13 printf("Esta bem alimentado? <1-SIM / 0-NAO>");

14 scanf("%d", &bemAlimentado);

15 printf("Esta resfriado? <1-SIM / 0-NAO>");

16 scanf("%d", &resfriado);

17 if (peso >= 50 && (idade >= 16 && idade <= 69)

18 && bemAlimentado && !resfriado)

19 printf("O voluntario %s esta apto!", nome);

20 else

21 printf("O voluntario %s NAO esta apto", nome);

22 }

Pode-se ver na resposta sugerida para o exercício, que na linha 4 foi feita a declaração da variável que será responsável por armazenar o nome do voluntário. Veja que o nome da variável está acompanhado do trecho "[30]", isso indica que foi declarado um

char com tamanho 30, é comum fazer esse tipo de declaração quando é necessário

armazenar texto com tamanho superior a 1. Nas linhas 5 e 6 foram declaradas as demais variáveis para armazenar o peso, a idade e os indicativos de bem alimentado e resfriado. No caso dos indicativos, note que as variáveis foram definidas com o tipo int, desta forma, adotou-se os valores 1 quando afirmativo e 0 quando negativo.

Entre as linhas 7 e 16 da resposta proposta para o exercício, foram incluídas as instruções para que o programa leia as informações fornecidas pelo usuário. Na linha 17 inicia-se o bloco de decisão. Note que o comando if inclui várias condições que são combinadas pelo operador lógico "&&" que corresponde ao "E (conjunção) conforme a tabela9. Na figura11pode ser visto em detalhes qual trecho do código corresponde à cada condição presente na estrutura de decisão if. Veja que a instrução inclui 4 condições, sendo que a segunda condição é composta e por sua vez possui 2 condições, totalizando assim 5 condições.

A figura11mostra também os operadores lógicos, sendo o operador "&&" que é responsável por combinar as condições. O operador de conjunção indica que, para que essa expressão de condição seja considerada verdadeira, todas as condições devem ser verdadeiras, basta que uma delas seja falsa para que a combinação de todas as condições seja considerada falsa. Exemplo, se a idade informada pelo usuário for "15", toda a expressão de condição será considerada falsa, pois todas devem ser verdadeiras para que o conjunto de condições seja considerado verdadeiro. E também o operador de negação

("!"), que neste caso, é utilizado para retornar o contrário do que está armazenado

na variável resfriado, assim, se o usuário informou, por exemplo, "1"indicando que o voluntário está resfriado, então a negação irá retornar o contrário, "0"(zero), e no teste da condição a expressão será considerada falsa, pois não é aceitável um doador resfriado.

38 Aula 2. Estruturas de Decisão

Figura 11 – Exemplo de aplicação dos operadores lógicos

for igual à "0"(zero) e será verdadeiro quando o valor for diferente de zero, ou seja, qualquer outro que não seja zero, incluindo números negativos (SCHILDT,1996, p. 62). Desta forma, no exercício de exemplo apresentado, é preciso uma pessoa bem alimentada, assim, se o usuário responder "0"o teste da condição irá considerar falso, mas se o usuário responder qualquer número diferente de zero, então será considerado verdadeiro, isso quer dizer, que apesar do programa orientar ao usuário responder

"1-SIM / 0-NAO" conforme a linha 15 da solução proposta, se por algum motivo o

usuário responder, por exemplo, "2", será considerado verdadeiro, mesmo que ele tenha respondido um valor fora da faixa disponibilizada pelo programa. Neste caso, o ideal seria forçar o usuário a responder apenas conforme indicado pelo programa, mas isso é assunto para a próxima aula.

Veja agora mais um exercício de exemplo, neste caso, utilizando o operador lógico "OU"(disjunção).

2.5.2

Exercício de Exemplo

Segundo uma tabela médica, o peso ideal está relacionado com a altura e o sexo. Faça um programa em C que receba a altura e o sexo de uma pessoa, após isso calcule e imprima o seu peso ideal, utilizando as seguintes fórmulas:

• Para homens: (72,7 * A) – 58 • Para mulheres: (62,1 * A) – 44,7 • Em que:

A = Altura

2.6. Cláusula if-else com condições aninhadas 39

No documento Introdução ao C em 10 aulas (páginas 40-43)