Hellsius 0 Denunciar post Postado Maio 18, 2011 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
Renato Utsch 24 Denunciar post Postado Maio 18, 2011 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
Hellsius 0 Denunciar post Postado Maio 20, 2011 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
Renato Utsch 24 Denunciar post Postado Maio 20, 2011 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
Hellsius 0 Denunciar post Postado Maio 21, 2011 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
Renato Utsch 24 Denunciar post Postado Maio 22, 2011 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
Hellsius 0 Denunciar post Postado Maio 22, 2011 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",¬a1); if(validaNota(nota1) != true) { printf("\nNota errada"); } } while (validaNota(nota2)!=true) // exibe em tela uma mensagem { printf("\nInforme outra nota:"); scanf("%f",¬a2); 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