Calcular distribuição de preços de combustível
Esse é um exercício simples mas com aplicação prática. Ele foi inspirado em Solicitação de algoritmo 11 – preço do combustível.
Enunciado: Implemente um programa que receba como entrada os percentuais de impostos de combustível atuais do seu estado (cada estado pode implementar sua própria alíquota e isso altera o percentual de cada componente do preço final do combustível). Abaixo segue uma imagem ilustrativa com a distribuição dos preços fictícia. Seu programa deverá ler o valor pago pelo combustível e mostrar o valor que é recolhido para cada item que compõem o preço do combustível.
O código com a resolução é mostrado abaixo. Inicialmente são solicitados os valores dos percentuais da composição do preço do combustível. Observe que é necessário que esses valores sejam do tipo float (conforme valores na figura). Nas linhas 21 e 22 é solicitado o valor pago pelo combustível (que também precisa ser um valor float).
A dificuldade da questão está relacionada com a obtenção do valor que a porcentagem do item representa. Isso é feito por um cálculo simples, mas que existem muitas formas de fazer. Eu utilizo a expressão: preço * (valor do item / 100). A divisão por 100 é necessária uma vez que os valores são informados como porcentagem. Veja também que é indispensável o uso dos parênteses. Esse processo é repetitivo e se aplica para cada item da composição do preço, conforme linhas de 24 até 28.
#include <stdio.h>
int main() {
float a, b, c, d, e, preco;
printf("Valor do ICMS: ");
scanf("%f", &a);
printf("Valor da Distribuição e Revenda: ");
scanf("%f", &b);
printf("Valor do custo Etanol Anidro: ");
scanf("%f", &c);
printf("Valor do CIDE e PIS/PASEP e COFINS: ");
scanf("%f", &d);
printf("Valor da Realização Petrobras: ");
scanf("%f", &e);
printf("Valor cobrado pelo combustivel: ");
scanf("%f", &preco);
printf("ICMS = R$ %.2f\n", preco*(a/100));
printf("CIDE e PIS/PASEP e COFINS = R$ %.2f\n", preco*(d/100));
printf("Etanol Anidro = R$ %.2f\n", preco*(c/100));
printf("Petrobras = R$ %.2f\n", preco*(e/100));
printf("Distribuicao e revenda = R$ %.2f\n", preco*(b/100));
printf("TOTAL teste: %f\n", preco*(a/100)+preco*(b/100)+preco*(c/100)+preco*(d/100)+preco*(e/100));
return 0;
}
Teste o código em: https://ideone.com/kg6n6h
Um número float possui 6 casas de precisão. Como são valores monetários, eu mostrei apenas 2 casas decimais, formatando a saída com %.2f. Isso gera uma alteração no valor total e com isso a soma dos valores pode não resultar no valor exato do preço do combustível. Para exemplificar, considere como valores de entrada: 10.6, 11.3, 17.0, 27.6 e 33.5. Considere também que o custo do combustível é 5.0. O printf da linha 30 irá mostrar o valor 5.000000, conforme é esperado, mas veja que, se você manualmente somar os valores mostrados na tela para cada item, verá que a soma é R$ 5,01.
Bom, essa é uma questão que o arredondamento de valores pode trazer, mas é uma questão mais complexa e não cabe para a resolução de um exercício tão simples.
E vale a pena avisar: a linha 30 não serve para nada em relação ao enunciado. Eu apenas coloquei ela para uma “prova real” e também para ilustrar a questão da soma dos valores truncados.