Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em um programa com struct


rafaelzin

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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

Editado por gabriel chamon araujo
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...