Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista de Exercícios – GCC112 Linguagens de Programação II Departamento de Ciência da Computação – Universidade Federal de Lavras Profs. André Saúde e Rennan Marujo 1) Com base nas linguagens de programação lógica, defina o que é um predicado, o que é uma clausula e o que é um argumento. 2) Quais as vantagens e desvantagens da programação lógica? 3) Explique o que é corte e de um exemplo de como ele pode melhorar um programa. 4) Expresse através de fatos e regras Prolog as informações contidas na seguinte frase: “Loro é um pássaro. Beta é um peixe. Jonas é um inseto. Pássaros gostam de insetos. Gatos gostam de insetos. Gatos gostam de pássaros. Amigos gostam uns dos outros. Eu sou uma pessoa. Minha gata é minha amiga. Minha gata come tudo o que gosta, exceto pessoas. O nome da minha gata é Hina.” Descreva através de um predicado prolog o que Hina come. 5) Considere a seguinte base de fatos prolog: a(a1,1). a(A,2). a(a3,N). b(1,b1). b(2,B). b(N,b3). c(X,Y) :- a(X,N), b(N,Y). d(X,Y) :- a(X,N), b(Y,N). d(X,Y) :- a(N,X), b(N,Y). Preveja quais serão as respostas às seguintes perguntas em Prolog 5a) ?- a(X,2). 5b) ?- b(X, zoologico). 5c) ?- c(X,b3). 5d) ?- c(X,Y). 5e) ?- d(X,Y). 6) Defina o programa abaixo sem utilizar igualdade. irmaos(X, Y) :- pai(X, PX), pai(Y, PY), PX = PY. 7) Suponha que: nota(Tiago,5.0). nota(Giovanni,9.0). nota(Frida,10.0). nota(Marcelo,9.0). nota(Breno,6.0). nota(Matheus,8.0). nota(Gislaine,9.0). nota(Bianca,2.5). nota(Gustavo,3.5). Considerando que: Nota de 7.0 á 10.0 = Aprovado. Nota de 5.0 á 6.9 = Recuperação. Nota de 0.0 á 4.9 = Reprovado. 7a) Escreva uma regra para identificar a situação de um determinado aluno. 7b) Escreva uma regra para identificar o aluno com maior nota para ganhar um prêmio. 8) Escreva um programa para determinar quais tipos sanguíneos podem doar/receber sangue de e para quais tipos segundo a tabela abaixo. Tabela: Tipos sanguíneos A B AB O A Doa/Recebe - Doa Recebe B - Doa/Recebe Doa Recebe AB Recebe Recebe Doa/Recebe Recebe O Doa Doa Doa Doa/Recebe 9) Escreva um programa que calcule o cubo de um número. Ex: cubo(3,27). 10) Escreva um programa Presidente/2 que retorna o(s) nome(s) do(s) presidente(s) que governou(aram) o Brasil em um dado ano: governou(deodoro_da_fonseca,1891,1891). governou(floriano_peixoto,1891,1894). governou(prudente_de_moraes,1894,1898). governou(compos_sales,1898,1902). governou(rodrigues_alves,1902,1906). governou(afonso_pena,1906.1909). governou(nilo_pecanha,1909,1910). 11) Um estudante acostumado a usar linguagens procedimentais está a desenvolver um compilador em Prolog. Uma das tarefas consiste em traduzir um código de erro para uma pseudo-descrição em português. O código por ele usado é: traduza(Codigo, Significado) :- Codigo = 1, Significado = integer_overflow. traduza(Codigo, Significado) :- Codigo = 2, Significado = divisao_por_zero. traduza(Codigo, Significado) :- Codigo = 3, Significado = id_desconhecido. Esta não é uma forma apropriada de programar em Prolog. Melhore este código. 12) Escreva um predicado para calcular o Fibonacci de um número N. N 0 1 2 3 4 5 6 Fib 1 1 2 3 5 8 13 13) Escreva um predicado que verifica se um número é primo. 14) Defina os predicados npar(Lista) e nimpar(Lista) para determinar se uma dada lista tem número par ou ímpar de elementos, respectivamente. 15) Escreva um predicado para inserir um elemento ao final de uma lista. 16) Escreva um predicado para inserir um elemento ao final de uma lista utilizando o predicado de inverter uma lista. 17) Escreva um predicado para remover todos os elementos repetidos em uma lista. 18) Escreva um programa prolog para determinar a operação de união entre duas listas. 19) Escreva um programa prolog para determinar a operação de intersecção entre duas listas. 20) Dados dois números inteiros N1, N2, gerar uma lista contendo todos os inteiros do intervalo [N1,..., N2] em ordem crescente. 21) Dados duas listas sem repetição, verificar se a primeira é subconjunto da segunda. 22) Defina o predicado ordena(Lista,ListaOrdenada) que ordena uma lista através de naive sort (por permutações). 23) Missionários e Canibais: Na margem esquerda de um rio há três missionários e três canibais, que querem atravessá-lo para a outra margem. Há um bote que pode transportar no máximo duas pessoas ao mesmo tempo sendo que uma delas será sempre um missionário. Os missionários não podem ficar em menor número que os canibais em qualquer margem, caso contrário serão devorados. Como fazer para que todos cheguem a salvo na outra margem do rio? Dica: representar o estado por (Me, Ce, be) onde Me é o número de missionários na margem esquerda, Ce é o número de canibais na margem esquerda e be é 1 se o bote está na margem esquerda e 0 se o bote está na margem direita.
Compartilhar