Jump to content

Recommended Posts

Posted

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)

Posted

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.

Posted

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.

Posted

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

Posted
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)

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.