p_inacio Posted May 23, 2009 at 09:08 PM Report #266814 Posted May 23, 2009 at 09:08 PM Tenho um ficheiro binario que contem dados de pessoas tais como nome,morada,localidade,numero de contribuinte,telefone, etc. O que pretendia agora e ordenar este ficheiro por numero de contribuinte e alfabeticamente mas nao estou a conseguir fazelo... Alguem me pode dar umas 'luzes' de como resolver isto ? Obrigado B)
pedrosorio Posted May 23, 2009 at 09:15 PM Report #266815 Posted May 23, 2009 at 09:15 PM Das duas uma, ou é por número de contribuinte ou é alfabeticamente. Aquilo que tens que fazer é criar uma estrutura "pessoa" que contenha esses dados, ler os dados para uma sequência dessas estruturas(uma lista ligada por exemplo), aplicar um algoritmo de ordenação, e por fim escrever os dados no ficheiro pela ordem "correcta". Não respondo a dúvidas por mensagem.
nata79 Posted May 23, 2009 at 10:01 PM Report #266824 Posted May 23, 2009 at 10:01 PM Aquilo que tens que fazer é criar uma estrutura "pessoa" que contenha esses dados, ler os dados para uma sequência dessas estruturas(uma lista ligada por exemplo), aplicar um algoritmo de ordenação, e por fim escrever os dados no ficheiro pela ordem "correcta". uma forma mais eficiente seria usares uma estrutura de dados mais complexa como uma AVL (ou simplesmente árvore binária de procura se não quiseres ter muito trabalho) e deixas de precisar do algoritmo de ordenação. claro que também podes inserir ordenadamente numa lista ligada mas é muito menos eficiente. arithmeticoverflow.wordpress.com
p_inacio Posted May 23, 2009 at 10:59 PM Author Report #266832 Posted May 23, 2009 at 10:59 PM estou a pensar em colocar tudo o q esta agr num vector de estruturas usando tb alocaçao de memoria... que acham ? seria mais ou menos uma coisa do genero... CLIENTE *LerVector (int *tam) /* devolve um ponteiro para o início do vector e o seu tamanho */ { CLIENTE *V; *tam = 0; V = (CLIENTE *) malloc (sizeof (CLIENTE)); if (V == NULL) return (NULL); while (!feof (fc)) { *tam = *tam + 1; V = (CLIENTE *) realloc (V, (*tam) * sizeof (CLIENTE)); if (V == NULL) return (NULL); fread(&V, sizeof(CLIENTE), 1, fc); <- [b]ISTO ESTA CORRECTO?[/b] } fclose (fc); return (V); } A variavel do tipo FILE está definida de forma global dai nao estar aki presente no corpo da funçao! Ainda nao trabalhei com uma AVL mas vou tb tentar pegar na sugestao do pedrosorio
p_inacio Posted May 23, 2009 at 11:29 PM Author Report #266835 Posted May 23, 2009 at 11:29 PM void OrdenarBubbleSort (CLIENTE *V, int tam) { int k, Num_trocas; CLIENTE aux; do { Num_trocas = 0; for (k = 0; k < tam-1; k++) if (V[k].NC > V[k+1].NC) { aux = V[k]; V[k] = V[k+1]; V[k+1] = aux; Num_trocas++; } } while (Num_trocas != 0); } int GuardarVectorFich (CLIENTE *V, int tam) { int i; fc =fopen(CLIENTES,"wb"); if (fc == NULL) return (-1); // Houve um erro na abertura do ficheiro for (i = 0; i < tam; i++) { fwrite(&V,sizeof(CLIENTE),1,fc); } fclose (fc); return (1); // Não houve qualquer problema } Pessoal o q tenho agr e isto... mas qd vou fazer uma nova consulta ( dps de ordenar) aos meus clientes no executavel, nao me mostra rigorosamente nada B)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now