destacamento(
'Jose Marti',2001,'Frank',[estudiante('Cesar',m,5),estudiante('Manuel',m,5),estudiante('Raquel',f,4),estudiante('Lisandra',f,3)]
).
destacamento(
'Mella',2003,'Leopoldo',[estudiante('Cruzata',m,3),estudiante('Lukas',m,2),estudiante('Elizabet',f,4),estudiante('Diana',f,5)]
).
destacamento(
'Bartolete Perez',2011,'Bartolo',[estudiante('Diego',m,2),estudiante('Willian',m,2),estudiante('James',m,3),estudiante('Gertrudis',f,5)]
).
destacamento(
'Madrid',1991,'Mauricio',[estudiante('Luisma',m,2),estudiante('Macu',f,4),estudiante('Paz',f,5),estudiante('Soraya',f,5)]
).
destacamento(
'Barcelona',1991,'Xavi',[estudiante('Messi',m,3),estudiante('Valdes',f,5),estudiante('Lorena',f,5),estudiante('Vanesa',f,5)]
).
menu:- writeln(' '),
writeln('Elija una funcionalidad...'),
writeln('Nota: Al final de cada dato entrado ponga un punto(.)'),
writeln(' '),
writeln('1-)Conocer la existencia de estudiantes desaprobados dado un destacamento.'),
writeln('2-)Conocer que sexo tiene mejor promedio.'),
writeln('3-)Conocer uno de los estudiantes con mayor nota.'),
writeln('4-)Conocer el promedio de nota de un curso.'),
read(X),writeln(' '),opcion(X).
opcion(X):- X==1, writeln('1-)Introdusca un nombre de destacamento.'), read(N), suspenso(N),!.
opcion(X):- X==2, writeln('2-)Introdusca un nombre de destacamento.'), read(N), promedio(N),!.
opcion(X):- X==3, writeln('3-)Introdusca un nombre de destacamento.'),read(N), mayorNota(N),!.
opcion(X):- X==4, writeln('3-)Introdusca la fecha del curso.'),read(N), imprimir(N),!.
% Inciso a
getNota(estudiante(_,_,N),N).
dadoNotaEstudiante(estudiante(P,_,N),P,N).
ponchao(N):- destacamento(N,_,_,L),contar(L,C),C>0,!,writeln('Existen suspenso').
ponchao(_):- writeln('No existen suspenso').
contar([],0):-!.
contar([X|L],C):-getNota(X,V),V<3,!,contar(L,C1),C is C1+1.
contar([_|L],C):-contar(L,C).
% Inciso b
promedio(N):- destacamento(N,_,_,L),llenar(L,B,H),calcular(B,R),calcular(H,R1),length(B,X), Y is R/X,length(H,X1),U is R1/X1,Y>U,!,writeln('El mejor promedio es el de los varones').
promedio(_):- writeln('El mejor promedio es el de las hembras').
llenar([],[],[]):-!.
llenar([X|L],[V|R],H):- arg(2,X,S),S==m,arg(3,X,V),!,llenar(L,R,H).
llenar([X|L],R,[V|H]):- arg(3,X,V),llenar(L,R,H).
calcular([],0):-!.
calcular([X|L],P):- calcular(L,P1),P is X+P1.
% Inciso c
mayorNota(N):- destacamento(N,_,_,L),nota(V,L),buscarNombre(L,P,V),write('El estudiante es: '),write(P).
nota(N,[X|L]):- arg(3,X,P),mayor(N,P,L).
mayor(P,P,[]):- !.
mayor(Q,W,[X|L]):- arg(3,X,W1),W1>=W,!,mayor(Q,W1,L).
mayor(Q,W,[_|L]):- mayor(Q,W,L).
buscarNombre([],_,_):- !.
buscarNombre([X|_],P,V):-dadoNotaEstudiante(X,P1,V),!,P=P1.
buscarNombre([_|L],P,V):- buscarNombre(L,P,V).
% Inciso d
imprimir(F):- fecha(F,L),pintar(L,F). % metodo principal
fecha(F,P):-bagof(I,prom(F,I),P). % obtener las fechas
prom(F,I):-destacamento(_,F,_,L),llenar(L,R),calcular(R,S),length(R,C), I is S/C. % suma las notas
llenar([],[]):-!. %llena la lista con las notas
llenar([X|L],[V|R]):- arg(3,X,V),llenar(L,R).
pintar([],_):- !. % escribir el resultado
pintar([X|L],K):- pintar(L,K),write('Promedio del curso '),write(K),write(': '),writeln(X).
Comentarios sobre la versión: Versión 1.0 (5)