Você está na página 1de 7

Universidade Federal Da Bahia

Curso: Sistemas de Informao


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.


Funo OrganizaProcessoPorNomeMercado(Processo *Pilha)

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.