Ir para conteúdo

POWERED BY:

Arquivado

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

hpt

problema com funções

Recommended Posts

galera, sou novo por aqui e to precisando de uma ajuda com funções. to fazendo um exercicio com o seguite enunciado, vo posta o enunciado e o codigo aqui pra ver se vcs podem me ajudar a resolver e fazer ele funcionar

 

 

4) Seja uma estrutura contendo dados dos funcionários de uma empresa.

Para cada funcionário tem-se os seguintes dados: nome: string de

tamanho 20

CPF: vetor de 11 inteiros

numpeças: inteiro

salário: real

Seja os seguintes trechos de programa:

 

// declaração de variáveis globais:
struct funcionário vetfunc[50] ;
int nfunc;
main( ) // definição da função principal:
{
leitura ( );
calc_salario( );
tot_folha( );
printf(" Total de peças fabricadas no mês = %d \n", tot_peças( ) );
op_maior_sal( );
}
void leitura( ) // definição da função leitura:
{
int i,j;
printf("Digite número de funcionários (<= 50): ");
scanf("%d", &nfunc);
for (i = 0; i < nfunc; i++) {
le_CPF( );
while (ver_CPF( ) == 0) {
printf(" \n Erro na digitação do CPF. \n"):
le_CPF( );
}
le_outros_dados( );
}
}

 

Escrever a definição das funções que estão faltando. Þ

Observações:

Obs.1: A função leitura() chama três funções:

o le_CPF(): executa a leitura dos 11 dígitos que compõe o CPF

o ver_ CPF(): verifica se o CPF é valido, se for retorna o valor 1,

caso contrário retorna 0.

o le_outros_dados(): Executa a leitura dos campos nome e

num_peças.

Para verificar a validade do CPF (ou CIC):

Um número de CPF é seguido de dois dígitos denominados dígitos de

controle. Estes dígitos são gerados a partir dos dígitos que compõem o

número de um CPF e acompanham este número como sufixo. Digitandose

um número de CPF é possível computar os seus dígitos de controle e

compará-los com os fornecidos ao sistema. Se os dígitos computados

não batem com os dígitos fornecidos, então o número do CPF é falso ou

ocorreu um erro de digitação. Se eles batem, então as chances de que o

número seja correto são muito altas.

Seja CPF = x[0]x[1]...x[8]x[9]x[10], onde x representa um dígito do CPF

para 0 <= i < =8 e x um dígito de controle para 9 <= i <= 10.

Exemplo:

Seja o CPF: 1 0 3 1 2 4 9 2 1 X[9] X[10]. O dígito de controle X[9] é

obtido da seguinte maneira:

· Multiplicar os dígitos da esquerda para a direita por um número

começando de 1 e incrementado de 1 (de X[0] até x[8]):

Ex.: 1*1, 0*2, 3*3, 1*4, 2*5, 4*6, 9*7, 2*8, 1*9

· Somam-se as parcelas obtidas: Ex.: 1 + 0 + 9 + 4 + 10 + 24 + 63

+ 16 + 9 = 136

· Obtem-se o resto da divisão inteira desta soma por 11: 138 % 11=

4; 4 corresponde ao dígito X[9]

· O dígito de controle X[10] é obtido da seguinte maneira:

o multiplicar os dígitos da esquerda para a direita por um

número começando de 9 e decrementado de 1 (de X[0] até

x[8]): Ex.: 1*9, 0*8, 3*7, 1*6, 2*5, 4*4, 9*3, 2*2, 1*1

o Somam-se as parcelas obtidas: Ex.: 9 + 0 + 21 + 6 + 10 +

16 + 27 + 4 + 1 = 94

o Obtem-se o resto da divisão inteira desta soma por 11: 94

% 11 = 6; 6 corresponde ao dígito X[10]

o ¨ Se o resto da divisão for igual a 10, deve-se considerar

como 0. Ex.: 98%11 = 10 Þ 0

A função deve verificar se os dígitos de controle fornecidos pelo usuário,

obedecem a regra acima.

Obs.2: A função calc_salario() é responsável por calcular o campo salário

de cada funcionário, através da seguinte regra que considera o número de

peças fabricadas:

· Para número de peças menor ou igual a 30: recebe salário mínimo

(R$230,00)

· Para número de peças entre 31 e 45: salário mínimo mais 3% do salário

por peça acima das iniciais.

· Para número de peças acima de 45: salário mínimo mais 5% do salário

por peça acima das 30 iniciais.

Obs.3: A função tot_folha( ) calcula e imprime o valor da folha de

pagamento da empresa.

Obs.4: A função tot_peças( ) retorna o número total de peças fabricadas na

empresa.

Obs.5: A função op_maior_sal( ) imprime os dados do operário de maior

salário.

 

 

codigo:

 

#include <stdlib.h>
#include <stdio.h>

