Ir ao conteúdo
  • Cadastre-se

C Projeto Folha de pagamento(erro)


Eduardo12121

Posts recomendados

Estou com um projeto de folha de pagamento, mas estou com um problema, ele n está calculando o FGTS, Salário Família e Imposto de Renda, e eu não consigo identificar o erro, quem souber o por que por favor me ajude.(trabalho para a faculdade)

 

 

 

 

#include <stdio.h>
#include <locale.h>


main()
{
    int fcod, depen, dep;
    float sal, gsal, vtn, vtfinal, psfinal, en, qt, inss, in, fgts, sl, ir, ir1, irfinal,sll;
    int vt, ps, cont;
    setlocale (LC_ALL, "Portuguese");
    printf("Informe o código do funcionário: ");
        scanf("%d", &fcod);
    printf("Quantidade de dependetes: ");
        scanf("%d", &depen);
        cont=depen;
        while (cont >= 1)
            {
            printf("Informe a idade do(s) dependente(s): ");
                scanf("%d", &dep);
                cont = cont-1;
            }
        printf("Informe o salário do funcionário: ");
            scanf("%f", &sal);
        printf("Salário extra/gratificação: ");
            scanf("%f", &gsal);
        printf("Funcionário usa VT? Responda com 1(S) ou 2(N): ");
            scanf("%d", &vt);
            if (vt==1)
            {
                vtn=sal*0.06;
                if (vtn < 198.00)
                    vtfinal=vtn;
                else
                    if(vtn>198.00)
                    vtfinal=198.00;
                
                printf("VT: $%.2f", vtfinal);
            }
            else
            {
                printf("VT: $0");
            }
            printf("\nFuncionário usa PS? Responda com 1(ENFERMARIA) ou 2(QUARTO): ");
            scanf("%d", &ps);
            if (ps==1)
            {
                en=(depen+1)*89.90;
                psfinal=en;
                printf("PS: %.2f", en);
            }
            else
            {
                qt=(depen+1)*119.90;
                psfinal=qt;
                printf("PS: %.2f", qt);
            }
            // INSS
            in=sal+gsal;
            if (in<=1751.81)
            {    
                inss=in*0.08;
                printf("\nINSS:$%.2f", inss);
            }
            else
            {
            
        
                in=sal+gsal;
                if(in <=2919.72)
                {
                        inss=in*0.09;
                        printf("\nINSS:$%.2f", inss);
                }
            
                else
                
                    in=sal+gsal;
                    if(in <=5839.45)
                        {                            
                        inss=in*0.11;
                        printf("\nINSS:$%.2f", inss);
                        
                        }
                    else
                    
                        in=sal+gsal;
                        if(in>=5839.45)
                        {
                            inss=5839.45*0.11;
                            printf("\nINSS:$%.2f", inss);
                        }
            }
            
        //FGTS
        fgts=(sal+gsal)*0.08;
        printf("\nFGTS:$ %.2f", fgts);
        //Salario familia
        if(dep>=1 && sal+gsal <= 907.77)
        {
            sl=(sal+gsal)+(46.54*dep); 
            printf("\nSalário Família: $ %.2f", sl);  
        }
        else
            if(dep>=1 && sal+gsal <= 1364.44)
            {
                sl=(sal+gsal)+(32.80*dep);
                printf("\nSalário Família: $ %.2f", sl);

            }
            else
                if(dep>=1 && sal+gsal > 1364.44)
                {
                    sl=(sal+gsal)+(0*dep);
                    printf("\nSalário Família:$0");
                }
            //imposto de renda
            ir1=(sal+gsal-inss)-(depen*189.59);
            ir=ir1;
            if (ir <= 1903.98)
            {
                printf("\nIR:$0", &ir);
            }
            else
                if(ir <= 2826.65)
                {
                    irfinal=ir*0.075;
                    printf("\nIR:$%.2f", &ir);
                }
                else    
                    if(ir <=3751.05)
                    {
                        irfinal=ir*0.15;
                        printf("\nIR:$%.2f", &ir);
                    }
                    else
                        if(ir <= 4664.68)
                        {
                            irfinal=ir*0.225;
                            printf("\nIR:$%.2f", &ir);
                        }
                        else
                            if(ir > 4664.68)
                            {
                                irfinal=ir*0.227;
                                printf("\nIR:$%.2f", &ir);
                            }
            //salário liquido
            sll=(sal+gsal)-(vtfinal-psfinal)-(inss+sl-ir);
            printf("\nSalário Liquido:$%.2f", sll);
                
                                
            
}

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

Seu programa está todo dependente, cada linha depende da outra o que dificulta isolar as partes e localizar os bugs. Mas tentarei.

 

