Você está na página 1de 12

INSTITUTO SUPERIOR DE COMUNICACAO E IMAGEM DE MOCAMBIQUE

Paradigmas da Programação

Paradigma Lógico: Prolog

Informatica de Sistemas

Segundo Ano

II Semestre

Relatório de: Mohammad Nazir Lorgat

Elementos do Grupo:

Osvaldo Silva

Chilton Nhabanga

Docente: Eng. Momad Naushad

Maputo, Novembro de 2015


Índice
Introdução..................................................................................................................................................3
Descrição:...................................................................................................................................................4
Prazo.......................................................................................................................................................4
Limitacoes..............................................................................................................................................4
Pseudocodigo:............................................................................................................................................5
Fluxograma................................................................................................................................................7
Código........................................................................................................................................................8
Bibliografia..............................................................................................................................................12

2
Introdução
Um programa lógico é um conjunto de axiomas ou regras definindo relações entre objectos.

Os Construtores básicos são: termos, afirmações, regras, querys (perguntas)

Prolog é uma linguagem de Programação que se enquadra no paradigma Lógico. Consiste numa
linguagem puramente lógica.

O trabalho fala sobre um Sistema de gerenciamento de parque de estacionamento implemetado


na linguagem Prolog.

O presente trabalho faz parte da cadeira de Paradigmas de Programação, do segundo semestre,


do segundo ano do curso de Informática de Sistemas

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.

Ao adicionar um cliente, deve preencher os seguintes atributos: Numero do cliente


(identificardor, Nao pode repetir), Nome, Marca do Automovel, Matricula do Automovel e o
Numero do Lugar de estacionamento.y

Devido a algumas limitacoes do Sistema, o nome obedece o seguinte formato: “nome_apelido”,


o mesmo aplica-se a marca do automovel: marca_modelo.

Para apagar ou alterar algum dado do cliente e Necessario ter o Numero do cliente.

A tabela de precos a pagar e a seguinte:

- 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 1 entao Ver tabela de precos

Se nao sair

Se 2 entao MenuGerente

Selecionar Accao

Se 1 entao Adicionar Cliente

Digitar Numero

Digitar Nome_Apelido

Digitar Marca_Modelo

Digitar Matricula

Digitar Lugar

Guardar Cliente

Se 2 entao Apagar Cliente

Digitar numero

Apaga cliente

Se 3 entao Modificar dado

Selecionar dado a modificar

Se 1 entao modificar nome

Digitar numero

Digitar novo nome

Alterar nome

5
Se 2 entao modificar marca

Digitar numero

Digitar nova marca

Alterar marca

Se 3 entao modificar matricula

Digitar numero

Digitar nova matricula

Alterar matricula

Se 4 entao modificar lugar

Digitar numero

Digitar novo lugar

Alterar lugar

Se nao modificar cliente

Se 4 entao Ver lista de clientes

Listar clientes

Se 5 entao Calcular preco a pagar

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 de seleccao de usuario(principal)

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)).

%menu de seleccao de accao do gerente

m_gerente:-write('Selecione a accao'),nl,

write('1.Adicionar Cliente'),nl,

write('2.Apagar cliente'),nl,

write('3.Modificar dado de cliente'),nl,

write('4.Ver Lista de clientes'),nl,

write('5.Calcular Preco a Pagar'),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))))).

%menu para voltar ou sair do programa

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('1.Ver tabela de Precos'),nl,

write('2.Sair'),nl,

read(Z),if_else(Z=1,tab_precos,if_else(Z=2,menu_user,m_cliente)).

%adicionar um cliente

add_cliente:-write('NB: O formato do nome e: "nome_apelido", o mesmo aplica-se para a marca do carro:


"marca_modelo"'),nl,

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,

write('1 hora->100 Mt'),nl,

write('2 horas->180 Mt'),nl,

write('3 horas->270 Mt'),nl,

write('+ que 4 horas->80 Mt por Hora'),nl,

write('NB: Os minutos extras sao arredondados para horas, o parque de


estacionamento so funciona das 6 horas as 0 horas'),menu_user.

%regras para update

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,

write('4.Modificar lugar de estacionamento'),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),

write('Digite o novo nome'),nl,read(P),updatenome(A,P,C,D,E),menuBE.

mod_marca:-write('Digite o nr do cliente'),nl,read(A),

write('Digite a nova marca'),nl,read(P),updatemarca(A,B,P,D,E),menuBE.

mod_matricula:-write('Digite o nr do cliente'),nl,read(A),

write('Digite a nova matricula'),nl,read(P),updatematricula(A,B,C,P,E),menuBE.

mod_lugar:-write('Digite o nr do cliente'),nl,read(A),

write('Digite o novo lugar de


estacionamento'),nl,read(P),updatelugar(A,B,C,D,P),menuBE.

del_cliente:-write('digite o numero do cliente'),nl,read(O)

retract(cliente(O,A,B,C,D)),menuBE.

calc_preco:-write('Digite o tempo de permanencia(em horas)'),nl,

read(P),if_else(P=1,write('O preco a pagar e: 100 Mt'),if_else(P=2,write('O preco


a pagar e: 180 Mt'),if_else(P=3,write('O preco a pagar e: 270 Mt'),write1(P)))),menuBE.

write1(P):-B is (P)*80,write('O preco a pagar e: '),write(B).

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.

Quanto às notas dos outros colegas prefiro não comentar.

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

Você também pode gostar