EXERCÍCIOS DE PROGRAMAÇÃO EM LÓGICA

Documentos relacionados
EXERCÍCIOS DE PROGRAMAÇÃO EM LÓGICA

INFORMÁTICA PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM PYTHON

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

semana 03/05/2014 a 09/05/2014 semana 10/05/2014 a 16/05/2014 semana 17/05/2014 a 23/05/ e 25/05/2014

Certifico que este documento da empresa CELG DISTRIBUIÇÃO S.A. - CELG D, Nire: , foi deferido e arquivado na Junta Comercial do Estado

Certifico que este documento da empresa COOPERATIVA DE CRÉDITO LIVRE ADMISSÃO DO VALE DO SÃO PATRÍCIO LTDA, Nire: , foi deferido e

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 22/05/2015 da Empresa UNIMED BELO HORIZONTE COOPERATIVA DE TRABALHO

Certifico que este documento da empresa COOPERATIVA DE CRÉDITO DOS MAGISTRADOS, SERVIDORES DA JUSTIÇA DO ESTADO DE GOIÁS E EMPREGADOS DA CELG LTDA,

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 13/05/2015 da Empresa ENERGISA S/A, Nire e protocolo

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 17/07/2015 da Empresa OMEGA GERACAO S.A., Nire e

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 27/11/2014 da Empresa COOPERATIVA DOS SUINOCULTORES DE PONTE NOVA E

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 21/11/2014 da Empresa ANDRADE GUTIERREZ S/A, Nire e

Junta Comercial do Estado de Minas Gerais Certifico que este documento da empresa COOPERNOVA COOPERATIVA NOVALIMENSE DE TRANSPORTE DE CARGAS E

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 13/04/2016 da Empresa ALGAR TI CONSULTORIA S/A, Nire e

Certifico que este documento da empresa DME POCOS DE CALDAS PARTICIPACOES S.A. - DME, Nire: , foi deferido e arquivado na Junta Comercial

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 08/05/2015 da Empresa UNIMED JUIZ DE FORA COOPERATIVA DE TRABALHO

Junta Comercial do Estado de Minas Gerais Certifico registro sob o nº em 19/10/2015 da Empresa COOPERATIVA DE CONSUMO DOS SERVIDORES DO

INFORMÁTICA PARA ENGENHARIA INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO PARTE II

INFORMÁTICA PARA ENGENHARIA INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO PARTE II

INFORMÁTICA PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM PYTHON

Estruturação de Procedimentos

Algoritmos e Programação

Programação Lógica. Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel

Programação imperativa

Lista de Exercícios Estrutura de Repetição

Fundamentos de Programação

MATEMÁTICA - 3o ciclo Intervalos de números Reais (9 o ano)

Aula Bibliografia - Definições - Operadores - Criação de um algoritmo - Exercícios. Algoritmo e Programação. Prof.

r 5,8 5 Calcule a área de um trapézio área = altura (base maior + base menor )/ 2 7,2

Universidade Federal de Mato Grosso do Sul. Lista de Exercícios 2

1. Escreva um predicado em PROLOG para eliminar elementos de uma lista

MATEMÁTICA - 3o ciclo Intervalos de números Reais (9 o ano)

PROCURA E PLANEAMENTO

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível?

Inteligência Artificial

03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA DISCUSSÃO DOS EXERCÍCIOS E EXERCÍCIOS EXTRAS

Objetos Estruturados Listas Recursão Exercícios. Inteligência Artificial

Inteligência Artificial

Departamento de Matemática da Universidade de Aveiro Matemática Discreta. A prova consta de 4 questões cada uma cotada com 5 valores.

Matriz Curricular Curso de Licenciatura em Computação Habilitação: Licenciatura em Computação

Descrição do Mundo de Wumpus. Inteligência Artificial

Computação e Programação. Exame Época Normal

Sistemas Baseados em Conhecimento

Retrocesso e corte. Paradigma de Programação Lógico. Marco A L Barbosa

01. [Sebesta, 2000] Quais são os três principais usos da lógica simbólica na lógica formal?

Alguns Exercícios de Inteligência Artificial

Fundamentos da Programação

Projecto de Algoritmos e Estruturas de Dados

Fundamentos da Programação

Algoritmos e Programação

Algoritmos Fundamento e Prática

Algoritmos 2 - Introdução

30/04/2013. Prof. Hudson Costa

Fundamentos da Programação

Exercícios da cadeira de Inteligência Artificial. Helena Sofia Pinto João Cachopo Daniel Gonçalves Carlos Lopes António Inês Lynce Pedro Matos

Programação Orientada a Objetos. Programação Lógica

CURSO DE GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO MATRIZ CURRICULAR MATUTINO Fase N.

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 25

Fundamentos de Programação

Simplex. Investigação Operacional José António Oliveira Simplex

