Ir ao conteúdo

Exercício em C.


maluga

Posts recomendados

Postado

Entaõ estou começando a programar em C e estou tendo problemas em um exercício que meu professor passou.

1) Uma certa empresa decidiu conceder um aumento de salários a seus funcionários de acordo com a tabela abaixo:

Salário Atual Índice De Aumento

0 - 400,00 15%

400,01 - 700,00 12%

700,01 - 1.000,00 10%

1.000,01 - 1.800,00 7%

1.800,01 - 2.500,00 4%

acima de 2.500,00 sem aumento

Fazer um algoritmo que leia, para cada funcionário, o seu número e o seu salário atual e escreve o número do funcionário, seu salário atua1, o percentual de seu aumento e o valor do salário corrigido.

E abaixo é o algoritimo que consegui fazer,porém quando eu testo algum desses valores( 400;400.01;700;700.01;1000;1000.01;1800;1800.01;2500)ou bem proximos deles o programa calcula um percentual de aumento muito maior do que deveria ser.(tipo quando eu coloco 400 no programa o resultado deveria ser 460,porém o resultado fica 515).

#include<stdio.h>
#include<math.h>
int main()
{
float aumento,salario;
int funcionario;
printf("Digite o seu numero de Funcionario:");
scanf ("%d",&funcionario);
printf("Digite seu salario:");
scanf("%f",&salario);
printf("Seu salario e %f\n",salario);
if (salario>=0.0&&salario<=400.0) { aumento=0.15;salario=salario+(aumento*salario); }
if (salario>=400.01&&salario<=700.0) { aumento=0.12;salario=salario+(aumento*salario); }
if (salario>=700.01&&salario<=1000.0) { aumento=0.10;salario=salario+(aumento*salario); }
if (salario>=1000.01&&salario<=1800.0) { aumento=0.07;salario=salario+(aumento*salario); }
if (salario>=1800.01&&salario<=2500.0) { aumento=0.04;salario=salario+(aumento*salario);}
if (salario>2500) aumento=0;
printf("voce e o funcionario numero %d e o seu salario ficou igual a %f apos o aumento de %f%%\n",funcionario,salario,aumento);
system("PAUSE");
return(0);
}

se alguém puder me ajudar obrigado.

Postado

Acredito que isto está ocorrendo pois ele entra em vários IF's...

por exemplo o número que você falou...

400.... Ele entra no primeiro IF e sai valendo 460,

Porém assim que ele sai dele ele entra nesse IF:

if (salario>=400.01&&salario<=700.0)

Ou seja, 460 * 1,12 (12%) 515,20

Postado

Hmmm voce poderia utilizar o

else if....

else if....

if (salario>=0.0&&salario<=400.0) { aumento=0.15;salario=salario+(aumento*salario); }

else if (salario>=400.01&&salario<=700.0) { aumento=0.12;salario=salario+(aumento*salario); }

else if (salario>=700.01&&salario<=1000.0) { aumento=0.10;salario=salario+(aumento*salario); }

else if (salario>=1000.01&&salario<=1800.0) { aumento=0.07;salario=salario+(aumento*salario); }

else if (salario>=1800.01&&salario<=2500.0) { aumento=0.04;salario=salario+(aumento*salario);}

(Eu acho que roda....mas melhor testar antes..)

OU

Adicionar uma variável no seu programa.. por exemplo...

if (salario>=0.0&&salario<=400.0) { aumento=0.15;SalarioFinal=salario+(aumento*salario); }

if (salario>=400.01&&salario<=700.0) { aumento=0.12;SalarioFinal=salario+(aumento*salario); }

if (salario>=700.01&&salario<=1000.0) { aumento=0.10;SalarioFinal=salario+(aumento*salario); }

if (salario>=1000.01&&salario<=1800.0) { aumento=0.07;SalarioFinal=salario+(aumento*salario); }

if (salario>=1800.01&&salario<=2500.0) { aumento=0.04;SalarioFinal=salario+(aumento*salario);}

