Jump to content

Erro Lógico em programa sem erros de sintaxe.


Inacabado

Recommended Posts

este é um programa que é pedido num exercício de calculo de taxas.

Eu fiz o programa e ele não me dá erro de sintaxe algum, mas ao entrar um valor ele não corre no resto do programa e fica sei lá "estúpido"...nem entra no while!

segue o código:

#include <iostream>

const double Tax1=0.10;
const double Tax2=0.15;
const double Tax3=0.20;

const int FirstStep=5000;
const int SecondStep=15000;
const int ThirdStep=35000;

int main()
{
	using namespace std;
	double income,remain,tax=0.0;
	printf("Enter your income: ");
	scanf("%lf",&income);
	
	while(income>FirstStep)
	{
		if(income>ThirdStep)
		{
			tax=(income-ThirdStep)*Tax3;
			income=ThirdStep;
		}
		else if(income<=ThirdStep&&income>SecondStep)
		{
			tax+=(income-SecondStep)*Tax2;	
			income=SecondStep;
		}
		else if(income<SecondStep&&income>FirstStep)
		{
			tax+=(income-SecondStep)*Tax1;	
			income=FirstStep;
		}
	}
	remain=income-tax;
	printf("Your income was of %g.\nTaxes=%g\nAfer Taxes"
			" you win just %g\n",income,tax,remain);
return 0;
}

Não consigo perceber o erro... Precisa de alguma decrementação obrigatória??? Não sei; agradecia muito uma ajuda da comunidade. obrigado desde já. Um abraço ao HHH!!!

Link to post
Share on other sites

Já percebi onde está o erro! Ele não chega a entrar no 2º else if(income<SecondStep&&income>FirstStep), porque falta lá o igual! O income é igualado a 15000 no else if anterior , mas não chega a entrar neste por que a condição é falsa, por isso o loop infinito!

Mesmo assim o programa está com erros lógicos!

Link to post
Share on other sites

E porque eu gosto de limar arestas e ter tudo a correr como deve ser. Já dei conta das falhas do programa e aqui está o código a correr limpinho, e a fazer o que deve fazer smoth...

/*  */
#include <iostream>

const double Tax1=0.10;
const double Tax2=0.15;
const double Tax3=0.20;

const int FirstStep=5000;
const int SecondStep=15000;
const int ThirdStep=35000;

int main()
{
	using namespace std;
	double income,remain,tax=0.0,tmp;
	printf("Enter your income: ");
	scanf("%lf",&income);
	tmp=income;
	
	while(tmp>FirstStep)
	{
		if(tmp>ThirdStep)
		{
			tax=(tmp-ThirdStep)*Tax3;
			tmp=ThirdStep;
		}
		else if(tmp<=ThirdStep&&tmp>SecondStep)
		{
			tax+=(tmp-SecondStep)*Tax2;	
			tmp=SecondStep;
		}
		else if(tmp<=SecondStep&&tmp>FirstStep)
		{
			tax+=(tmp-FirstStep)*Tax1;	
			tmp=FirstStep;
		}
	}
	remain=income-tax;
	printf("Your income was of %g.\nTaxes=%g\nAfer Taxes"
			" you win just %g\n",income,tax,remain);
return 0;
}

Uma oferta para quem quiser calcular taxas, só têm que mudar as constantes! hehe

Ah e um abraço ao Happy Hippo!

Link to post
Share on other sites
HappyHippyHippo

já que queres limpar o código, podes dizer quando é que no primeiro else if o valor tmp é maior que ThirdStep ?

e no segundo else if, quando é que o tmp é Maori que SecondStep ?

IRC : sim, é algo que ainda existe >> #p@p
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.