• Nenhum resultado encontrado

Cláusula if-else com n blocos de instruções

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

Até o momento foram apresentadas situações que envolvam a execução ou não de um fluxo, neste caso, a presença apenas do comando if e a execução de um fluxo ou outro, nesta situação, a presença do if-else, mas e se for necessário que o programa decida entre 3 fluxos diferentes? Ou ainda, 4 fluxos ou mais? Quando precisar tratar

"n" fluxos na decisão das instruções a serem executadas, associe o uso do else com o if.

Novamente, veja um exercício para exemplificar essa situação.

2.4.1

Exercício de Exemplo

O escritório de contabilidade Super Contábil está realizando o reajuste do salário dos funcionários de todos os seus clientes. Para isso, estão utilizando como referência o reajuste acordado com os sindicatos de cada classe trabalhadora, conforme apresentado na tabela a seguir. Para ajudar o escritório nesta tarefa, faça um programa em C que receba o salário atual, o cargo conforme especificado na tabela a seguir e realize o cálculo do reajuste do salário. Ao término do cálculo o programa deve imprimir o valor do reajuste e o novo salário do funcionário.

Cód. cargo Cargo % reajuste acordado

1 Auxiliar de escritório 7%

2 Secretário(a) 9%

3 Cozinheiro(a) 5%

4 Entregador(a) 12%

Para resolver este exercício foi utilizado o código do cargo para determinar a qual cargo pertence o funcionário, no qual o salário está sendo reajustado, assim, foi de- clarada uma variável do tipo inteiro para armazenar o cargo e foram declaradas duas variáveis do tipo real para armazenar o salário atual do funcionário e o valor do reajuste. Além disso, foi utilizada a estrutura de decisão if-else para decidir qual fluxo executar de

2.4. Cláusula if-else com n blocos de instruções 35

acordo com o cargo do funcionário. Como são 4 cargos, então são necessários 4 fluxos distintos na estrutura de decisão. Veja a seguir a resposta do exercício e os comentários.

1 #include <stdio.h>

2 #include <stdlib.h>

3 void main() {

4 int cargo;

5 float salAtual, reajuste;

6 printf("Informe o cargo do funcionario:");

7 scanf("%d", &cargo);

8 printf("Informe o salario atual:");

9 scanf("%f", &salAtual); 10 11 if (cargo == 1) 12 reajuste = (salAtual * 7) / 100; 13 else if (cargo == 2) 14 reajuste = (salAtual * 9) / 100; 15 else if (cargo == 3) 16 reajuste = (salAtual * 5) / 100; 17 else 18 reajuste = (salAtual * 12) / 100; 19 printf("O reajuste e: %f", reajuste);

20 printf("O novo salario e: %f", salAtual + reajuste);

21 }

A resposta apresentada para o exercício traz uma possível solução para o exemplo. Apesar de mencionar pela primeira vez as palavras "possível solução", o mesmo con- ceito se aplica aos exercícios anteriores e aos próximos, quero dizer com isso, que não há uma única solução para os exercícios apresentadas, nem mesmo os mais simples exercitados, todos eles possuem soluções diferentes das apresentadas que serão satisfa- tórias. E dificilmente dois programadores irão produzir soluções iguais para um mesmo problema, é provável que produzam soluções parecidas, mas é bem pouco provável que façam uma resposta igual, mesmo que seja apenas a diferença nos nomes propostos para as variáveis, sempre haverá alguma diferença pelo simples fato de que as pessoas pensam diferente umas das outras e a programação permite construções distintas para um mesmo problema.

Bem, em relação aos comentários da solução proposta, veja que nas linhas 4 e 5 foram declaradas as variáveis que são necessárias no programa, uma variável do tipo inteiro (int) para armazenar o cargo do funcionário, denominada por cargo, duas variáveis do tipo real (float) para armazenar o salário atual, salAtual e o resultado do cálculo do reajuste a ser aplicado ao salário atual, denominada reajuste. Entre as linhas do programa, 6 a 9, foram utilizadas as funções printf() e scanf() para solicitar ao usuário que informe o cargo do funcionário e o salário atual. O cargo será utilizado no cálculo do reajuste e o salário atual também.

Na linha 11 do exercício de exemplo é iniciado o fluxo de decisão que considera o

cargo do funcionário como sendo o fator de decisão para a escolha entre os fluxos, pois

é o cargo que determina o reajuste a ser aplicado. Desta forma, a linha 11 traz a seguinte condição: "cargo == 1", note que o teste de igualdade é determinado pelo uso da igual- dade dupla, conforme pode ser visto na tabela8, assim se o usuário informar o código "1"para o cargo, então o programa executará o bloco de instruções do primeiro fluxo, ou seja, a linha 12. Veja como foi feito o cálculo de percentual de reajuste: "reajuste

= (salAtual * 7) / 100;", nota-se que o salário atual foi multiplicado por 7 conforme o

36 Aula 2. Estruturas de Decisão

desta expressão ser atribuído à variável reajuste. A presença dos parênteses "( )" na primeira parte da expressão matemática, garante que esta será sempre a primeira a ser realizada, assim, caso a operação fosse a soma, por exemplo, ela seria executada primeiro que a segunda parte da expressão, mesmo a segunda parte sendo uma divisão. Na linha 13, foi incluído o segundo fluxo de decisão e a primeira ocorrência da combinação entre as instruções else e if para possibilitar que uma nova condição seja testada caso a anterior seja falsa. Esse é o princípio do funcionamento da combinação das duas instruções, se a primeira retornar falso como resultado, ao invés de apenas executar o próximo bloco, será feito um novo teste de condição, se o próximo teste também retornar falso, será realizado um novo teste no próximo fluxo encontrado e assim por diante, até o último fluxo, em que há apenas a cláusula else.

As linhas 17 e 18 trazem o último fluxo, totalizando assim os 4 fluxos necessários para o teste dos cargos. As linhas 19 e 20 possibilitam a conclusão do exercício pela impressão do reajuste a ser aplicado, na linha 19, e do novo salário, na linha 20. Note na linha 20, que por opção, o cálculo do novo salário, ou seja, "salAtual + reajuste", foi realizado no comando printf(), neste caso, o valor do salário novo não foi armazenado em nenhuma variável, foi apenas calculado para impressão.

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