Tente e me fale o resultado..

vamos ver se da certo =)

Postado

Uma dica que dou pra você que ta começando é evitar realizar opreações "a toa"

por exemplo a variável aumento... teoricamente você não precisaria dela ali...

no caso voce poderia deixar fixo mesmo o valor sem declarar a variável... e já fazer a conta direto.. no caso ficaria mais ou menos assim

if (salario>=0.0&&salario<=400.0) SalarioFinal = salario*1.15

só ai você "economizou" 1 variável e 1 operação,

antes ele faria

aumento*salario

para depois somar ao salario

salario+(aumento*salario)

Claro que pra programas pequenos como esse não fará diferença nenhuma... mas quando o projeto é muito grande ... quanto menos processamento utilizar melhor.

Fica a dica

Postado

O problema do seu código está no argumento dos IFs.

se você reparar bem, vai perceber que se você colocar salario=400, então vai entrar em dois IFs.

Ou entrar em nenhum se salario=400.005


if (salario>=0.0&&salario<=400.0)

if (salario>=400.01&&salario<=700.0)

Para que entre em apenas um, teria que ficar assim:


if (salario>=0.0&&salario[B][COLOR="Red"]<=[/COLOR][/B]400.0)

if (salario[B][COLOR="Red"]>[/COLOR][/B]400.00&&salario<=700.0)

Ou então assim...

------------------------------

Modifiquei o seu código e coloquei de uma forma mais organizada:


#include<stdio.h>
#include<math.h>

int main(){

float aumento,salario;
int funcionario;

printf("Digite o seu numero de Funcionario:");
scanf ("%d",&funcionario);
printf("Digite seu salario:");
scanf("%f",&salario);
printf("Seu salario e %.2f\n",salario);

if (salario>=0.0&&salario<=400.0) aumento=1.15; // (0.0 <= salario <= 400)
else if (salario<=700.0) aumento=1.12; // (400.0 < salario <= 700)
else if (salario<=1000.0) aumento=1.10; // (700.0 < salario <= 1000)
else if (salario<=1800.0) aumento=1.07; // (1000.0 < salario <= 1800)
else if (salario<=2500.0) aumento=1.04; // (1800.0 < salario <= 2500)
else if (salario>2500) aumento=1.00; // (2500.0 < salario)

salario*=aumento;
//é o mesmo que: (salario = salario*aumento)
//como agora aumento está da forma "1 + porcentagemDeAumento/100",
//fica mais simples as operações

float aumentoMostrar = (aumento - 1)*100.0;
//Para mostrar o valor deve ser feito a operação inversa,
//e assim resgatar o valor da porcentagem a ser mostrado

printf("\nVoce e o funcionario numero %d e o seu salario\nficou igual a %.2f apos o aumento de %.2f%%\n\n",funcionario,salario,aumentoMostrar);

system("PAUSE");

return(0);
}

Qualquer dúvida posta ai!

Postado

Com o que o duda3005 disse o programa rodou certinho,porém acho que tirando a variável "aumento" eu teria que escrever mais alguns "if" pois no final ele pede pra dizer qual foi o aumento que o salário teve.

davidalain eu tentei usar o programa da forma como você sugeriu porém o erro continuou.Obrigado pessoal.

Postado
Com o que o duda3005 disse o programa rodou certinho,porém acho que tirando a variável "aumento" eu teria que escrever mais alguns "if" pois no final ele pede pra dizer qual foi o aumento que o salário teve.

davidalain eu tentei usar o programa da forma como você sugeriu porém o erro continuou.Obrigado pessoal.

O código fonte organizado que escrevi não funcionou? Tem certeza?

Postado
sim ele continua com o mesmo erro que o código antigo.

Acho que o seu compilador tem algum problema, pois testei os valores que você informou e funcionaram perfeitamente.

Olha a imagem aqui:

post-563441-13884955345225_thumb.jpg

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!