O arquivo lista_cheque.bin segue anexo com a extensão txt, é só renomear para bin novamente.
O arquivo em anexo lista_cheques.bin contém dados armazenados por uma firma sobre cheques pagos a fornecedores em uma determinada semana. A estrutura de dados utilizada para o armazenamento dos dados possui três campos, como mostrado abaixo:
struct ficha
{
int numero;
float valor;
char fornecedor[15];
} CHEQUE;
onde numero é o número do cheque, valor é o valor pago ao fornecedor através deste
cheque, e fornecedor é o nome do fornecedor que recebeu o cheque (Fornecedor_A,
Fornecedor_B, até o Fornecedor_Z).
Os dados no arquivo lista_cheques.bin estão ordenados temporalmente. A firma possui
muitas filiais, e cada filial tem seus próprios talonários de cheques. Por simplicidade, a
firma possui apenas 26 fornecedores, que vendem vários produtos ao longo da semana.
Portanto, em geral, cada fornecedor recebe mais de um cheque por semana, das diferentes filiais da firma. O arquivo lista_cheques.bin é atualizado continuamente, de modo que o número dos cheques neste arquivo não segue a ordem em que foram impressos pelo banco (por exemplo, o cheque #5 foi utilizado antes do cheque #3, etc.).
Aí vem os desafios que foram colocados:
- Para o controle dos gastos a firma precisa verificar quanto pagou a cada
fornecedor nesta semana. Desenvolva um algoritmo, e a partir dele um programa em C,
para ler o arquivo binário lista_cheques.bin e calcular o total pago a cada fornecedor,
imprimindo uma tabela como a seguinte:
Fornecedor Total
Fornecedor_A R$ 50000,00
Fornecedor_B R$ 4500,00
. . . . . .
O programa deve imprimir também o total de cheques emitidos na semana, e o valor total pago pela firma nesta semana.
A firma precisa ter um controle bastante preciso sobre seus gastos, de modo que são
feitas várias consultas sobre os cheques emitidos na semana. Uma das necessidades é uma lista de cheques, com o valor e o fornecedor que o recebeu, ordenada pelo número do cheque. Pesquisar entre os milhares de cheques registrados no arquivo lista_cheques.bin, e ordenar o resultado, demora muito tempo. Um estagiário de Ciência da Computação propôs ao dono da firma construir um vetor com os número dos cheques e ordenar este vetor em ordem crescente. De modo que procurar um determinado registro no arquivo lista_cheques.bin se resume a deslocar o ponteiro de arquivo até este registro e recuperar os dados do cheque.
O procedimento proposto pode ser esquematizado da seguinte forma. Construímos o
vetor numero_cheque lendo o arquivo registro por registro. Para ficar mais claro, imagine que o vetor numero_cheque seja como o abaixo (os números sob o número do cheque indicam a posição deste cheque no vetor, e, portanto, o número do registro do cheque no arquivo):
Criamos um vetor indice_cheque com o índice dos registros:
• • • 105 106 107 108 109 110 • • •
Ordenamos o vetor numero_cheque e aplicamos a mesma ordenação obtida ao vetor
indice_cheque. O resultado é que o vetor indice_cheque fica:
• • • 109 105 108 106 110 107 • • •
Agora, criar uma lista ordenada pelo número do cheque é fácil: lemos elemento por
elemento do vetor indice_cheque. O primeiro elemento, indice_cheque[0], é o número
do registro do primeiro cheque, o segundo elemento, o do segundo cheque, etc.. A cada
leitura, deslocamos o ponteiro do arquivo o número de bytes necessários e lemos o registro diretamente no arquivo.
Desenvolva um algoritmo e o programa para implementar esta tarefa. Use o ordenamento da classificação por contagem (próxima página). A saída do programa
deve ser um arquivo tipo texto com o seguinte formato:
Pergunta
Guest Jander Rodrigues
aí pessoal, preciso de uma ajuda...
O arquivo lista_cheque.bin segue anexo com a extensão txt, é só renomear para bin novamente.
O arquivo em anexo lista_cheques.bin contém dados armazenados por uma firma sobre cheques pagos a fornecedores em uma determinada semana. A estrutura de dados utilizada para o armazenamento dos dados possui três campos, como mostrado abaixo:
struct ficha
{
int numero;
float valor;
char fornecedor[15];
} CHEQUE;
onde numero é o número do cheque, valor é o valor pago ao fornecedor através deste
cheque, e fornecedor é o nome do fornecedor que recebeu o cheque (Fornecedor_A,
Fornecedor_B, até o Fornecedor_Z).
Os dados no arquivo lista_cheques.bin estão ordenados temporalmente. A firma possui
muitas filiais, e cada filial tem seus próprios talonários de cheques. Por simplicidade, a
firma possui apenas 26 fornecedores, que vendem vários produtos ao longo da semana.
Portanto, em geral, cada fornecedor recebe mais de um cheque por semana, das diferentes filiais da firma. O arquivo lista_cheques.bin é atualizado continuamente, de modo que o número dos cheques neste arquivo não segue a ordem em que foram impressos pelo banco (por exemplo, o cheque #5 foi utilizado antes do cheque #3, etc.).
Aí vem os desafios que foram colocados:
- Para o controle dos gastos a firma precisa verificar quanto pagou a cada
fornecedor nesta semana. Desenvolva um algoritmo, e a partir dele um programa em C,
para ler o arquivo binário lista_cheques.bin e calcular o total pago a cada fornecedor,
imprimindo uma tabela como a seguinte:
Fornecedor Total
Fornecedor_A R$ 50000,00
Fornecedor_B R$ 4500,00
. . . . . .
O programa deve imprimir também o total de cheques emitidos na semana, e o valor total pago pela firma nesta semana.
A firma precisa ter um controle bastante preciso sobre seus gastos, de modo que são
feitas várias consultas sobre os cheques emitidos na semana. Uma das necessidades é uma lista de cheques, com o valor e o fornecedor que o recebeu, ordenada pelo número do cheque. Pesquisar entre os milhares de cheques registrados no arquivo lista_cheques.bin, e ordenar o resultado, demora muito tempo. Um estagiário de Ciência da Computação propôs ao dono da firma construir um vetor com os número dos cheques e ordenar este vetor em ordem crescente. De modo que procurar um determinado registro no arquivo lista_cheques.bin se resume a deslocar o ponteiro de arquivo até este registro e recuperar os dados do cheque.
O procedimento proposto pode ser esquematizado da seguinte forma. Construímos o
vetor numero_cheque lendo o arquivo registro por registro. Para ficar mais claro, imagine que o vetor numero_cheque seja como o abaixo (os números sob o número do cheque indicam a posição deste cheque no vetor, e, portanto, o número do registro do cheque no arquivo):
• • • cheque # 10 cheque # 19 cheque # 55 cheque # 12 cheque # 09 cheque # 31 • • •
• • • 105 106 107 108 109 110 • • •
Criamos um vetor indice_cheque com o índice dos registros:
• • • 105 106 107 108 109 110 • • •
Ordenamos o vetor numero_cheque e aplicamos a mesma ordenação obtida ao vetor
indice_cheque. O resultado é que o vetor indice_cheque fica:
• • • 109 105 108 106 110 107 • • •
Agora, criar uma lista ordenada pelo número do cheque é fácil: lemos elemento por
elemento do vetor indice_cheque. O primeiro elemento, indice_cheque[0], é o número
do registro do primeiro cheque, o segundo elemento, o do segundo cheque, etc.. A cada
leitura, deslocamos o ponteiro do arquivo o número de bytes necessários e lemos o registro diretamente no arquivo.
Desenvolva um algoritmo e o programa para implementar esta tarefa. Use o ordenamento da classificação por contagem (próxima página). A saída do programa
deve ser um arquivo tipo texto com o seguinte formato:
Cheque Valor Fornecedor
cheque#1 R$ 50000,00 Fornecedor_T
cheque#2 R$ 4500,00 Fornecedor_D
• • • • • • • • •
skeletiom@hotmail.com
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.