PESQUISA OPERACIONAL APLICADA A LOGÍSTICA

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre

Encriptação de Mensagens

Fundamentos de Inteligência Artificial [5COP099]

Transcrição:

FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO EXERCÍCIOS DE PROGRAMAÇÃO EM LÓGICA LUÍS PAULO REIS DANIEL CASTRO SILVA MESTRADO INTEGRADO EM ENGENHARIA INFORMÁTICA E COMPUTAÇÃO PROGRAMAÇÃO EM LÓGICA - 3º ANO SETEMBRO DE 2007

Faculdade de Engenharia da Universidade do Porto Licenciatura em Engenharia Informática e Computação Programação em Lógica 2003/2004 LEIC (3º Ano) 1º Sem Docentes: Luís Paulo Reis e Eugénio da Costa Oliveira Exercícios Pesquisa de Soluções Exercício PESQ1. Pesquisa de Ligação num Grafo Escreva um programa em Prolog que determine um caminho entre dois nós de um Grafo. a) Utilizando pesquisa em profundidade (evitando ciclos); b) Utilizando pesquisa em largura. De forma a experimentar o programa, considere que o grafo é definido pelos seguintes factos: ligado(a,b). ligado(f,i). ligado(a,c). ligado(f,j). ligado(b,d). ligado(f,k). ligado(b,e). ligado(g,l). ligado(b,f). ligado(g,m). ligado(c,g). ligado(k,n). ligado(d,h). ligado(l,o). ligado(d,i). ligado(i,f). Solução: /* Para testar, utilize:?- resolva_larg(no_inicial, No_meta, Solucao).?- resolva_prof(no_inicial, No_meta, Solucao). onde No_inicial é o inicio do grafo e No_meta é a meta que se deseja atingir. Solucao retorna o caminho entre No_inicial e No_meta, na forma de uma lista.*/ // Utilitários de manipulação de Listas membro(x, [X _]):-!. membro(x, [_ Y]):- membro(x,y). concatena([], L, L). concatena([x Y], L, [X Lista]):- concatena(y, L, Lista). inverte([x], [X]). inverte([x Y], Lista):- inverte(y, Lista1), concatena(lista1, [X], Lista). // a) Pesquisa em Profundidade // Encontra o caminho Solucao entre No_inicial e No_meta resolva_prof(no_inicial, No_meta, Solucao):- profundidade([], No_inicial, No_meta, Sol_inv), inverte(sol_inv, Solucao). Luis Paulo Reis / Eugénio da Costa Oliveira Pág. 44/55

// Realiza a pesquisa em profundidade profundidade(caminho, No_meta, No_meta, [No_meta Caminho]). profundidade(caminho, No, No_meta, Sol):- ligado(no, No1), not membro(no1, Caminho), % previne ciclos profundidade([no Caminho], No1, No_meta, Sol). // b) Pesquisa em Largura // Acha todos os X onde Y esta satisfeito e retorna numa lista Y ache_todos(x, Y, Z):- bagof(x, Y, Z),!. ache_todos(_, _, []). // Estende a fila ate um filho N1 de N, verificando se N1 // não pertence à fila, prevenindo, assim, ciclos estende_ate_filho([n Trajectoria], [N1,N Trajectoria]):- ligado(n, N1), not membro(n1, Trajectoria). // Encontra o caminho Solucao entre No_inicial e No_Meta resolva_larg(no_inicial, No_meta, Solucao):- largura([[no_inicial]], No_meta, Sol1), inverte(sol1, Solucao). // Realiza a pesquisa em largura largura([[no_meta T] _],No_meta,[No_meta T]). largura([t Fila],No_meta,Solucao):- ache_todos(extensaoatefilho,estende_ate_filho(t,extensaoatefilho),extensoes), concatena(fila, Extensoes, FilaExtendida), largura(filaextendida, No_meta, Solucao). Exercício PESQ2. Pesquisa de Ligação mais Rápida num Grafo Altera o Programa PESQ1 de forma a que cada ligação tenha um custo. Escreva um programa que lhe permita encontrar o caminho mais rápido (de menor custo) entre dois nós do grafo. Exercício PESQ3. Pesquisa de Ligação com Visita a uma Lista de Nós Altera o Programa PESQ1 ou PESQ2 de forma a encontrar um caminho entre dois nós do grafo que visite todos os nós contidos numa lista de nós fornecida como parâmetro de entrada ao algoritmo. Exercício PESQ4. Todos os Trajectos Altera o Programa anterior de forma a que retorne todos os trajectos possíveis entre dois nós do grafo Exercício PESQ5. Disponibilidades para Reuniões Uma empresa pretende realizar um encontro num determinado mês que reúna alguns responsáveis por várias unidades dessa empresa. As disponibilidades em termos de dias por parte de cada membro a estar presente na reunião são dadas por factos do tipo: disponibilidade(nome, lista_dias_disponíveis). onde cada membro da lista de dias disponíveis é do tipo: Luis Paulo Reis / Eugénio da Costa Oliveira Pág. 45/55

