Ir para conteúdo

POWERED BY:

Arquivado

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

Hellsius

Problema no retorno da função

Recommended Posts

Estou criando meu segundo programa baseado em função.

Este programa tem como objetivo somar o desconto do INSS mais o desconto do IR e depois subtrair pelo salario para descobrir o salario liquido. Mas esta dando erro nesta linha:

   INSSX = INSS(sale);

Segue o fonte abaixo para analize:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
// Exercicio - SalarioLiquido
// INSS
float INSS(float salario)
{
float INSSX;

if(salario<=1.106.90)
  INSSX = (salario*8)/100;
   else
     if(salario>=1.106.91 && salario<=1.844.83)
       INSSX = (salario*9)/100;
       else
         if(salario>=1.844.84 && salario<=3689.66)
           INSSX = (salario*11)/100;
return INSSX;     
}
// IR
float IR(float salario)
{
float IRX;

if(salario<=1.499.15)
  IRX = salario*0;
  else
    if(salario>=1.499.16 && salario<=2.246.75)
      IRX = (salario*7.5)/100;
      else
        if(salario>=2.246.76 && salario<=2.995.70)     
          IRX = (salario*15)/100;
          else
            if(salario>=2.246.71 && salario<=3.743.19)
              IRX = (salario*22.5)/100;
              else
                if(salario>=3.743.19)
                  IRX = (salario*27.5)/100;
return IRX;
}

int main()
{
   float sale, salario_liquido;


   printf("Informe seu salario bruto: ");
   scanf("%f", &sale);

   INSSX = INSS(sale);
   IRX = IR(sale);
   salario_liquido = (INSSX+IRX)-salario;

   printf("O salario liquido eh: %.2f", salario_liquido);

   getch();
}

 

Como estou aprendendo agora a trabalhar com funções me desculpem por eventuais erros grotescos que possam haver no fonte, heheh, abraços a todos e agradeço a ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSSX pode ser acessado por main()?

 

Se está dentro da função INSS, essa variável não pode ser acessada por main(), só por INSSX. Se declará-la como variável global, aí já vira outra coisa.

 

Coloque os nomes das variáveis mais auto-explicativos... WTF is INSSX? Não precisa ter medo de fazer uma variável com nome de 10 caracteres, isso só vai melhorar sua digitação, tornando-a mais rápida! ;D

 

 

Outra coisa, já tentou ler a mensagem de erro que o compilador retorna?

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

O INSSX é a variavel que amazenara 8%,9% ou 11% do salario conforme os if's, então descoberto esta porcentagem do salario deve-se retornar para o main e somar o (INSSX+IRX)-sale, para descobrir o salario liquido, pois foi retirado o desconto do INSS e do IR em cima do salario, consegui explicar a situação?

Eu gostaria que INSSX consiga ser acessado pela função main ou seja preciso que ele faça esse calculo

salario_liquido = (INSSX+IRX)-salario;

no main o compilador não apresenta mensagem de erro, só diz que esta linha esta errada.

 

Obrigado pela ajuda! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mas você não respondeu a minha pergunta.

 

INSSX está declarada dentro da função INSS(). Ou seja, está dentro da scope INSS. Main não pode acessar essa variável, pois está num nível mais interno a qual main() não tem acesso. Imagina se main pudesse modificar as variáveis de uma função enquanto essa função está sendo executada: poderia-se gerar diversos erros no seu programa. Por isso, só a própria função pode acessar os dados declarados dentro dela: para proteger o próprio programa.

 

Olhe seu código de novo: INSSX é a primeira linha da função INSS(). Por isso aquela linha dá erro. INSSX é uma variável não conhecida por main, e, então, ela toma como não existente e o compilador retorna um erro. Se você declarar INSSX como variável global (fora de todas as funções), o código compilará. Aí, essa variável global será modificada pela função INSS() e depois poderá ser acessada por main(), como você quer, já que INSSX é de todos: não faz parte de nenhuma função.

 

Abraços :D

 

@edit:

 

PS: Nâo se esqueça de declará-la no ponto depois dos #include's, pois se usá-la antes de ser declarada no espaço global, o compliador também gerará um erro.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu gostaria de fazer este exercicio sem utilizar variaveis globais.

Fiz algumas edições e o fonte ficou assim, mas ainda não esta compilando, agora ele tenta compilar aparecendo uma menssagem rapido "done whit...".

A parte editada ficou assim:

int main()
{
   float sale, salario_liquido, INSSX, IRX;


   printf("Informe seu salario bruto: ");
   scanf("%f", &sale);

   INSSX = INSS(sale);
   IRX = IR(sale);
   salario_liquido = (INSSX+IRX)-sale;

 

Foi declarada as variaveis INSSX e IRX para o retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

INSS() usa a variável INSSX?

 

Pois, se não estou enganado, a função INSS() não pode acessar as variáveis declaradas em main()...

 

 

Qual o problema com variáveis globais?

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada contra as Variaveis Globais, é que não aprendi a mexer com elas ainda e quero aprender passo a passo sem pular nada, hehe.

 

Então amigo, estou me baseando neste exercicio que foi o unico exercicio que fizemos de função na sala de aula:

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

float calculaMedia(float n1, float n2)//() é um parametro onde é escrito dentro o q vai ser feito
{
     float media;

     //atribuição
     media=(n1+n2)/2;
     return media;
}
void MostraMedia(float media)
{
     printf("\n A media eh: %.2f ",media);    
}
     // retorna a verdade
bool validaNota(float nota)
{
    if(nota>=0 && nota<=10)
       return true;
    else
       return false;     
}


int main()
{
    //declaração de variaveis
    float nota1=11, nota2=11, media; 
    //char resp='true';


    while (validaNota(nota1)!=true) 
    // exibe em tela uma mensagem
    {
       printf("\nInforme uma nota:");      
      //epera que um valor seja digitado
      scanf("%f",&nota1);
     if(validaNota(nota1) != true)
     {        
       printf("\nNota errada");
     }       
    }

     while (validaNota(nota2)!=true) 
    // exibe em tela uma mensagem
    {
       printf("\nInforme outra nota:");    
       scanf("%f",&nota2);    

     if(validaNota(nota2) != true)
     {        
       printf("\nNota errada");
     }       
    }

   //  chamar de uma funçao com retorno->deve ter atribuição 
   media=calculaMedia( nota1, nota2);

   MostraMedia(media);
   getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.