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.

Fonte da imagem: https://www.webposto.com.br/blog/economia/icms-como-ele-afeta-o-preco-dos-combustiveis/

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.

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.