disp(primeiro_dia, último_dia). Por exemplo: disponibilidade(pedro, [disp(2,4), disp(12,20), disp(25,28)]) indica que Pedro está disponível dos dias 2 a 4, dos dias 12 a 20 e dos dias 25 a 28. a) Escreva um programa Prolog que receba como argumento um dia e retorne todos os nomes de pessoas disponíveis nesse dia para uma reunião. b) Escreva um programa Prolog que receba uma lista de nomes e o número mínimo de dias consecutivos para realizar uma reunião e crie uma lista com elementos do tipo poss(primeiro_dia, último_dia) representando as possibilidades de realização da reunião envolvendo todas as pessoas da lista de nomes. Exercício PESQ6. Pesquisa de Ligação com Visita a uma Lista de Nós Considere que um grafo não dirigido é representado por um conjunto de cláusulas unitárias da forma ligacao(no1, No2). Exemplo: ligacao(1, 2). 2 5 ligacao(1, 3). ligacao(2, 4). ligacao(3, 4). 1 4 ligacao(3,6). ligacao(4, 6). ligacao(5,6). 3 6 a) Escreva um predicado caminho(+noinicio, +NoFim, -Lista), que dados dois nós do grafo, calcule um possível caminho (não necessariamente o mais curto) entre esses nós. Nota: Suponha que a dimensão máxima do caminho é 5. Exemplos:?- caminho(2, 3, Lista). Lista = [2,4,3] ; Lista = [2,4,6,3] ; Lista = [2,1,3] ; no?- caminho(1, 5, Lista) %Uma possível solução é: Vai do nó 1 para o 2, depois para o 4,para o 6 e finalmente para o 5. Lista = [1,2,4,6,5] ; Lista = [1,2,4,3,6,5] ; Lista = [1,3,4,6,5] ; Lista = [1,3,6,5] ; no?- caminho(2, 2, Lista). Lista = [2,4,2] ; Lista = [2,4,6,3,1,2] ; Lista = [2,4,3,1,2] ; Lista = [2,1,2] ; Lista = [2,1,3,4,2] ; Lista = [2,1,3,6,4,2] ; no b) Escreva um predicado ciclos(+no, +Comp, -Lista), que dado um nó, calcule todos os ciclos possíveis, com comprimento inferior a Comp, desse nó. Sugestão: Utilize o predicado caminho (alínea anterior) como base para a resolução. Exemplo:?- ciclos(4, 3, Lista). Lista = [[4,3,6], [4,6,3]]?- ciclos(4, 5, Lista). Lista = [[4,3,6], [4,6,3], [4,2,1,3], [4,3,1,2]] Solução: % a) caminho(+noinicio, +NoFim, -Lista), ligacao2(x,y):- ligacao(x,y). ligacao2(x,y):- ligacao(y,x). Luis Paulo Reis / Eugénio da Costa Oliveira Pág. 46/55

caminho(noinicio, NoFim, Lista):- caminho(noinicio, NoFim, [NoInicio], Lista, 5). caminho(noinicio, NoFim, Lista, ListaFim,_):- ligacao2(noinicio, NoFim), append(lista, [NoFim], ListaFim). caminho(noinicio, NoFim, Lista, ListaFim, N):- N>0, ligacao2(noinicio, NoInterm), NoInterm \= NoFim, \+(member(nointerm, Lista)), append(lista, [NoInterm], Lista2), N2 is N-1, caminho(nointerm, NoFim, Lista2, ListaFim, N2). % Outra versão. Sera' que funciona? Porque? caminho2(noini, NoFim, Lista):- caminho2(noini, NoFim, Lista, 5). caminho2(_,_,_,0):-!,fail. caminho2(noini, NoFim, [NoIni,NoFim], _):- ligacao2(noini,nofim). caminho2(noini, NoFim, [NoIni Rest], N):- N2 is N-1, ligacao2(noini, NoInt), caminho2(noint, NoFim, Rest, N2). % Ainda outra Versão! caminho3(noini, NoFim, Lista):- caminho3(noini, NoFim, Lista, 0). caminho3(noini, NoFim, [H Rest], N):- N < 4, ligacao2(noini, NoInt), (NoInt = NoFim, [H Rest] = [NoIni, NoFim] ; H = NoIni, N2 is N+1, caminho3(noint, NoFim, Rest, N2)). b) ciclos(+no, +Comp, -Lista), ciclos(no, Comp, Lista):- findall(ciclo, caminho(no, No, [], Ciclo, Comp), Lista). Luis Paulo Reis / Eugénio da Costa Oliveira Pág. 47/55