Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations derfloh on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

acedemic elections

Status
Not open for further replies.

mc123456

MIS
Joined
Mar 25, 2005
Messages
1
Location
IE
i need to write code for an acedemic council elections
so far i have the below code but stuck now.
it takes in members with their number of votes from each depatment. there is a restriction in that a certain number of male and females employees must be selected (gender balancing)
the allocate i cannot get working.
any help folks??
thanking in advance!!

seats(12,7,5).

getsortedcandlist(x):- setof([A,B,C,D],
candidate(A,B,C,D),R),
bubblesortcands(R,X).

member(A,[A|_]).
member(A,[_|B]):- member(A,B).

bubblesortcands(L,L).
bublesortcands(L,R):- swap(L,L2),
!,
bubblesortcands(L2,R).

genderbalanceon.
genderbalance(true):- assert(genderbalanceon).
genderbalance(false):- abolish(genderbalanceon,0).

initall:- getsortedcandlist(X),
member([A,B,C,D],X),
assert(elected(A,B,C,D)),
fail.

swap([[A,B,C,D], [E,F,G,H]|T], [[E,F,G,H],[A,B,C,D]|T]):- D>H.

swap([X|R],[X|P]):- swap(R,P).

deptcount([],_,0).
deptcount([[_,D,_,_]|T],D,C):- !,
deptcount(T,D,X),
C is X+1.

deptcount([_|T],D,C):- deptcount(T,D,C).

deptmaxok(L,D):- deptcount(L,D,C),
department(D,_,M,_),
M>=C.

deptminok(L,D):- deptcount(L,D,C),
department(D,_,_,M),
C>=M.

schoolcount([],_,0).
schoolcount([[_,D,_,_]|T],S,C):- department(D,S,_,_),
!,
schoolcount(T,S,X),
C is X+1.

schoolcount([_|T],S,C):-schoolcount(T,S,C).

schoolmaxok(L,S):- schoolcount(L,S,C),
school(S,M,_),
M>=C.

schoolminok(L,S):- schoolcount(L,S,C),
school(S,_,M),
C>=M.

schoolminok(L,S):- getsortcandlist(R),
schoolcount(R,S,C),
schoolcount(L,S,X),
school(S,_,M),
C<M,
C==X.

gendercount([],_,0).
gendercount([[_,_,G,_]|T],G,C):- !,
gendercount(T<G<X),
C is X+1.

gendercount([_|T],G,C):-deptcount(T,G,C).
gendermaxok(L):- gendercount(L,m,MC),
gendercount(L,f,FC),
seats(_,MAX,_),
MAX>=MC,
MAX>=FC.

gendermaxok(_):- not(genderbalanceon).
genderminok(L):- gendercount(L,m,MC),
gendercount(L,f,FC),
seats(_,_,MIN),
MC>=MIN,
FC>=MIN.

genderminok(_):- not(genderbalanceon).
deptgenderminok(L,B):- setof([A,B,C,D],
member([A,B,C,D],L),X),
genderminok(X). /*not working yet*/

getdeptlist(L):- setof(A,B^C^D^department(A,B,C,D),L).
getschoollist(L):- setof(A,B^C^school(A,B,C),L).

allocminseats(R):- getsortedcandlist(CL),
getdeptlist(DL),

getschoollist(SL),

allocdeptmin(DL,[],R). /* not done*/

allocdeptmin([H|T],L,A):- deptminok(L,H),
!,
allocdeptmin(T,L,A).

allocdeptmin([H|T],L,A):- getsortedcandlist(R),
member(J,R),
j=[_,H,_,_],
not(member(J,L)),
allocatedeptmin([H|T],
[J|L],A).

allocatedeptmin([],A,A).


/*allocate([],A,A).
allocate([H|T],L,A):- not(member(H,L),
H=[N,D,G,V].*/


invalidlist(L):- not(gendermaxok(L)).
invalidlist(L):- not(genderminok(L)).

invalidlist(L):- department(D,_,_,_),
not(deptminok(L,D)).

invalidlist(L):- department(D,_,_,_),
not(deptmaxok(L,D)).

invalidlist(L):- school(S,_,_),
not(schoolminok(L,S)).

invalidlist(L):- school(S,_,_),
not(schoolmaxok(L,S)).

invalidlist(L):- seats(X,_,_),
length(L,Len),
Len\==X.

school(science,3,1).
school(business,3,1).
school(humanities,3,1).
school(engineering,3,1).
school(health,1,1).
school(adulted,2,1).

department(sp,science,2,1).
department(ee,engineering,2,1).
department(hl,humanities,2,1).
department(ha,humanities,2,1).

candidate(joe,sp,m,20).
candidate(ann,ee,f,16).
candidate(tony,ee,m,27).
candidate(lisa,hl,f,34).
candidate(barry,ha,m,22).
candidate(ben,ee,m,29).
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top