Created
September 12, 2012 00:42
-
-
Save bfb/3703322 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Especificação dos predicados | |
*/ | |
/* | |
operações básicas | |
*/ | |
somasub :- | |
write('Digite um valor: '), nl, | |
read(N), | |
write('Digite o segundo valor: '), nl, | |
read(M), | |
S is N+M, | |
SU is N - M, | |
writef('%w%w%w%w%w%w',['A soma de ', N, ' + ',M, ' é ', S]),nl, | |
writef('%w%w%w%w%w%w',['A substração de ', N, ' - ',M, ' é ', SU]). | |
multdiv :- | |
write('Digite um valor: '), nl, | |
read(N), | |
write('Digite o segundo valor: '), nl, | |
read(M), | |
MU is N*M, | |
DI is N / M, | |
writef('%w%w%w%w%w%w',['O produto de ', N, ' por ',M, ' é ', MU]),nl, | |
writef('%w%w%w%w%w%w',['A divisão de ', N, ' / ',M, ' é ', DI]). | |
pot :- | |
write('Digite a base: '), nl, | |
read(N), | |
write('Digite o expoente: '), nl, | |
read(M), | |
pow(N, M, E), | |
writef('%w%w%w%w%w%w',['Potência de ', N, ' na ',M, ' é ', E]). | |
raiz :- | |
write('Digite um valor: '), nl, | |
read(N), | |
R is sqrt(N), | |
writef('%w%w%w%w%w%w',['Raiz quadrada de ', N, ' é ', R]). | |
resto :- | |
write('Digite o dividendo: '), nl, | |
read(N), | |
write('Digite o divisor: '), nl, | |
read(M), | |
R is mod(N, M), | |
writef('%w%w%w%w%w%w',['O resto da divisão de ', N, 'por ', M, ' é ', R]). | |
sucant :- | |
write('Digite um valor: '), nl, | |
read(N), | |
A is N - 1, | |
S is N + 1, | |
writef('%w%w%w%w%w%w',['Antecessor de ', N, ' é ', A, ' e o sucessor é ', S]). | |
parimpar :- | |
write('Digite um valor: '), nl, | |
read(N), | |
A is mod(N, 2), | |
A =:= 0 -> writef('Número par') ; writef('Número ímpar'). | |
somanum(0). | |
somanum(T) :- | |
write('Informe um valor (0 para sair)'), nl, | |
read(V), | |
V > 0, | |
N1 is T + V, | |
somanum(N1), | |
write('TOTAL: ', N1). | |
somanum :- | |
write('Digite um valor: '), nl, | |
read(N), | |
somatotal(N), | |
writef('%w%w%w%w',['O fatorial de ', N]). | |
somatotal(0). | |
somatotal(N) :- | |
N>0, | |
read(N2), | |
N1 is N + somatotal(N2). | |
/* | |
operações com expressões | |
*/ | |
/* 2.1 Quadrado e cubo*/ | |
quadcubo :- | |
write('Digite um valor: '), nl, | |
read(N), | |
Q is N*N, | |
C is N*N*N, | |
writef('%w%w%w%w',['O quadrado de ', N, ' é ',Q]), nl, | |
writef('%w%w%w%w',['O cubo de ', N, ' é ',C]). | |
/* 2.3 Fatorial*/ | |
fat :- | |
write('Cálculo do fatorial, digite um valor: '), nl, | |
read(N), | |
fatorial(N,F), | |
writef('%w%w%w%w',['O fatorial de ', N, ' é ',F]). | |
fatorial(0,1). | |
fatorial(N,F) :- | |
N>0, | |
N1 is N-1, | |
fatorial(N1,F1), | |
F is N * F1. | |
/* 2.6 MDC */ | |
mdc :- | |
write('Cálculo do mdc, digite um valor: '), nl, | |
read(A), | |
write('digite o segundo valor: '), nl, | |
read(B), | |
mdc(A,B,C), | |
writef('%w%w%w%w%w%w',['O mdc dos valores ', A, ' e ', B, ' é ',C]). | |
mdc(A, A, A). | |
mdc(A,B,C) :- | |
A < B, | |
Temp is B - A, | |
mdc(A,Temp,C). | |
mdc(A,B,C) :- | |
A > B, | |
Temp is A - B, | |
mdc(Temp,B,C). | |
/*Operações com listas */ | |
/*3.1 X é elemento da lista */ | |
memb :- | |
write('Digite o membro: '), nl, | |
read(N), | |
write('Digite a lista: '), nl, | |
read(M), | |
membro(N,M), | |
writef('%w%w%w%w',['O valor ', N, ' é membro da lista ', M]). | |
membro(X,[X|_]). % X é membro de uma lista se X é a | |
membro(X,[_|Y]):- % cabeça da lista. Ou então se X é | |
membro(X,Y). % membro do corpo da lista. | |
/* 3.5 Soma e produto de elementos da lista*/ | |
somaprodutolista :- | |
write('Digite uma lista (entre [ , ]): '), nl, | |
read(N), | |
somalista(N,S), | |
produto(N,P), | |
writef('%w%w%w%w',['A soma dos valores da lista ', N, ' é ',S]), | |
writef('%w%w%w%w',['O produto dos valores da lista ', N, ' é ',P]). | |
somalista([], 0). % A soma dos elementos de uma lista de números é | |
somalista([H|R], S):- % obtida somando o valor da cabeça á soma dos | |
somalista(R, X), % elementos do corpo da lista. | |
S is H + X. | |
produto([],0). % O produto de uma lista é obtido com o uso de | |
produto([X],X). % um predicado auxiliar, prod/2, necessario para | |
produto(L,P):- % isolar a aplicação do elemento neutro da | |
prod(L,P). % multiplicação do caso em que se pede diretamente | |
prod([],1). % o produto de uma lista vazia. | |
prod([X|Y],P):- | |
prod(Y,Q), | |
P is Q * X. | |
/*Verifica o tamanho da lista */ | |
tam :- | |
write('Digite uma lista (entre [ , ]): '), nl, | |
read(N), | |
tamanho(N,Z), | |
writef('%w%w%w%w',['O tamanho da lista ', N, ' é ', Z]). | |
tamanho([], 0). % O tamanho de uma lista vazia é zero. O tamanho de | |
tamanho([_|R], N):- % uma lista não-vazia é obtido acrescentando-se uma | |
tamanho(R, N1), % unidade ao tamanho de seu corpo. | |
N is N1 + 1. | |
/*3.9 Concatenação de duas listas*/ | |
conc :- | |
write('Digite uma lista (entre [ , ]): '), nl, | |
read(N), | |
write('Digite a segunda lista (entre [ , ]): '), nl, | |
read(M), | |
concat(N,M,S), | |
writef('%w%w%w%w%w%w',['A concatenação da lista ', N, ' e da lista ', M, ' é ', S]). | |
concat([], L, L). | |
concat([X | L1], L2, [X | L3]):- | |
concat(L1, L2, L3). | |
/*3.12. Enesimo elemento da lista | |
enes:- | |
write('Digite uma lista (entre [ , ]): '), nl, | |
read(X), | |
write('Digite o elemento: '), nl, | |
read(Y), | |
enesimo(M,X,Y), | |
write(N). */ | |
enesimo(1, X, [X | _]). % Este predicado devolve em X o enésimo elemento de | |
enesimo(N, X, [_ | Y]):- % uma lista. Pode ser usado no sentido inverso para | |
enesimo(M, X, Y), % informar a posição de um determinado elemento | |
N is M + 1. % na lista. | |
/* 3.14 Menor e Maior valor da lista*/ | |
menormaior :- | |
write('Digite uma lista (entre [ , ]): '), nl, | |
read(N), | |
min(N,ME), | |
max(N,MA), | |
writef('%w%w%w%w',['O menor valor da lista ', N, ' é ',ME]),nl, | |
writef('%w%w%w%w',['O maior valor da lista ', N, ' é ',MA]). | |
min([X],X). | |
min([X|Y],M):- | |
min(Y,N), | |
(X<N -> M=X; M=N). | |
max([X],X). % Calcula o maior elemento de uma lista numérica. | |
max([X|Y],M):- % Notar a semelhança com o predicado min/2, a | |
max(Y,N), % seguir, e o emprego da construção "if then else" | |
(X>N -> M=X; M=N). % dada por (A -> B ; C). | |
/* | |
Especificação do Menu principal! | |
*/ | |
menu :- | |
repeat, | |
write('-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x'),nl, | |
write(' :... Programa em Prolog -+- Menu de Operacoes ...: '),nl, | |
write('-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x'),nl,nl, | |
write('Digite a opcao escolhida (opcao com * ja esta implementada): '), nl, | |
write('1: Operacoes basicas\n \t 1.1 Soma e subtracao (*)\t 1.2 Multiplicacao e Divisao\t\t 1.3 Potenciacao\n \t 1.4 Raiz Quadrada\t\t 1.5 Resto da Divisao\t\t\t 1.6 Sucessor e antecessor\n2: Operacoes com expressoes\n \t 2.1 Numero par ou impar\t\t 2.2 Quadrado e Cubo (*)\n\t 2.3 Soma n valores inteiros\t\t 2.4 Fatorial (*)\n\t 2.5 Fibonacci \t\t\t\t 2.6 Valores entre N =< X =< N1\n\t 2.7 MDC (*)\t\t\t\t 2.8 MMC\n\t 2.9 Numero perfeito\t\t\t 2.10 Área do quadrado, triangulo e circulo\n3: Operacoes com listas\n \t 3.1 X e um elemento na lista (*) \t 3.2 Prefixo e Sufixo da lista\n\t 3.3 Sublista \t\t\t\t 3.4 X e Y sao adjacentes\n\t 3.5 Soma e Produto dos elementos (*) \t 3.6 Concatena 3 vezes a mesma lista\n \t 3.7 Tamanho da lista (*)\t\t 3.8 Media dos elementos da lista\n\t 3.9 Concatenacao de listas (*) \t 3.10 Quantas vezes um elemento aparece na lista\n \t 3.11 Ultimo elemento da lista\t\t 3.12 Enesimo elemento da lista (*)\n \t 3.13 Intersecao de listas\t\t 3.14 Menor e Maior valor digitado (*)\n \t 3.15 Ordena uma lista\t\t\t 3.16 Elimina todas as ocorrências de X\n \t 3.17 Elimina um elemento da posição X da lista\n \t 3.18 Posicao do maior elemento da lista\n0: Para sair do programa '),nl, | |
write('Opcao: '), | |
read(X), | |
X >= 0, | |
X =< 5, | |
operacao(X),nl,nl, | |
menu. | |
operacao(0) :- halt. | |
operacao(1.1) :- somasub. | |
operacao(1.2) :- multdiv. | |
operacao(1.3) :- pot. | |
operacao(1.4) :- raiz. | |
operacao(1.5) :- resto. | |
operacao(1.6) :- sucant. | |
operacao(2.1) :- parimpar. | |
operacao(2.2) :- quadcubo. | |
operacao(2.3) :- somanum. | |
operacao(2.4) :- fat. | |
operacao(2.5) :- fibo. | |
operacao(2.6) :- entre. | |
operacao(2.7) :- mdc. | |
operacao(2.8) :- mmc. | |
operacao(2.9) :- perf. | |
operacao(2.10) :- area. | |
operacao(3.1) :- memb. | |
operacao(3.2) :- prefsuf. | |
operacao(3.3) :- sublista. | |
operacao(3.4) :- adja. | |
operacao(3.5) :- somaprodutolista. | |
operacao(3.6) :- conclista. | |
operacao(3.7) :- tam. | |
operacao(3.8) :- med. | |
operacao(3.9) :- conc. | |
operacao(3.10) :- contagem. | |
operacao(3.11) :- ult. | |
operacao(3.12) :- enes. | |
operacao(3.13) :- inter. | |
operacao(3.14) :- menormaior. | |
operacao(3.15) :- ordena. | |
operacao(3.16) :- delall. | |
operacao(3.17) :- delx. | |
operacao(3.18) :- posic. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment