Problema Proposto:
Uma loja de departamentos gratifica seus vendedores com uma comissão proporcional às vendas efetuadas no mês. A comissão é de 2,5 % se o total das vendas for de até R$ 500,00 e de 4 % se as vendas forem maiores que este valor.
Fazer um programa em "C" para ler o código de cada vendedor (string), seu salário básico e o total de vendas no mês e calcular o salário a ser recebido. Imprimir um relatório conforme o modelo a seguir:
Código do Vendedor: xxxxxxxxxx
Vendas no Mês: 99999,99
Salário Final: 99999,99
Solução
Implementamos duas soluções, idênticas na lógica, mas diferindo em um detalhe da implementação: na primeira, tratamos o Código do Vendedor como um campo numérico. Isto não é o que foi pedido pelo professor na especificação do problema, mas quanto ao resto a solução respeita e executa o que foi especificado.
Nesta página descrevemos esta primeira solução.
Para ver a solução tratando o Código do Vendedor como string, navegue para Solução - Tratando o Código do Vendedor como String.
Solução - Tratando o Código do Vendedor como um Campo Numérico:
a) Compilador
Foi usado na implementação o compilador "Dev-C++" da Bloodsheed Software (versão 4.9.9.2) .
É um software disponível sob uma GNU (General Public License); pode ser baixado de www.bloodshed.net .
b) Interpretação do Enunciado
O enunciado menciona "... comissão de 2,5 % se o total das vendas ... ... e de 4 % se as vendas forem maiores ... ". Não é dito se a comissão é sobre o salário básico, sobre as vendas ou sobre a soma de ambos. No desenvolvimento foi assumido que a comissão é apenas sobre as vendas.
c) Código-Fonte
Use este link para visualizar ou use o "Anexo" desta página para fazer download.
d) Screenshot da Execução do Programa
e) Considerações e Comentários
e.1 Tipo de Loop de Controle
Para o loop principal foi usado uma estrutura Do/While em lugar de um While porque desta maneira não precisamos escrever comandos para entrada dos "primeiros valores" e então repetir os mesmos comandos para entrada dos valores dentro do loop.
e.2 Constantes Utilizadas
Optamos por definir como constante o "Valor Limite para Mudança do Percentual de Comissão" - no enunciado, 500 reais. Os Percentuais de Comissão - 2,5 ou 4 por cento - também foram definidos como constantes. Isto dá ao programa mais facilidade de entendimento e manutenção.
e.2.1 "Armadilha" em Potencial.
Note-se que na definição dos percentuais estamos fazendo o "Percentual Abaixo" igual a 2.5 divididos por 100 e o Percentual Acima igual a 4 divididos por cem. Desta maneira, quando calculamos a comissão, podemos usar diretamente a constante para multiplicar pelo valor das vendas e obter o percentual.
Mas, se escrevermos "const float PERCENTUALACIMA = 4 / 100", nosso programa irá armazenar ZERO na constante, e não 0.04 como esperamos!
Isto ocorre porque "4" e "100" são valores inteiros, portanto o C++ faz uma "divisão inteira" e o resultado (inteiro) é zero!
Podemos contornar isto simplesmente escrevendo "const float PERCENTUALACIMA = 4.0 / 100". O valor "4.0", como tem um ponto decimal, é tratado como um número real e não como um inteiro e a divisão é feita como desejamos.
e.3 Função "scanf" - Ponteiros
Quando usamos a função "scanf" para obter um dado do operador, precedemos o nome da variável a ser obtida do operador "&".
Isto quer dizer que estamos passando à função um ponteiro para a nossa variável, e não uma cópia do valor da variável.
Porque isto é necessário? Porque de outra forma a função não poderia alterar o valor da variável, ou seja, o que o operador digita não poderia ser armazenado na nossa variável!
Não tentarei explicar aqui detalhadamente o funcionamento dos "ponteiros".
Caso deseje, consulte o artigo "Pointers", de Todd A. Gibson - http://www.augustcouncil.com/~tgibson/tutorial/ptr.html .
e.4 Formatação dos Dados de Saída.
Estamos usando "%.2f" para os valores reais na saída. Isto instrui o compilador para exibir os dados com duas cadas decimais. Poderíamos especificar o número de casas antes da vírgula, também, mas não consideramos necessário para este exemplo.