Ir ao conteúdo
  • Cadastre-se

C erro em exercício funções em C


Malcolm X
Ir à solução Resolvido por Ansi C,

Posts recomendados

Pensei que tinha terminado o código, quando botei pra rodar não estava funcionando, me ajudem a enxergar onde eu errei. Devo estar errando alguma coisa besta.

________________________________________________________________________________________________________________________________________________

Crie a função ReajSalNovo que receba da função main o valor do salário e efetue o cálculo do reajuste de salário cada funcionário. Considere que o funcionário deve receber um reajuste de 15% caso seu salário seja menor que 800 reais. Se o salário for maior ou igual a 800 e menor ou igual a 1000, seu reajuste será de 10 %; caso seja maior que 1000, o reajuste deve ser de 5%. Exiba na função main o salário antigo e novo salário obtido na função de K números definido pelo usuário. Essa quantidade K deverá ser maior que zero e menor ou igual a 10.

//Protótipo da funcção ReajSalNovo
float ReajSalNovo(float sal_antigo, float sal_novo);

main()
{
    int k,i;
    float SalAntigo, SalNovo;
    do{
        printf("Digite um numero maior que 0 e menor que 11: ");
        scanf("%d",&k);
    }while(k<=0 || k>=10);

    for(i=0;i<k;i++)
        {
        printf("Digite o valor do salario: ");
        scanf("%d", &SalAntigo);
        ReajSalNovo(SalAntigo, SalNovo);
        printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo,SalNovo);
        }
}
float ReajSalNovo(float sal_antigo, float sal_novo)
{
    //Condicionais que calculam o salário antigo com o reajuste para o sal_novo.
    if(sal_antigo<800)
    {
        sal_novo=sal_antigo+sal_antigo*0.15 ;
    }else if(sal_antigo>=800 && sal_antigo<=1000)
    {
        sal_novo=sal_antigo+sal_antigo*0.10;
    }else{
        sal_novo=sal_antigo+sal_antigo*0.05;
    }
    return (sal_antigo,sal_novo);
}

 

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Malcolm X disse:

Só um parâmetro? 

Sim ...

 

Observe:

23 minutos atrás, Malcolm X disse:

Crie a função ReajSalNovo que receba da função main o valor do salário ...

É somente o valor do salario ou comumente salario do funcionário.

Caso contrário fica em desacordo com solicitado. 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

cara, mesmo com apenas um parâmetro continuo com o mesmo problema.

//Protótipo da funcção ReajSalNovo
float ReajSalNovo(float sal_novo);

main()
{
    int k,i;
    float SalAntigo, SalNovo=0;
    do{
        printf("Digite um numero maior que 0 e menor que 11: ");
        scanf("%d",&k);
    }while(k<=0 || k>=10);

    for(i=0;i<k;i++)
        {
        printf("Digite o valor do salario: ");
        scanf("%d", &SalAntigo);
        SalNovo=SalAntigo;
        ReajSalNovo(SalNovo);
        printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo,SalNovo);
        }
}
float ReajSalNovo(float sal_novo)
{
    //Condicionais que calculam o salário antigo com o reajuste para o sal_novo.
    if(sal_novo<800)
    {
        sal_novo=sal_novo+sal_novo*0.15;
    }else if(sal_novo>=800 && sal_novo<=1000)
    {
        sal_novo=sal_novo+sal_novo*0.10;
    }else{
        sal_novo=sal_novo+sal_novo*0.05;
    }
    return (sal_novo);
}

 

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

  • Solução

Precisou também de mudanças interna da função.

#include <stdio.h>
//Protótipo da funcção ReajSalNovo
float ReajSalNovo(float salario);

int main (void)
{
    int k, i;
    float SalAntigo, SalNovo = 0;
    do{
        printf("Digite um numero maior que 0 e menor que 11: ");
        scanf("%d", &k);
    } while ((k < 0) || (11 < k));

    for(i=0; i < k; i++){
        printf("Digite o valor do salario: ");
        scanf("%f", &SalAntigo);

        
        SalNovo = ReajSalNovo(SalAntigo);
        printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo, SalNovo);
        }
}
float ReajSalNovo(float salario)
{
    float sal_novo;
    //Condicionais que calculam o salário antigo com o reajuste para o sal_novo.

    if(salario < 800)
    {
        sal_novo = salario + salario * 0.15;
    }else if((salario >= 800) && (salario <= 1000))
    {
	sal_novo = salario + salario * 0.10;
    }else
    {
        sal_novo = salario + salario * 0.05;
    }
    return (sal_novo);
}

Então funcionou ?

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Malcolm X

27 minutos atrás, Malcolm X disse:

ReajSalNovo(SalNovo);         
printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo,SalNovo);

Você apenas está dando a variável SalNovo para a função, mas a mesma não é modificada.

Você poderia atribuir o valor de retorno dessa função à essa variável, como @Mauro Britivaldo fez, ou imprimi-lo:

printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo,ReajSalNovo(SalNovo));

Também tem um errinho por desatenção, você usou %d no scanf() ao invés de %f:

27 minutos atrás, Malcolm X disse:

scanf("%d", &SalAntigo);

SalAntigo é do tipo float.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues Errinho bobo, sabia que era alguma coisa besta.

1 hora atrás, Lucca Rodrigues disse:

SalAntigo é do tipo float.

 

@Lucca Rodrigues @Mauro Britivaldo Entendi. Enfim, dessa vez consegui resolver o exercício. Agradeço pela ajuda e atenção.

1 hora atrás, Lucca Rodrigues disse:

printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo,ReajSalNovo(SalNovo));

 

O código: 

//Protótipo da funcção ReajSalNovo
float ReajSalNovo(float sal_novo);

main()
{
    int k,i;
    float SalAntigo, SalNovo=0;
    do{
        printf("Digite um numero maior que 0 e menor que 11: ");
        scanf("%d",&k);
    }while(k<=0 || k>=10);

    for(i=0;i<k;i++)
        {
        printf("Digite o valor do salario: ");
        scanf("%f", &SalAntigo);
        SalNovo=ReajSalNovo(SalAntigo);
        printf("Sal_antigo: %.2f\tSal_novo: %.2f\n",SalAntigo,SalNovo);
        }
}
float ReajSalNovo(float sal_novo)
{
    //Condicionais que calculam o salário antigo com o reajuste para o sal_novo.
    if(sal_novo<800)
    {
        sal_novo=sal_novo+sal_novo*0.15;
    }else if(sal_novo>=800 && sal_novo<=1000)
    {
        sal_novo=sal_novo+sal_novo*0.10;
    }else{
        sal_novo=sal_novo+sal_novo*0.05;
    }
    return sal_novo;
}

 

  • Curtir 1
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!