Escolar Documentos
Profissional Documentos
Cultura Documentos
Paradigmas da Programação
Informatica de Sistemas
Segundo Ano
II Semestre
Elementos do Grupo:
Osvaldo Silva
Chilton Nhabanga
2
Introdução
Um programa lógico é um conjunto de axiomas ou regras definindo relações entre objectos.
Prolog é uma linguagem de Programação que se enquadra no paradigma Lógico. Consiste numa
linguagem puramente lógica.
3
Descrição:
Um sistema simples para gerenciamento de um parque de estacionamento. No sistema temos 2
entidades, o gerente e o cliente. O cliente so tem direito a ver a tabela de precos. Para evitar
fraudes e como o sistema nao permite leitura de um “read card”, o gerente e que calcula o preco
a pagar pelo cliente.
Ao aceder o sistema, temos um menu para selecao de usuario (Cliente e Gerente). O gerente tem
direito a adicionar um cliente, apagar um cliente, modificar algum dado do cliente , listar todos
cliente e calcular preco a pagar pelo cliente.
Para apagar ou alterar algum dado do cliente e Necessario ter o Numero do cliente.
- 1 hora – 100 mt
- 2 horas -180 mt
- 3 horas- 270 mt
- Apartir de 4 horas- 80 mt por hora.
- Os minutos extras sao arredondados para horas, mas o gerente pode descontar se quiser.
NB: o calculo das horas nao e feito no Sistema, e o preco a pagar nao vem associado a lista
dos clientes.
Prazo: 29/10/15
Limitacoes: 0.
4
Pseudocodigo:
Inicio
Selecionar Usuario
Se 1 entao MenuCliente
Selecionar accao
Se nao sair
Se 2 entao MenuGerente
Selecionar Accao
Digitar Numero
Digitar Nome_Apelido
Digitar Marca_Modelo
Digitar Matricula
Digitar Lugar
Guardar Cliente
Digitar numero
Apaga cliente
Digitar numero
Alterar nome
5
Se 2 entao modificar marca
Digitar numero
Alterar marca
Digitar numero
Alterar matricula
Digitar numero
Alterar lugar
Listar clientes
Digitar horas
Se 1 entao 100
Se 2 entao 180
Se 3 entao 270
Se nao 80*horas
Se nao MenuGerente
Fim
6
Fluxograma
7
Código
%inicio do trabalho pratico de prolog
:-dynamic cliente/5.
if_else(P,Q,R):-P,!,Q.
if_else(P,Q,R):-R.
menu_user:-write('Seleciona o usuario'),nl,
write('1.Gerente'),nl,
write('2.Cliente'),nl,
read(X),if_else(X=1,m_gerente,if_else(X=2,m_cliente,menu_user)).
m_gerente:-write('Selecione a accao'),nl,
write('1.Adicionar Cliente'),nl,
write('2.Apagar cliente'),nl,
read(Y),if_else(Y=1,add_cliente,if_else(Y=2,del_cliente,if_else(Y=3,mod_cliente,if_else(Y=4,listar_clie
ntes,if_else(Y=5,calc_preco,m_gerente))))).
menuBE:-write('1.Voltar'),nl,
write('2.Sair'),nl,
read(A),if_else(A=1,m_gerente,if_else(A=2,write('Exiting'),write('Opcao nao
encontrada'))).
%listar clientes
listar_clientes:-listing(cliente),menuBE.
8
%menu de seleccao da accao do cliente
m_cliente:-write('Selecione a accao'),nl,
write('2.Sair'),nl,
read(Z),if_else(Z=1,tab_precos,if_else(Z=2,menu_user,m_cliente)).
%adicionar um cliente
write('Nr:'),nl,read(A),
write('Nome_Apelido:'),nl,read(B),
write('Marca_Modelo do Carro:'),nl,read(C),
write('Matricula do carro:'),nl,read(D),
write('Lugar de
Estacionamento:'),nl,read(E),assertz(cliente(A,B,C,D,E)),menuBE.
%tabela de precos
tab_precos:-write('Tabela de Precos'),nl,
updatenome(A,X,C,D,E):-retract(cliente(A,B,C,D,E)),assertz(cliente(A,X,C,D,E)).
updatemarca(A,B,X,D,E):-retract(cliente(A,B,C,D,E)),assertz(cliente(A,B,X,D,E)).
updatematricula(A,B,C,X,E):-retract(cliente(A,B,C,D,E)),assertz(cliente(A,B,C,X,E)).
updatelugar(A,B,C,D,X):-retract(cliente(A,B,C,D,E)),assertz(cliente(A,B,C,D,X)).
9
mod_cliente:-write('Selecione o que deseja modificar'),nl,
write('1.Modificar nome'),nl,
write('2.Modificar marca'),nl,
write('3.Modificar matricula'),nl,
read(A),if_else(A=1,mod_nome,if_else(A=2,mod_marca,if_else(A=3,mod_matricula,if_else(A=4,mod_l
ugar,mod_cliente)))).
mod_nome:-write('Digite o nr do cliente'),nl,read(A),
mod_marca:-write('Digite o nr do cliente'),nl,read(A),
mod_matricula:-write('Digite o nr do cliente'),nl,read(A),
mod_lugar:-write('Digite o nr do cliente'),nl,read(A),
retract(cliente(O,A,B,C,D)),menuBE.
10
Conclusão
O trabalho praticamente fui eu que fiz a parte prática toda. Devido ao horário preenchido durante
a semana (incluíndo os sábados), e indisponibilidade dos colegas do meu grupo durante a manhã,
foi difícil reunirmos para discutirmos sobre o trabalho, apenas falavamos durante mais ou menos
5 minutos nas aulas sobre o trabalho.
O prazo do trabalho foi cumprido (pelo menos na parte prática do trabalho), o que atrasou a
entrega foi o relatório escrito.
Durante a investigação, o facto que usou-se no trabalho, que não foi visto na aula é o facto
listing, decidiu-se que seria melhor não usar ficheiros, pois seria mais fácil armazenar
informações na memória.
A nota que me dou devido ao meu esforço no trabalho é 17 valores, penso que seria uma nota
ideal pelo meu esforço no trabalho.
11
Bibliografia
- Apontamentos e Anotações da aulas de Paradigmas de Programação no ISCIM.
- http://www.ic.unicamp.br/~meidanis/courses/mc336/2011s2/prolog/apostila-prolog.pdf,
acessado em 4/10/15.
12