Skip to content

Instantly share code, notes, and snippets.

@fellipecaetano
Created September 11, 2017 22:49
Show Gist options
  • Save fellipecaetano/3aca547afaf2bef9cd55699544101396 to your computer and use it in GitHub Desktop.
Save fellipecaetano/3aca547afaf2bef9cd55699544101396 to your computer and use it in GitHub Desktop.
MC346 - P1 (2014S1)
%%% questão 1
vogais(N) :- vogais(0, N).
vogais(A, N) :- get_char(C), vogais(C, A, N).
vogais('\n', A, N) :- A = N, !.
vogais('a', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('A', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('e', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('E', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('i', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('I', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('o', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('O', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('u', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais('U', A, N) :- A1 is A + 1, !, vogais(A1, N).
vogais(_, A, N) :- !, vogais(A, N).
%%% questão 2
dentro(d).
conta([], 0, 0).
conta([H|T], D, F) :-
dentro(H),
conta(T, D1, F),
D is D1 + 1.
conta([H|T], D, F) :-
\+ dentro(H),
conta(T, D, F1),
F is F1 + 1.
conta2(L, D, F) :- conta_acc(L, D, 0, F, 0).
conta_acc([], D, D, F, F).
conta_acc([H|T], D, DA, F, FA) :-
dentro(H),
DA1 is DA + 1,
conta_acc(T, D, DA1, F, FA).
conta_acc([H|T], D, DA, F, FA) :-
\+ dentro(H),
FA1 is FA + 1,
conta_acc(T, D, DA, F, FA1).
%%% questão 3
filho(a, b).
filho(c, b).
filho(c, e).
filho(d, c).
filho(f, c).
filho(f, g).
filho(g, h).
filho(i, h).
ancestral(A, A).
ancestral(A, B) :- filho(B, A).
ancestral(A, B) :- filho(B, X), ancestral(A, X).
consang(A, B) :- ancestral(X, A), ancestral(X, B).
%%% questão 4
perfeito(0) :- !, fail.
perfeito(N) :- soma_divisores(N, N).
soma_divisores(N, X) :- soma_divisores(N, N, 0, X).
soma_divisores(1, _, A, X) :- !, A = X.
soma_divisores(I, N, A, X) :-
I1 is I - 1,
divisor(I1, N),
A1 is A + I1,
soma_divisores(I1, N, A1, X).
soma_divisores(I, N, A, X) :-
I1 is I - 1,
\+ divisor(I1, N),
soma_divisores(I1, N, A, X).
divisor(I, N) :- 0 =:= N mod I.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment