From: Ivan Pribela Date: Sun, 1 Nov 2015 14:55:47 +0000 (+0100) Subject: Sortiranje, sredjeno formatiranje, uvlacenje i novi redovi X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=commitdiff_plain;h=d85081749679b32f3bdbccc90d45c6c89d49bbc5 Sortiranje, sredjeno formatiranje, uvlacenje i novi redovi --- diff --git a/sortiranje/knjige/Biblioteka2.java b/sortiranje/knjige/Biblioteka2.java index 5a68014..ff33aeb 100644 --- a/sortiranje/knjige/Biblioteka2.java +++ b/sortiranje/knjige/Biblioteka2.java @@ -9,253 +9,249 @@ import java.util.Comparator; // Klasa koja opisuje jednu knjigu class Knjiga implements Comparable { - public final int id; - public final String naslov; - public final String autor; - - public Knjiga(int id, String naslov, String autor) { - this.id = id; - this.naslov = naslov; - this.autor = autor; - } - - public String toString() { - return id + " " + autor + ": " + naslov; - } - - public int compareTo(Knjiga that) { - return this.id - that.id; - } + public final int id; + public final String naslov; + public final String autor; + + public Knjiga(int id, String naslov, String autor) { + this.id = id; + this.naslov = naslov; + this.autor = autor; + } + + public String toString() { + return id + " " + autor + ": " + naslov; + } + + public int compareTo(Knjiga that) { + return this.id - that.id; + } } // Glavni program public class Biblioteka2 { - public static void main(String[] arguments) { - - // Ucitavamo knjige iz fajla - String imeFajla = Svetovid.in - .readLine("Unesite ime fajla sa knjigama:"); - Knjiga[] niz = ucitajKnjige(imeFajla); - - // Ako nismo ucitali knjige, zavrsavamo program sa return - if (niz == null) { - Svetovid.out.println("Ne moze da se cita iz fajla " + imeFajla - + "."); - return; - } + public static void main(String[] arguments) { - // Pitamo korisnika za kriterijum sortiranja - Svetovid.out.println("Opcija 1: standardan sort bez komparatora"); - Svetovid.out.println("Opcija 2: sort sa opadajucim id knjige"); - Svetovid.out.println("Opcija 3: sort po naslovu"); - Svetovid.out.println("Opcija 4: sort po autoru, a zatim po naslovu"); - Svetovid.out.println("Za ostale opcije niz nece biti sortiran"); - Svetovid.out.print("Unesite opciju 1-4:"); - int opcija = Svetovid.in.readInt(); - - // Sortiramo po odabranom kriterijumu - switch (opcija) { - case 1: - Arrays.sort(niz); - break; - case 2: - sortirajNiz(niz, new ObrnutiKomparator(new PrirodniKomparator())); - break; - case 3: - sortirajNiz(niz, new KomparatorPoNaslovu()); - break; - case 4: - sortirajNiz(niz, new KomparatorPoAutoruIPotomNaslovu()); - break; - default: - Svetovid.out.println("Pogresna opcija! Niz nece biti sortiran."); - } + // Ucitavamo knjige iz fajla + String imeFajla = Svetovid.in.readLine("Unesite ime fajla sa knjigama:"); + Knjiga[] niz = ucitajKnjige(imeFajla); - // Stampamo niz - stampajKnjige("Niz knjiga", niz); - - // Sacuvamo (sortirani) niz u novi fajl - imeFajla = Svetovid.in.readLine("Unesite ime fajla za snimanje: "); - boolean sacuvano = sacuvajKnjige(imeFajla, niz); - - // Ako nismo sacuvali knjige, prijavimo to korisniku - if (!sacuvano) { - Svetovid.out.println("Ne moze da se pise u fajl " + imeFajla + "."); - } - - } - - public static Knjiga[] ucitajKnjige(String imeFajla) { - - // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige - if (!Svetovid.testIn(imeFajla)) { - return null; - } - - // Ako mozemo, napravimo precicu 'in' da ne bi morali da - // svaki put kuvamo 'Svetovid.in(imeFajla)' - SvetovidReader in = Svetovid.in(imeFajla); - - // Koliko ima knjiga u fajlu? - int br = in.readInt(); - - // Napravimo niz odgovarajuce velicine - Knjiga[] rez = new Knjiga[br]; - - // Ucitamo knjige - for (int i = 0; i < br; i++) { - - // Ucitamo podatke o knjizi - int id = in.readInt(); - String naslov = in.readLine(); - String autor = in.readLine(); - - // Napravimo knjigu - Knjiga knjiga = new Knjiga(id, naslov, autor); - - // Dodamo knjigu u niz - rez[i] = knjiga; - - } - - // Zatvorimo fajl - in.close(); - - // Vratimo ucitani niz - return rez; - - } - - public static void stampajKnjige(String naslov, Knjiga[] niz) { - - // Odstampamo naslov - Svetovid.out.println(); - Svetovid.out.println(naslov); - Svetovid.out.println(); - - // I potom sve knjige redom - for (Knjiga knjiga : niz) { - Svetovid.out.println(knjiga); - } - - } - - public static boolean sacuvajKnjige(String imeFajla, Knjiga[] niz) { - - // Ako ne mozemo da otvorimo fajl, ne upisujemo knjige - if (!Svetovid.testOut(imeFajla)) { - return false; - } - - // Ako mozemo, napravimo precicu 'out' da ne bi morali da - // svaki put kuvamo 'Svetovid.out(imeFajla)' - SvetovidWriter fajl = Svetovid.out(imeFajla); + // Ako nismo ucitali knjige, zavrsavamo program sa return + if (niz == null) { + Svetovid.out.println("Ne moze da se cita iz fajla " + imeFajla + "."); + return; + } - // Upisemo ukupan broj knjiga - fajl.println(niz.length); + // Pitamo korisnika za kriterijum sortiranja + Svetovid.out.println("Opcija 1: standardan sort bez komparatora"); + Svetovid.out.println("Opcija 2: sort sa opadajucim id knjige"); + Svetovid.out.println("Opcija 3: sort po naslovu"); + Svetovid.out.println("Opcija 4: sort po autoru, a zatim po naslovu"); + Svetovid.out.println("Za ostale opcije niz nece biti sortiran"); + Svetovid.out.print("Unesite opciju 1-4:"); + int opcija = Svetovid.in.readInt(); - // I potom podatke za svaku knjigu - for (Knjiga k : niz) { - fajl.println(k.id); - fajl.println(k.naslov); - fajl.println(k.autor); - } + // Sortiramo po odabranom kriterijumu + switch (opcija) { + case 1: + Arrays.sort(niz); + break; + case 2: + sortirajNiz(niz, new ObrnutiKomparator(new PrirodniKomparator())); + break; + case 3: + sortirajNiz(niz, new KomparatorPoNaslovu()); + break; + case 4: + sortirajNiz(niz, new KomparatorPoAutoruIPotomNaslovu()); + break; + default: + Svetovid.out.println("Pogresna opcija! Niz nece biti sortiran."); + } - // Zatvorimo fajl - Svetovid.closeOut(imeFajla); + // Stampamo niz + stampajKnjige("Niz knjiga", niz); - // Javimo da smo uspesno sacuvali knjige - return true; + // Sacuvamo (sortirani) niz u novi fajl + imeFajla = Svetovid.in.readLine("Unesite ime fajla za snimanje: "); + boolean sacuvano = sacuvajKnjige(imeFajla, niz); + + // Ako nismo sacuvali knjige, prijavimo to korisniku + if (!sacuvano) { + Svetovid.out.println("Ne moze da se pise u fajl " + imeFajla + "."); + } + + } + + public static Knjiga[] ucitajKnjige(String imeFajla) { + + // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige + if (!Svetovid.testIn(imeFajla)) { + return null; + } + + // Ako mozemo, napravimo precicu 'in' da ne bi morali da + // svaki put kuvamo 'Svetovid.in(imeFajla)' + SvetovidReader in = Svetovid.in(imeFajla); + + // Koliko ima knjiga u fajlu? + int br = in.readInt(); + + // Napravimo niz odgovarajuce velicine + Knjiga[] rez = new Knjiga[br]; + + // Ucitamo knjige + for (int i = 0; i < br; i++) { + + // Ucitamo podatke o knjizi + int id = in.readInt(); + String naslov = in.readLine(); + String autor = in.readLine(); + + // Napravimo knjigu + Knjiga knjiga = new Knjiga(id, naslov, autor); + + // Dodamo knjigu u niz + rez[i] = knjiga; + + } + + // Zatvorimo fajl + in.close(); + + // Vratimo ucitani niz + return rez; + + } + + public static void stampajKnjige(String naslov, Knjiga[] niz) { + + // Odstampamo naslov + Svetovid.out.println(); + Svetovid.out.println(naslov); + Svetovid.out.println(); + + // I potom sve knjige redom + for (Knjiga knjiga : niz) { + Svetovid.out.println(knjiga); + } + + } + + public static boolean sacuvajKnjige(String imeFajla, Knjiga[] niz) { + + // Ako ne mozemo da otvorimo fajl, ne upisujemo knjige + if (!Svetovid.testOut(imeFajla)) { + return false; + } + + // Ako mozemo, napravimo precicu 'out' da ne bi morali da + // svaki put kucamo 'Svetovid.out(imeFajla)' + SvetovidWriter fajl = Svetovid.out(imeFajla); - } + // Upisemo ukupan broj knjiga + fajl.println(niz.length); - public static void sortirajNiz(Knjiga[] niz, Comparator c) { - Knjiga tmp; - for (int i = niz.length - 1; i > 0; i--) - for (int j = 0; j < i; j++) - if (c.compare(niz[j], niz[i]) > 0) { - tmp = niz[j]; - niz[j] = niz[i]; - niz[i] = tmp; - } - } + // I potom podatke za svaku knjigu + for (Knjiga k : niz) { + fajl.println(k.id); + fajl.println(k.naslov); + fajl.println(k.autor); + } + + // Zatvorimo fajl + Svetovid.closeOut(imeFajla); + + // Javimo da smo uspesno sacuvali knjige + return true; + + } + + public static void sortirajNiz(Knjiga[] niz, Comparator c) { + Knjiga tmp; + for (int i = niz.length - 1; i > 0; i--) + for (int j = 0; j < i; j++) + if (c.compare(niz[j], niz[i]) > 0) { + tmp = niz[j]; + niz[j] = niz[i]; + niz[i] = tmp; + } + } } -// Komparator koji poredi knjige po naslovu +// Koparator koji poredi knjige po naslovu class KomparatorPoNaslovu implements Comparator { - @Override - public int compare(Knjiga knjiga1, Knjiga knjiga2) { - int rezultat = knjiga1.naslov.compareTo(knjiga2.naslov); - return rezultat; - } + @Override + public int compare(Knjiga knjiga1, Knjiga knjiga2) { + int rezultat = knjiga1.naslov.compareTo(knjiga2.naslov); + return rezultat; + } } -// Komparator koji poredi knjige po naslovu +// Koparator koji poredi knjige po naslovu class KomparatorPoAutoru implements Comparator { - @Override - public int compare(Knjiga knjiga1, Knjiga knjiga2) { - int rezultat = knjiga1.autor.compareTo(knjiga2.autor); - return rezultat; - } + @Override + public int compare(Knjiga knjiga1, Knjiga knjiga2) { + int rezultat = knjiga1.autor.compareTo(knjiga2.autor); + return rezultat; + } } -// Komparator koji koristi prirodni poredak, tj. samo poziva compareTo() +// Koparator koji koristi prirodni poredak, tj. samo poziva compareTo() class PrirodniKomparator implements Comparator { - @Override - public int compare(Knjiga knjiga1, Knjiga knjiga2) { - return knjiga1.compareTo(knjiga2); - } + @Override + public int compare(Knjiga knjiga1, Knjiga knjiga2) { + return knjiga1.compareTo(knjiga2); + } } // Komparator koji daje obrnuti poredak u odnosu na originalni komparator -// koji mu je prosledjen u konstruktoru class ObrnutiKomparator implements Comparator { - private final Comparator originalni; + private final Comparator originalni; - public ObrnutiKomparator(Comparator originalni) { - this.originalni = originalni; - } + public ObrnutiKomparator(Comparator originalni) { + this.originalni = originalni; + } - @Override - public int compare(Knjiga knjiga1, Knjiga knjiga2) { + @Override + public int compare(Knjiga knjiga1, Knjiga knjiga2) { - return -originalni.compare(knjiga1, knjiga2); - } + return -originalni.compare(knjiga1, knjiga2); + } } -// Komparator koji prvo poredi pomocu primarnog komparatora a potom po -// sekundarnom +// Komparator koji prvo poredi pomocu primarnog komparatora a potom po sekundarnom class KompozitniKomparator implements Comparator { - private final Comparator primarni; - private final Comparator sekundarni; - - public KompozitniKomparator(Comparator primarni, - Comparator sekundarni) { - this.primarni = primarni; - this.sekundarni = sekundarni; - } - - @Override - public int compare(Knjiga knjiga1, Knjiga knjiga2) { - int rezultat = primarni.compare(knjiga1, knjiga2); - if (rezultat == 0) { - rezultat = sekundarni.compare(knjiga1, knjiga2); - } - return rezultat; - } + private final Comparator primarni; + private final Comparator sekundarni; + + public KompozitniKomparator(Comparator primarni, + Comparator sekundarni) { + this.primarni = primarni; + this.sekundarni = sekundarni; + } + + @Override + public int compare(Knjiga knjiga1, Knjiga knjiga2) { + int rezultat = primarni.compare(knjiga1, knjiga2); + if (rezultat == 0) { + rezultat = sekundarni.compare(knjiga1, knjiga2); + } + return rezultat; + } } // Komparator koji poredi po autoru, a za iste autore, po naslovu class KomparatorPoAutoruIPotomNaslovu extends KompozitniKomparator { - public KomparatorPoAutoruIPotomNaslovu() { - super(new KomparatorPoAutoru(), new KomparatorPoNaslovu()); - } + public KomparatorPoAutoruIPotomNaslovu() { + super(new KomparatorPoAutoru(), new KomparatorPoNaslovu()); + } } diff --git a/sortiranje/knjige/zad-sort2.txt b/sortiranje/knjige/zad-sort2.txt index dfdad73..02a9708 100644 --- a/sortiranje/knjige/zad-sort2.txt +++ b/sortiranje/knjige/zad-sort2.txt @@ -32,7 +32,7 @@ drugi parametar tipa Comparator ciji metod `compare` ce se onda pozivati u kodu umesto `compareTo` na objektu. Na primer //umesto - if (o.compareTo(o2)>0) + if (o.compareTo(o2)>0) //koristiti if (comp.compare(o,o2)>0) @@ -73,7 +73,7 @@ sortiran i da je u njemu K najmanjih elemenata. U nesortiranom delu niza nadjemo najmanji element i postavimo ga na pocetak nesortiranog dela. - + Sortiranje razmenom (exchange) ------------------------------------------------------------ @@ -95,5 +95,5 @@ veliki, odnosno ako je operacija poredjenja brza od premestanja elemenata u nizu. Sortiranje umetanjem daje najbolje rezultate ukoliko su -elementi niza mali ili je poredjenje komplikovano, tj ako +elementi niza mali ili je poredjenje komplikovano, tj ako je premestanje brze od poredjenja. diff --git a/sortiranje/raspored/Raspored.java b/sortiranje/raspored/Raspored.java index 715825c..fb8e987 100644 --- a/sortiranje/raspored/Raspored.java +++ b/sortiranje/raspored/Raspored.java @@ -7,68 +7,68 @@ import java.util.Comparator; import org.svetovid.io.SvetovidReader; /** - * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe, + * Klasa opisuje jednu stavku u rasporedu - odnosno jedno konkretno predavanje/vezbe, * prestavljeno svojim danom pocetnim i krajnjim satom, salom, predmetom i godinom * studija studenta koji treba da slusaju to predavanje. */ class Stavka implements Comparable { - private String predmet, sala; - private int dan, pocetak, kraj, godina; - - public Stavka(int dan, int pocetak, int kraj, String sala, int godina, - String predmet) { - this.dan = dan; - this.pocetak = pocetak; - this.kraj = kraj; - this.sala = sala; - this.godina = godina; - this.predmet = predmet; - } - - @Override - public String toString() { - return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " (" - + getGodina() + " godina) " + predmet; - } - - @Override - public int compareTo(Stavka that) { - int rez = this.getDan() - that.getDan(); - - if (rez == 0) { - rez = this.getPocetak() - that.getPocetak(); - - if (rez == 0) { - rez = this.getSala().compareTo(that.getSala()); - } - } - return rez; - } - - public int getGodina() { - return godina; - } - - public int getDan() { - return dan; - } - - public int getPocetak() { - return pocetak; - } - - public String getSala() { - return sala; - } - - public int getKraj() { - return kraj; - } - - public String getPredmet() { - return predmet; - } + private String predmet, sala; + private int dan, pocetak, kraj, godina; + + public Stavka(int dan, int pocetak, int kraj, String sala, int godina, + String predmet) { + this.dan = dan; + this.pocetak = pocetak; + this.kraj = kraj; + this.sala = sala; + this.godina = godina; + this.predmet = predmet; + } + + @Override + public String toString() { + return getDan() + " " + getPocetak() + "-" + getKraj() + "\t " + getSala() + " (" + + getGodina() + " godina) " + predmet; + } + + @Override + public int compareTo(Stavka that) { + int rez = this.getDan() - that.getDan(); + + if (rez == 0) { + rez = this.getPocetak() - that.getPocetak(); + + if (rez == 0) { + rez = this.getSala().compareTo(that.getSala()); + } + } + return rez; + } + + public int getGodina() { + return godina; + } + + public int getDan() { + return dan; + } + + public int getPocetak() { + return pocetak; + } + + public String getSala() { + return sala; + } + + public int getKraj() { + return kraj; + } + + public String getPredmet() { + return predmet; + } } /** @@ -76,182 +76,182 @@ class Stavka implements Comparable { */ public class Raspored { - public static void main(String[] args) { - - // Ucitavanje automobila - String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:"); - Stavka[] niz = ucitajStavke(fajl); - - // Ako nismo uspesno ucitali niz, zvrsavamo program - if (niz == null) { - Svetovid.out - .println("Dati fajl nije mogao da se procita! Proverite da li postoji."); - return; - } - - // Stampanje ucitanog niza - Svetovid.out.println("Originalni niz"); - stampajNiz(niz); - - Svetovid.out.println(); - Svetovid.out.println("Odaberite po cemu treba sortirati niz:"); - Svetovid.out.println("1 po imenu predmeta"); - Svetovid.out.println("2 po godini studija, danu i satima"); - Svetovid.out.println("3 po salama, danu i satu"); - Svetovid.out.println("4 po duzini predavanja"); - Svetovid.out.println("5 po danima, satima, salama"); - - int opcija = Svetovid.in.readInt(); - - if (opcija <1 || opcija >5) { - // prekidamo rad - Svetovid.out.println("nije odabrana validna opcija"); - Svetovid.out.println("kraj programa"); - return; - } - - Comparator komp = null; - switch (opcija) { - case 1: - komp = new KomparatorPoPredmetima(); - break; - case 2: - komp = new KomparatorPoGodinama(); - break; - case 3: - komp = new KomparatorPoSalama(); - break; - case 4: - komp = new KomparatorPoDuziniPredavanja(); - break; - case 5: - // ako prosledimo null komparator bice sortirano - // po "prirodnom" uredjenju, tj sa compareTo - komp = null; - break; - } - - // Sortiranje niza po drugom kriterijumu - Svetovid.out.println(); - Svetovid.out.println("Niz sortiran komparatorom"); - sortirajNiz(niz, komp); - stampajNiz(niz); - - } - - public static Stavka[] ucitajStavke(String fajl) { - - // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista - if (!Svetovid.testIn(fajl)) { - return null; - } - - SvetovidReader in = Svetovid.in(fajl); - - // Koliko ima stavki u fajlu? - int br = in.readInt(); - - // Napravimo niz odgovarajuce velicine - Stavka[] rez = new Stavka[br]; - - // Ucitamo stavke - for (int i = 0; i < br; i++) { - //preskacemo prazan red - in.readLine(); - - // Ucitamo podatke - int dan = in.readInt(); - int pocetak = in.readInt(); - int kraj = in.readInt(); - String sala = in.readLine(); - int godina = in.readInt(); - String predmet = in.readLine(); - - Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet); - - rez[i] = red; - } - - // Zatvorimo fajl - Svetovid.closeIn(fajl); - - // Vratimo ucitani niz - return rez; - - } - - public static void stampajNiz(Stavka[] niz) { - for (Stavka a : niz) { - Svetovid.out.println(a); - } - } - - public static void sortirajNiz(Stavka[] niz) { - // Sortiramo niz pomocu ugradjenog metoda - // koristi se compareTo iz klase - Arrays.sort(niz); - } - - public static void sortirajNiz(Stavka[] niz, Comparator komparator) { - // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator - Arrays.sort(niz, komparator); - } - - static class KomparatorPoPredmetima implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getPredmet().compareTo(a2.getPredmet()); - return rezultat; - } - } - - static class KomparatorPoGodinama implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getGodina() - a2.getGodina(); - - if (rezultat == 0) { - rezultat = a1.getDan() - a2.getDan(); - - if (rezultat == 0) { - rezultat = a1.getPocetak() - a2.getPocetak(); - } - } - - // Vratimo izracunati rezultat poredjenja - return rezultat; - } - } - - static class KomparatorPoSalama implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getSala().compareTo(a2.getSala()); - - if (rezultat == 0) { - rezultat = a1.getDan() - a2.getDan(); - - if (rezultat == 0) { - rezultat = a1.getPocetak() - a2.getPocetak(); - } - } - - // Vratimo izracunati rezultat poredjenja - return rezultat; - } - } - - static class KomparatorPoDuziniPredavanja implements Comparator { - - @Override - public int compare(Stavka a1, Stavka a2) { - int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak(); - - // Vratimo izracunati rezultat poredjenja - return rezultat; - } - } + public static void main(String[] args) { + + // Ucitavanje automobila + String fajl = "r.txt";//Svetovid.in.readLine("Unesite ime fajla:"); + Stavka[] niz = ucitajStavke(fajl); + + // Ako nismo uspesno ucitali niz, zvrsavamo program + if (niz == null) { + Svetovid.out + .println("Dati fajl nije mogao da se procita! Proverite da li postoji."); + return; + } + + // Stampanje ucitanog niza + Svetovid.out.println("Originalni niz"); + stampajNiz(niz); + + Svetovid.out.println(); + Svetovid.out.println("Odaberite po cemu treba sortirati niz:"); + Svetovid.out.println("1 po imenu predmeta"); + Svetovid.out.println("2 po godini studija, danu i satima"); + Svetovid.out.println("3 po salama, danu i satu"); + Svetovid.out.println("4 po duzini predavanja"); + Svetovid.out.println("5 po danima, satima, salama"); + + int opcija = Svetovid.in.readInt(); + + if (opcija <1 || opcija >5) { + // prekidamo rad + Svetovid.out.println("nije odabrana validna opcija"); + Svetovid.out.println("kraj programa"); + return; + } + + Comparator komp = null; + switch (opcija) { + case 1: + komp = new KomparatorPoPredmetima(); + break; + case 2: + komp = new KomparatorPoGodinama(); + break; + case 3: + komp = new KomparatorPoSalama(); + break; + case 4: + komp = new KomparatorPoDuziniPredavanja(); + break; + case 5: + // ako prosledimo null komparator bice sortirano + // po "prirodnom" uredjenju, tj sa compareTo + komp = null; + break; + } + + // Sortiranje niza po drugom kriterijumu + Svetovid.out.println(); + Svetovid.out.println("Niz sortiran komparatorom"); + sortirajNiz(niz, komp); + stampajNiz(niz); + + } + + public static Stavka[] ucitajStavke(String fajl) { + + // Ako ne mozemo da otvorimo fajl, ne ucitavamo nista + if (!Svetovid.testIn(fajl)) { + return null; + } + + SvetovidReader in = Svetovid.in(fajl); + + // Koliko ima stavki u fajlu? + int br = in.readInt(); + + // Napravimo niz odgovarajuce velicine + Stavka[] rez = new Stavka[br]; + + // Ucitamo stavke + for (int i = 0; i < br; i++) { + //preskacemo prazan red + in.readLine(); + + // Ucitamo podatke + int dan = in.readInt(); + int pocetak = in.readInt(); + int kraj = in.readInt(); + String sala = in.readLine(); + int godina = in.readInt(); + String predmet = in.readLine(); + + Stavka red = new Stavka(dan, pocetak, kraj, sala, godina, predmet); + + rez[i] = red; + } + + // Zatvorimo fajl + Svetovid.closeIn(fajl); + + // Vratimo ucitani niz + return rez; + + } + + public static void stampajNiz(Stavka[] niz) { + for (Stavka a : niz) { + Svetovid.out.println(a); + } + } + + public static void sortirajNiz(Stavka[] niz) { + // Sortiramo niz pomocu ugradjenog metoda + // koristi se compareTo iz klase + Arrays.sort(niz); + } + + public static void sortirajNiz(Stavka[] niz, Comparator komparator) { + // Sortiramo niz pomocu ugradjenog metoda, a koristeci nas komparator + Arrays.sort(niz, komparator); + } + + static class KomparatorPoPredmetima implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getPredmet().compareTo(a2.getPredmet()); + return rezultat; + } + } + + static class KomparatorPoGodinama implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getGodina() - a2.getGodina(); + + if (rezultat == 0) { + rezultat = a1.getDan() - a2.getDan(); + + if (rezultat == 0) { + rezultat = a1.getPocetak() - a2.getPocetak(); + } + } + + // Vratimo izracunati rezultat poredjenja + return rezultat; + } + } + + static class KomparatorPoSalama implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getSala().compareTo(a2.getSala()); + + if (rezultat == 0) { + rezultat = a1.getDan() - a2.getDan(); + + if (rezultat == 0) { + rezultat = a1.getPocetak() - a2.getPocetak(); + } + } + + // Vratimo izracunati rezultat poredjenja + return rezultat; + } + } + + static class KomparatorPoDuziniPredavanja implements Comparator { + + @Override + public int compare(Stavka a1, Stavka a2) { + int rezultat = a1.getKraj() - a1.getPocetak() - a2.getKraj() + a2.getPocetak(); + + // Vratimo izracunati rezultat poredjenja + return rezultat; + } + } } diff --git a/sortiranje/raspored/r.txt b/sortiranje/raspored/r.txt index 3806254..8b5b919 100644 --- a/sortiranje/raspored/r.txt +++ b/sortiranje/raspored/r.txt @@ -28,7 +28,7 @@ s61 4 Konstrukcija kompajlera -1 +1 19 21 s65