typedef struct {
   char nome;
   int CPF[11];
   int num_pecas;
   float salario;
}funcionario;

   // declaração de variáveis globais:

   int nfunc;
   main( ) // definição da função principal:
   {
       funcionario vetfunc[50];
       void tot_pecas ();
       void leitura ();
       void calc_salario();
       void tot_folha();
       printf("\nTotal de peças fabricadas no mês = %d\n", tot_pecas());
       void op_maior_sal();
       system("pause");
       }
   void leitura( ) // definição da função leitura:
   {
       int i,j;
       printf("Digite número de funcionários (<= 50): ");
       scanf("%d", &nfunc);
       for (i = 0; i < nfunc; i++){
           le_CPF();
           while (ver_CPF() == 0){
           printf(" \n Erro na digitação do CPF. \n"):
           le_CPF();
           }
           le_outros_dados();
       }
   }
   void le_outros_dados(){//função para çer outros dados do CPF//
       int i = 0;
       for (i = 0; i <= 11;i++){
       printf ("\nDigite o nome do funcionario:\n");
       scanf ("%s", &vetfunc[50].nome);
       printf ("\nDigite o numero de peças por funcionario:\n");
       scanf ("%d", &vetfunc[50].num_pecas);
       }
   }
   void le_CPF(){//função para çer o CPF do funcionario//
       int i = 0;
       for (i = 0; i <= 11;i++){
       printf ("\nDigite o numero do CPF do funcionario:");
       scanf ("%d", &vetfunc[50].CPF);
       }
   }
   void ver_CPF(){//função para ver o CPF//
       char cpf[12];   
       int icpf[12];   
       int i,somador=0,digito1,result1,result2,digito2,valor;   
       printf("Digite o cpf: ");   
       scanf(" %s",cpf);   
       for(i=0;i<11;i++){/*Efetua a conversao de array de char para um array 
       de int*/   
           icpf[i]=cpf[i]-48;   
       }   
       for(i=0;i<9;i++){//PRIMEIRO DIGITO//   
      	somador+=icpf[i]*(10-i);   
       }   
       result1=somador%11;   
       if( (result1==0) || (result1==1)){  
           digito1=0;   
       }else{   
           digito1 = 11-result1;   
       }   
       somador=0;//SEGUNDO DIGITO//   
       for(i=0;i<10;i++){   
           somador+=icpf[i]*(11-i);   
       }   
       valor=(somador/11)*11;   
       result2=somador-valor;   
       if((result2==0) || (result2==1)){   
           digito2=0;   
       }else{   
           digito2=11-result2;   
       }   
       if((digito1==icpf[9]) && (digito2==icpf[10])){//RESULTADOS DA VALIDACAO/   
           printf("\nCPF VALIDADO.\n");   
       }else{   
           printf("Problema com os digitos.\n");   
       }   
   }
   void calc_sal(){
       float sal = 230.0;
       float sal_final;
       int num_pecas;
       printf ("\nQuantas peças foram vendidas?");
       scanf ("%d", &num_pecas);
       if (num_pecas <= 30){
           sal_final = sal;
           }else if(num_pecas > 31 || num_pecas < 45){
               sal_final = sal * 0,3;}
                   else{
                       sal_final = sal * 0,5;}
               }
	void tot_folha(){
       funcionario vetfunc[50];
       float soma = 0;
       for (int i =0; i < 50; i ++){
           printf ("\nDigite os salarios dos funcionarios:");
           scanf ("%d", &vetfunc[50].salario);} 
       for (int i =0; i < 50; i ++){
           soma = soma + vetfunc[50].salario;
       }
   printf ("\nO total da folha de pagamento e:%f",vetfunc[50].salario);
   }
   void tot_pecas(){
       funcionario vetfunc[50];
       int tot_pecas;
       for (int i =0; i < 50; i ++){
           printf ("\nDigite o nome do funcionario:");
           scanf ("%c", &vetfunc[50].nome);
           printf ("\nQuantas peças esse funcionario fabricou?");
           scanf ("%d", &vetfunc[50].num_pecas);
       }   
       tot_pecas = vetfunc[50].num_pecas + tot_pecas;
       for (int i =0; i < 50; i ++){
           printf ("\nO numero de peças fabricadas foi de:%d",tot_pecas);
       }
   }
   void op_maior_sal(){
       funcionario vetfunc[50];
       printf ("\nDigite o nome para exibição das informações:");
       scanf ("%c", &vetfunc[50].nome);
       if( vetfunc[50].nome){
           printf ("\nCPF:%d", vetfunc[50].CPF);
           printf ("\nNumero de peças:%d", vetfunc[50].num_pecas);
           printf ("\nSalario:%f", vetfunc[50].salario);
       }
   } 

agradeço desde ja a juda

obrigado mesmo

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mano vamos por partes..

oq n ta funcionando? tá com dúvidas em q?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fez teste de mesa? Já usou um depurador? Isso ajuda um bocado na verificação de existência de bugs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

teste de mesa nao fiz e nao sei o que eh depurador

nao sei faze teste de mesa direito e acho chato pra caramba

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode achar chato fazer, mas ajuda a descobrir se o que você implementou (ou até o que você entendeu do enunciado) é o correto.

Depurador é um programa que executa o código normalmente, mas de forma que você possa acompanhar a execução e ver como estão as variáveis. Normalmente as IDEs (Code Blocks, Netbeans, Eclipse, Anjuta) possuem um ou se integram com um existente no sistema (posso falar isso no caso do Linux).

É importante que você também comece a testar seus programas porque assim você pode se familiarizar com Test-Driven Development ou Behavior-Driven Development. Além disso, quando você fizer programas maiores, nos quais uma função depende da outra, você precisa ver se a saída de uma delas é a entrada correta da outra (teste de integração).

 

http://hccweb6.bai.ne.jp/~hfk45601/ctdd_html/ctdd_e.html

 

Parece complicado, mas veja esse post:http://forum.imasters.com.br/topic/321193-codigo-diff-de-arquivos-com-threads/ . Apesar do tamanho, o código não foi difícil de fazer, já que a cada 3 dias era escrita e testada uma função. Sabendo que cada função fazia o que devia e a saída estava correta, se desse algum problema, seria na última função escrita. Quantos bugs foram encontrados: 1, que era a falta de uma sincronização para o último elemento da lista compartilhada de arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, nao era bem isso que eu queria pq o tabalho eh pra amanha,mas pelo menos foi o unico que respondeu

 

valeu galera

 

retificando

o unico topico

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.