Mokyklos tvarkaraščio uždavinys

Atliko: Tomas Danikauskas IFM 5/1

Sigitas Drąsutis IFM 5/1

Programos tekstas: Tvarka.java
Programa
Pakeistas programos tekstas (gmj.zip)

Užduotis:

Apribojimai:

Duomenų struktūra:

Algoritmas:

  1. Nuskaityti duomenis į matricą Mokytojai[64][38] ir perkopijuoti juos į matricą Mokytojai0;
  2. Suskaičiuoti mokytojų langus eval0;
  3. nustatyti pradinį iteracijos skaitliuką it = 0;
  4. nustatyti esama iteraciją it = it + 1, it < K;
  5. jei it = K nustoti skaičiuoti ir spausdinti esamą tvarkaraštį;
  6. nustatyti pradinį mokytojų skaitliuką kel = 0;
  7. jeigu i > 63 eiti į punktą 4;
  8. sugeneruoti atsitiktinį skaičių x iš intervalo [0,1];
  9. eiti į punktą 13, jei x < pt.x[0];
  10. rasti mokytojo langą;
  11. rasti patogią pamoką;
  12. patikrinti ar toks sukeitimas galimas, jei taip, tai eiti į 14 punktą;
  13. priskirti kel = kel + 1 ir eiti į 7 punktą;
  14. sukeisti langą ir patogią pamoką vietomis;
  15. suskaičiuoti mokytojų langus eval;
  16. palyginti eval ir eval0;
  17. jei eval < eval0 sukeisti esamą tvarkaraštį su pradiniu.

Algoritmo realizacija:

Algoritmas turi trūkumą, nes išrenka pirmąjį langą ir pirmą patogią paskaitą ir mėgina jas sukeisti. Jei sukeitimo nėra, tai tvarkaraštis taip ir lieka nepakeistas. Mūsų realizacijoje langas ir patogi pamoka randami atsitiktinai, kas pagerina optimizavimo algoritmą.

Tikrinimo realizacija:

Tikrinimas vyksta pagal punktus apibrėžtus skyrelyje apribojimai. Bet normaliame tvarkaraštyje įmanomi kai kokie apribojimai. Galimos kelios to paties dalyko paskaitos einančios viena po kitos, bei klasės suskaldymas į kelias dalis. Tam tikslui įvestos 3 naujos Mokytojai[i][3] reikšmės reikalingos tikrinimui:

R - šito dalyko pamokos gali eiti viena paskui kita. Pvz.: klase gali turėti 2 lietuviu kalbos, darbu ar kūno kultūros pamokas. Toks žymėjimas ir parodys dalykus, kurių dvigubi užsiėmimai neskaitomi klaida.
D - pamokos per kurias klasė skaidoma i dvi dalis. Pvz.: kūno kultūra. Žymėjimas rodo, kad radus, jog klase turi dvi pamokas tuo pat metu, to neskaityti klaida. šitą žymėjimą turi turėti abi pamokos.
B = D + R. Galimos viena paskui kita einančios pamokos, paskirstytos keliems mokytojams. Pvz.: darbų pamoka. Ji gali vykti pas skirtingus mokytojus ir po pora pamoku iš eilės. Abu dalykai turi būti pažymėti B raide.

Tikrinama pamoka, kuria buvo bandoma sukeisti su mokytojo langu. Apie klaida pradiniame tvarkaraštyje vartotojui atsiranda dialogo langas, kuriame yra nurodyta klasė ir jei įmanoma koordinatės tos patogios mokytojui paskaitos, kuria tikrinant įvyko klaida:


Pranešimas apie klaidą

Išvados: