Disciplina: Estrutura De Dados Docente: Danilo Santos Discentes: Cssio Dourado; Carla Drieli; Edicarla Conceio; Igor Andrade; Jos Paulo; Priscila de Almeida; Rafael Sandes; Victor Nunes.
Projeto I: Programa de Cadastro e Organizao de Cheques Sem Fundo.
Salvador, Julho de 2014 2
Introduo
. Como trabalho final da disciplina Estrutura de Dados, foi proposto o desenvolvimento de um programa capaz de tratar os processos de cheque sem fundos usados para pagar compras nos supermercados de uma grande rede. O sistema solicita a entrada dos dados do cheque, valor, data, estabelecimento, e os dados do cliente, nome, RG, endereo e telefone para inserir um novo processo. Esses processos so organizados em uma pilha e cada um possui um identificador nico, os servios que esto no topo desta pilha so executados primeiramente. A pilha tem prioridade relacionada ao valor do cheque. Neste relatrio descrevemos a estrutura de dados utilizada, o algoritmo, a anlise experimental simplificada e as concluses.
3
Descrio da Estrutura de Dados Utilizada
A estrutura de dados proc, renomeada para Processo possui 9 tipos (incluindo ponteiro):
Tipo Nome Tamanho Funo int ID - Recebe o identificador que cada processo ter char NomeCliente 49 caracteres Recebe o nome do cliente char EnderecoCliente 49 caracteres Recebe o endereo do cliente char RGCliente 11 caracteres Recebe o RG do cliente char TelefoneCliente 14 caracteres Recebe o telefone do cliente float ValorCheque - Recebe o valor do cheque sem fundos. char DataCheque 10 caracteres Recebe a data de compensao do cheque char NomeMercado 30 caracteres Nome do Supermercado em que o cliente usou o cheque struct proc (ponteiro) prox - Ponteiro que aponta para outra estrutura do mesmo tipo 4
Descrio do Algoritmo
Variveis globais Na aplicao existem 12 variveis globais, 2 inteiros: GeraID, que tem a funo de gerar um ID nico para cada processo; e QuantidadeProcessos, que contabiliza a quantidade atual de processos, usado quando o usurio seleciona a quantidade de processos na pilha (MENU); e os 9 nmeros reais: Clock_Insere, Clock_Apaga, Clock_ApagaID, Clock_ExibeTudo, Clock_ExibeID, Clock_ExibeProximo, Clock_ExibeUltimo, Clock_ExibeTamanho, Clock_LimpaTudo e Clock_OrganizaPorNome, que recebe o tempo de execuo de cada funo. Nos tempos no so considerado o tempo de espera do usurio, neste momento a contagem pausada e continua na linha seguinte.
Funo OrganizaUltimoProcesso(Processo *Pilha)
Complexidade: O(n). A Funo recebe o endereo de uma pilha e verifica se o ltimo n (processo) est na ordem correta de acordo ao valor dos cheques, caso contrario ele ser remanejado. Ou seja, ela s verifica e ordena o ltimo n de uma pilha. As funes ExibirProcessos e OrganizaProcessoPorNomeMercado utilizam esta funo. Os ponteiros *UltimoElemento e *PenultimoElemento guardaro a ltima e penltima posio da pilha. Se o *UltimoElemento no estiver na posio correta, ser remanejado deixando *PenultimoElemento como ltimo(topo da pilha). Os ponteiros *Ant e *Pos percorrem a Pilha at chegar ao final ou at que o valor que *UltimoElemento aponta seja menor que o valor de *Pos, nesse caso *UltimoElemento ser realocado entre os ponteiros *Ant e *Pos.
Complexidade: O(n) A Funo recebe o endereo de uma pilha e realoca todos os processos de um mesmo estabelecimento para o topo da pilha (ordenamento principal), deixando ordenado por valor dos cheques (ordenamento secundrio). criado um N *PilhaAux que receber todos os processos de mesmo estabelecimento, retirando-os da pilha principal. Ao final da funo, o ponteiro do N que est no topo da pilha principal ir apontar para o primeiro (base) N da PilhaAux. Os ponteiros *Ant e *Pos tem a funo de percorrer a pilha principal, quando *Pos apontar para um N que tenha nome igual ao do estabelecimento pesquisado, *Ant apontar para o segundo N a frente. O N excludo ser enviado para o topo da *PilhaAux. 5
Os ponteiros *CorrePilhaAux e *NovoElementoAux so usados para tratar a *PilhaAux. Funo main()
Na funo principal criado um ponteiro *Pilha do tipo da Estrutura Processo e alocado um primeiro n para qual *Pilha aponta. Em seguida chamada a funo Menu e quando finaliza pelo usurio, a Pilha liberada da memria.
Funo Menu(Processo *Pilha) A Funo Menu recebe o endereo de uma pilha e entra em um lao que imprime as opes que o usurio pode fazer e o tempo que cada funo levou para ser executada na ultima vez que foi chamada e pede que o usurio digite de [0 9] para escolher uma opo, com o uso de um seletor (switch case) chamada a funo que o usurio selecionou. Funo ExibeNo(Processo *No) Complexidade: O(1) A funo recebe um ponteiro de um n da Pilha e imprime todas as variveis deste n. Funo teste_vazia(Processo *Pilha) A Funo Menu recebe o endereo de uma pilha e retornar o valor 1 se a pilha estiver vazia, 0 se tiver 1 elemento ou mais. Funo ExibirProcessos(Processo *Pilha) Complexidade: O(n) A Funo ExibirProcessos usa um ponteiro *aux que percorre toda a pilha imprimindo cada n. Funo ExibirID(Processo *Pilha) Complexidade: O(n) pedido ao usurio que informe o nmero do ID do processo que ele deseja ver, ao receber esse valor, a funo usa o ponteiro *Pos que percorre toda a pilha at achar o n com o ID procurado, caso no tenha informado ao usurio. Funo ExibirProximoProcesso (Processo *Pilha) Complexidade: O(n) A Funo ExibirProximoProcesso verifica se possui algum elemento na p ilha, caso tenha, o ponteiro *Pos percorre toda a pilha at o ultimo elemento e imprime.
6
Funo ExibirUltimoProcesso (Processo *Pilha) Complexidade: O(1) A Funo ExibirUltimoProcesso verifica se possui algum elemento na p ilha, caso tenha, imprime o primeiro elemento. Funo Libera (Processo *Pilha) Complexidade: O(n) A Funo Libera verifica se possui algum elemento na p ilha, caso tenha, percorre a pilha liberando cada n. Funo EmpilharProcesso (Processo *Pilha) Complexidade: O(n) A Funo EmpilharProcesso cria um novo n e pede que o usurio preencha os dados. Ento verificado se possui algum elemento na pilha, caso tenha, percorre toda a pilha inserindo este novo n no final da mesma, aps isso, chamada a funo OrganizarUltimoProcesso que ordenar esse novo n. A varivel global QuantidadeProcessos incrementada.
Funo ApagarID (Processo *Pilha) Complexidade: O(n) pedido ao usurio que informe o nmero do ID do processo que ele deseja apagar, ao receber esse valor, a funo usa o ponteiro *Pos que percorre toda a pilha at achar o n com o ID procurado, ento o n excludo da pilha e liberado da memria. Caso no tenha o ID procurado, informado ao usurio. A varivel global QuantidadeProcessos decrementada.
Funo Apagar (Processo *Pilha)
Complexidade: O(n) A funo usa o ponteiro *ult que percorre toda a pilha at achar o ultimo n, ento o n excludo da pilha e liberado da memria. A varivel global QuantidadeProcessos decrementada.
7
Concluso
Diante do software desenvolvido no trabalho, percebemos a importncia de utilizar as estruturas de dados. Sem estas, algumas aplicaes poderiam ficar limitadas na linguagem utilizada. Analisamos, tambm, a relevncia de codificar com funes e modularizaes, a fim de ter um cdigo organizado e que possibilite um fcil reuso do que foi construdo.