Jump to content
Fórum Script Brasil
  • 0

Ajuda em um programa com struct


rafaelzin

Question

Galera, é o seguinte eu tenho um exercicio para resolver usando estrutura, porém já tentei fazer tudo o que eu sabia para resolver e não consegui, então se alguém pudesse me dar uma mão eu iria ficar muito grato.

O exercício é o seguinte...

Fazer um programa para ajudar no cálculo do salário de um funcionário. O sistema deve criar uma estrutura(struct) chamada Funcionário e então pedir e armazenar em seus atributos:

> nome do funcionário

>salario bruto

>numero de dependentes

e deve mostrar:

>nome do funcionario

>salario liquido

Considere a seguinte regra para o calculo:

Salario Liquido=salario Bruto-Desconto INSS+(15,00*Numero de dependentes)+Auxilio Passagem (40,00)+Auxilio Refeição(100,00)

Salário bruto até 300 reais =8% de desconto do inss

salário bruto de 301 a 700 reais = 9% de desconto do inss

salário bruto acima de 700 reais = 10% de desconto do inss

__________________________________________________________________

eu tentei tentei fazer e o que eu consegui foi isso:

#include <stdio.h>

struct funcionario
{
int dep;
char nome[30];
float inss,sal_b,sal_l;
};

int main () {
int dep;
char nome;
float inss,sal_b,sal_l;


printf("\n Digite o nome do funcionario: ");
scanf("%s",nome);
printf("\n Digite o numero de dependentes do funcionario: ");
scanf("%d",dep);
printf("\n Digite o salário bruto do funcionario: ");
scanf("%2.2f",sal_b);

if (sal_b<=300){
inss=sal_b*0.08;

}else if (sal_b>300;sal_b<=700){
inss=sal_b*0.09;

}else if(sal_b>700){
inss=sal_b*0.10;
}

sal_l=sal_b-inss+(15*dep)+40+100;

printf("\n O funcionário %s recebe %2.2f de salario liquido",nome,sal_l);
printf("\n\n");

return 0;
}

mas não compila nem a pau :(

ME AJUDA AE GALERA

vlw

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Meu jovem! Ta pronto seu codigo:

#include <stdio.h>


int main () {


struct info
{
int dep;
char *name;
float inss,sal_b,sal_l;
};

struct info funcionario;

int dep;
int size=1;
char c;
float inss,sal_b,sal_l;

printf("\n Digite o nome do funcionario: ");
fflush(stdin); //limpa buffer do teclado
funcionario.name=NULL;
do {
    c=getchar(); //le cada caractere por vez e o inclue na variavel c
    if(!iscntrl(c)) { //testa se não for digitado enter
    size++;
    funcionario.name= (char *) realloc (funcionario.name, sizeof(char)*size); //aloca o vetor caractere na memora em tempo de execucao
    if (funcionario.name) funcionario.name[size-2]=c; //inclue na penultima posicao
    else exit(1);
    }
}while (!iscntrl(c));
funcionario.name[size-1]=''; //ultima posicao da string deve ser caractere de finalizacao 
printf("\n Digite o numero de dependentes do funcionario: ");
scanf("%d",&funcionario.dep);
printf("\n Digite o salário bruto do funcionario: ");
scanf("%f",&funcionario.sal_b);

if (funcionario.sal_b<=300)
funcionario.inss=sal_b*0.08;

else if (funcionario.sal_b>300&&funcionario.sal_b<=700)
funcionario.inss=sal_b*0.09;

else if(funcionario.sal_b>700)
funcionario.inss=funcionario.sal_b*0.10;

funcionario.sal_l=funcionario.sal_b-funcionario.inss+(15*funcionario.dep)+40+100;

printf("\n O funcionário %s recebe %.2f de salario liquido",funcionario.name,funcionario.sal_l);
printf("\n\n");

return 0;
}

erros que vi! vamos por partes:

1. scanf sempre se utiliza de referencia:

scanf("%d", numero); esta errado! falta o E comercial &

scanf("%d", &numero);

2. em if, quando você quer associar duas premissas, sejam elas por OU ou E

ex se num=0 OU num=2 em c ficaria:

if(num==0||num1==2), se uma das duas condicoes for satisfeita, ta valendo.

mesma coisa com o e

if (num==0&&num1==2) só ta valendo se as duas forem verdadeiras

3. struct precisava de ser refinado muito.

struct é um tipo de registro. depois de criado você precisa criar um novo registro do tipo que você fez. sintaxe:

struct NOME_DO_TIPO {

tipo1 variavel1;

etc..

};

struct NOME_DO_TIPO NOME_DO_REGISTRO;

percebe bem como foi feito no codigo.

depois você retira o valor, le ou modifica ele utilizando a sintaxe NOME_DO_REGISTR.variavel1=argumento;

4.

realloc é muito poderoso, mas precisa de pratica pra poder usar ele.

recomendacoes:

quando if possuir uma instrucao apenas não tem necessidade de colocar {} exemplo:

if(num==2) num++; soma uma unidade a variavel se ela for igual a 2.#

referencia que você pode pegar:

http://www.ime.usp.br/~pf/algoritmos/aulas/stru.html

http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

não sabe ingles? aprenda pra progamar, minha ultima recomendacao!!

Salve Dennis Ritchie!

Edited by gabriel chamon araujo
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...