Jump to content
Inacabado

Erro Lógico em programa sem erros de sintaxe.

Recommended Posts

Inacabado

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!!!

Share this post


Link to post
Share on other sites
Inacabado

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!

Share this post


Link to post
Share on other sites
Inacabado

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!

Share this post


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

Share this post


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.