Ir para conteúdo
Fórum Script Brasil
  • 0

Programa Em C


Guest Jander Rodrigues

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

  • 0
E qual é sua dúvida?

Maldade :D

Maldade nada, aqui você tira DÚVIDAS, ninguém faz o dever de casa de outra pessoa assim, se posta o código com a dúvida é uma coisa, ajudamos com o maior prazer.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...