Qual a tua intenção aqui ?

while (cont >= 1)
{
      printf("Informe a idade do(s) dependente(s): ");
      scanf("%d", &dep);
      cont = cont - 1;
}

Vejo o comando de repetição, a função de impressão, a função de leitura no prompt; mas não aceito a finalidade e não quero fazer suposições.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Eduardo12121 disse:

Estou com um projeto de folha de pagamento, mas estou com um problema, ele n está calculando o FGTS, Salário Família e Imposto de Renda, e eu não consigo identificar o erro, quem souber o por que por favor me ajude.(trabalho para a faculdade)

Recomendo começar de novo.

 

3 horas atrás, Eduardo12121 disse:

int fcod, depen, dep;
    float sal, gsal, vtn, vtfinal, psfinal, en, qt, inss, in, fgts, sl, ir, ir1, irfinal,sll;

você está usando muitas variáveis redundantes, e que não tem nomes significativos.

outra coisa e o recuo(endentação) que você está dando isso deixa o código menos legível.

3 horas atrás, Eduardo12121 disse:

while (cont >= 1)
            {
            printf("Informe a idade do(s) dependente(s): ");
                scanf("%d", &dep);
                cont = cont-1;
            }

Aqui só pega a ultima idade, você teria que declarar um vetor.

3 horas atrás, Eduardo12121 disse:

printf("Funcionário usa VT? Responda com 1(S) ou 2(N): ");
            scanf("%d", &vt);
            if (vt==1)
            {
                vtn=sal*0.06;
                if (vtn < 198.00)
                    vtfinal=vtn;
                else
                    if(vtn>198.00)
                    vtfinal=198.00;
                
                printf("VT: $%.2f", vtfinal);
            }
            else
            {
                printf("VT: $0");
            }

vtn aqui só está sendo usando uma vez, então não seria necessário.

3 horas atrás, Eduardo12121 disse:

 if (vtn < 198.00)
                    vtfinal=vtn;
                else
                    if(vtn>198.00)
                    vtfinal=198.00;

se vtn e menor do que 198 não seria necessário testar se é maior.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

/* Constantes */
#define T_NOME 10
#define VT_T 168

/* Tipos */
typedef struct
{
  char nome[T_NOME];
  unsigned short idade;
}TDependente;

/* Estrutura para funcionario */
typedef struct
{
  char nome[T_NOME];
  unsigned short idade;
  float salario,extra;
  unsigned short q_dependentes;
  unsigned id;
  TDependente *dependentes;
}TFuncionario;


int main(void)
{
  TFuncionario funcionario;
  int cont;
  char tecla;
  float vtfinal=0;
  /* Pega os dados do usuario */
  printf("\nInforme o codigo do funcionario:\t");
  scanf("%u",&funcionario.id);
  getchar();
  printf("\nInforme o nome do funcionario:\t");
  fgets(funcionario.nome,T_NOME,stdin);
  printf("\nInforme a idade do funcionario:\t");
  scanf("%hu",&funcionario.idade);
  printf("\nInforme a quantidade de dependentes:\t");
  scanf("%hu",&funcionario.q_dependentes);
  getchar();
  /* Cria um vetor dinamico */
  funcionario.dependentes=malloc(sizeof(TDependente)*funcionario.q_dependentes);
  if(!funcionario.dependentes)
  {
    printf("\nO programa quebrou!\n");
    getchar();
    return(-1);
  }
  for(cont=0; cont<funcionario.q_dependentes; cont++)
  {
    printf("\nDigite o nome do dependente:\t");
    fgets(funcionario.dependentes[cont].nome,T_NOME,stdin);
    printf("\nDigite a idade do dependente:\t");
    scanf("%hu",&funcionario.dependentes[cont].idade);
    getchar();
  }
  printf("\nInforme o salario do funcionario:\t");
  scanf("%f",&funcionario.salario);
  getchar();
  printf("\nInforme o salario extra/Gratificacao:\t");
  scanf("%f",&funcionario.extra);
  getchar();
  printf("\nO funcionario usa VT S(im) ou N(ao):");
  scanf("%c",&tecla);
  getchar();
  if(toupper(tecla)=='S')
  {
    if((funcionario.salario*0.06)<VT_T)
      vtfinal=funcionario.salario*0.06;
    else
      vtfinal=VT_T;
    printf("VT:$%.2f",vtfinal);
  }
  else
    printf("VT:$%.2f",vtfinal);
  free(funcionario.dependentes);    /* Apaga o vetor */
  return(0);
}

Eu refiz um pedaço do seu programa para demonstra alguns conceitos de estruturas e organização.

 

Compare o seu com o meu e veja o que pode ser melhorado.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!