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)
Atskirai pateiktas failas Tvarka.class

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ą

Pakeitimai:

  1. Pakeistas pagrindinis skaičiavimu algoritmas. Mūsų pirmtakai naudojo rekursiją, šito buvo atsisakyta ir algoritmas realizuotas elementarių ciklų pagalba, kas pagreitino skaičiavimų greitį.
  2. Naujas skaičiavimų algoritmas papildytas klaidų tikrinimo metodais, leidžiančiais nustatyti pradinio tvarkaraščio teisingumą programos vykdymo metu ir nurodančiais klaidos buvimo vietą
  3. Aukščiau pateiktas failas Tvarka.class buvo daromas ir testuojamas naudojant aplinka GMJ2. Tvarka.class yra atskiras failas tinkantis bet kuriai aplinkai. Norint jį paleisti su projektu GMJ1 ar GMJ2 reikia tik įkelti jį į atitinkamą .jar archyvą.
  4. Vienintelis reikalavimas naudojant failą Tvarka.class kitame projekte: duomenų failas turi atitikti failą aprašytą reikalavimuose, t.y. jame galima naudoti raides Q ir X, nes visos kitos bus automatiškai ignoruojamos.

Instaliacija:

Programos instaliavimas nereikalauja didelių pastangų:
  1. Persikopijuokite suarchivuotą programą. Ją galite atsisiųsti papaudę nuorodą puslapio viršuje "Pakeistos programos tekstas". Archivas gmj.zip.
  2. Išarchivuokite programą. Įsitikinkite, kad abu reikalingi failai: gmj_allnew.jar ir programa.html yra vienoje direktorijoje.
  3. Duomenys naudojami programos darbe imami iš failo, kuris nusirodo pačios programos darbo metu, o duomenų formatas turi atitikti aukščiau nurodytus reikalavimus.
  4. Atidarykite failą programa.html.
  5. Programa ištestuota WINDOWS 95, WINDOWS 98, WINDOWS NT IR UNIX aplinkose. Ji veikia tinkle ir gali būti paleidžiama applet'ų peržiūros programomis, bei interneto naršyklėmis palaikančiomis JAVA 1.2.

Išvados: