1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| module MonModule
integer, parameter:: maxi=500
integer, dimension(maxi,maxi):: student,ecole
integer, dimension(maxi):: studprefer,ecoleprefer,tabaff
contains
function ecolepriorite(e,s,s1,n)
integer:: e,s,s1,n,i
logical:: ecolepriorite
do i=1,n,1
if (ecole(e,i)==s) then
ecolepriorite= .true.
if (ecole(e,i)==s1) then
ecolepriorite= .false.
end if
end if
end do
end function ecolepriorite
subroutine affect(n)
integer:: n,i,s,s1,e,freecount
do i=1,n,1
studprefer(i)=0
ecoleprefer(i)=-1
end do
freecount=n
do while (freecount>0)
do s=1,n,1
do i=1,n,1
do while (studprefer(s)==0)
e=student(s,i)
if (ecoleprefer(e)==-1) then
ecoleprefer(e)=s
studprefer(s)=1
freecount=freecount-1
else
s1=ecoleprefer(e)
end if
if (ecolepriorite(e,s,s1,n).eqv..true.) then
ecoleprefer(e)=s
studprefer(s)=1
studprefer(s1)=0
end if
end do
end do
end do
end do
end subroutine affect
end module MonModule
!!programme principale
program affectation
use MonModule
implicit none
integer:: m,i,j
print*,'entrer le nombre des etudiants et des ecoles :'
read(*,*)m
print*,'entrer la liste des priorites des ecoles:'
do i=1,m,1
do j=1,m,1
print*,'entrer la preference numero',i,'de l''ecole numero',j
read(*,*)ecole(i,j)
end do
end do
print*,'entrer la liste de preferences des etudiants:'
do i=1,m,1
do j=1,m,1
print*,'entrer la preference',i,'de l''etudiant',j
read(*,*)student(i,j)
print*,'la liste des etudiants dans les ecoles par ordre de priorite'
do i=1,m,1
print*,i,'--->'
do j=1,m,1
print*, ecole(i,j)
end do
print*,' '
end do
print*,'la liste des voeux des etudiants:'
do i=1,m,1
print*,i,'--->'
do j=1,m,1
print*, student(i,j)
end do
print*,' '
end do
call affect(m)
do i=1,m,1
tabaff(ecoleprefer(i))=i
end do
print*,'l''affectation est la suivante:'
do i=1,m,1
print*, i,tabaff(i)
end do
print*,' '
end program affectation |
Partager