hpt 0 Denunciar post Postado Março 25, 2011 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
quitZAUMMM 18 Denunciar post Postado Março 29, 2011 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
hpt 0 Denunciar post Postado Março 29, 2011 to com duvida nas questao, nao sei se estao certas pra cada enunciado do trabalho? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Março 29, 2011 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
hpt 0 Denunciar post Postado Março 30, 2011 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
_Isis_ 202 Denunciar post Postado Março 30, 2011 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
hpt 0 Denunciar post Postado Março 31, 2011 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