gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Sortiranje, primer automobili sa teorijskih vezbi
authorIvan Pribela <pribela@dmi.uns.ac.rs>
Sat, 31 Oct 2015 19:21:47 +0000 (20:21 +0100)
committerDoni Pracner <quinnuendo@gmail.com>
Sat, 31 Oct 2015 19:21:47 +0000 (20:21 +0100)
sortiranje/automobili/Automobili.java [new file with mode: 0644]
sortiranje/automobili/automobili.txt [new file with mode: 0644]

diff --git a/sortiranje/automobili/Automobili.java b/sortiranje/automobili/Automobili.java
new file mode 100644 (file)
index 0000000..3e60a39
--- /dev/null
@@ -0,0 +1,207 @@
+import java.util.Arrays;\r
+import java.util.Comparator;\r
+import java.util.Objects;\r
+\r
+import org.svetovid.io.SvetovidReader;\r
+\r
+// Tip podataka za predstavljanje automobila\r
+class Automobil implements Comparable<Automobil> {\r
+\r
+    // Osobine koje se ne mogu menjati\r
+    public final String model;\r
+    public final int godiste;\r
+    public final Motor motor;\r
+\r
+    // Osobine koje su slobodno izmenljive\r
+    public String boja;\r
+\r
+    // Osobine koje su zasticene\r
+    private int kilometraza;\r
+\r
+    public Automobil(String model, int godiste, Motor motor, String boja, int kilometraza) {\r
+        this.model = model;\r
+        this.godiste = godiste;\r
+        this.motor = motor;\r
+        this.boja = boja;\r
+        this.kilometraza = kilometraza;\r
+    }\r
+\r
+    public int getKilometraza() {\r
+        return kilometraza;\r
+    }\r
+\r
+    public void vozi(int duzina) {\r
+        this.kilometraza = this.kilometraza + duzina;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+\r
+        // Tekstualna reprezentacija automobila oblika:\r
+        // Zastava 101 (1999) Crvena boja, presao 231000 km\r
+        return model + " (" + godiste + ") " + boja + " boja, presao " + kilometraza + " km";\r
+\r
+    }\r
+\r
+    @Override\r
+    public int compareTo(Automobil that) {\r
+\r
+        // Prvo poredimo naziv modela i ne uzimamo u obzir razlike izmedju velikih i malih slova\r
+        int rezultat = Objects.compare(this.model, that.model, String.CASE_INSENSITIVE_ORDER);\r
+\r
+        // Ako je model isti, poredimo godiste\r
+        if (rezultat == 0) {\r
+            rezultat = this.godiste - that.godiste;\r
+        }\r
+\r
+        // Vracamo rezultat poredjenja\r
+        return rezultat;\r
+\r
+    }\r
+}\r
+\r
+// Tip podataka za predstavljanje motora automobila\r
+class Motor implements Comparable<Motor> {\r
+\r
+    // Osobine koje se ne mogu menjati\r
+    public final String gorivo;\r
+    public final double snaga;\r
+\r
+    public Motor(String gorivo, double snaga) {\r
+        this.gorivo = gorivo;\r
+        this.snaga = snaga;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+\r
+        // Tekstualna reprezentacija motora automobila oblika:\r
+        // Motor [Dizel, 52KW / 69.73 hp]\r
+        return "Motor [" + gorivo + ", " + snaga + " KW / " + snaga * 1.34102 + " hp]";\r
+\r
+    }\r
+\r
+    @Override\r
+    public int compareTo(Motor that) {\r
+\r
+        // Poredimo motore iskljucivo po snazi\r
+        return (int) Math.signum(this.snaga - that.snaga);\r
+\r
+    }\r
+}\r
+\r
+public class Automobili {\r
+\r
+    public static void main(String[] args) {\r
+\r
+        // Ucitavanje automobila\r
+        String fajl = Svetovid.in.readLine("Unesite ime fajla sa automobilima:");\r
+        Automobil[] niz = ucitajAutomobile(fajl);\r
+\r
+        // Ako nismo uspesno ucitali niz, zvrsavamo program\r
+        if (niz == null) {\r
+            Svetovid.out.println("Dati fajl nije mogao da se procita! Proverite da li postoji.");\r
+            return;\r
+        }\r
+\r
+        // Stampanje ucitanog niza\r
+        stampajNiz("Nesortirani niz:", niz);\r
+\r
+        // Sortiranje niza\r
+        sortirajNiz(niz);\r
+        stampajNiz("Sortirani niz:", niz);\r
+\r
+        // Sortiranje niza po drugom kriterijumu\r
+        sortirajNizAlt(niz);\r
+        stampajNiz("Sortirani niz po drugom kriterijumu:", niz);\r
+\r
+    }\r
+\r
+    public static Automobil[] ucitajAutomobile(String fajl) {\r
+\r
+        // Ako ne mozemo da otvorimo fajl, ne ucitavamo automobile\r
+        if (!Svetovid.testIn(fajl)) {\r
+            return null;\r
+        }\r
+\r
+        // Ako mozemo, napravimo precicu 'in' da ne bi morali da\r
+        // svaki put kucamo 'Svetovid.in(fajl)'\r
+        SvetovidReader in = Svetovid.in(fajl);\r
+\r
+        // Koliko ima automobila u fajlu?\r
+        int br = in.readInt();\r
+\r
+        // Napravimo niz odgovarajuce velicine\r
+        Automobil[] rez = new Automobil[br];\r
+\r
+        // Ucitamo automobile\r
+        for (int i = 0; i < br; i++) {\r
+\r
+            // Ucitamo podatke o automobilu\r
+            in.readLine();\r
+            String model = in.readLine();\r
+            int godiste = in.readInt();\r
+            String gorivo = in.readLine();\r
+            double snaga = in.readDouble();\r
+            String boja = in.readLine();\r
+            int kilometraza = in.readInt();\r
+\r
+            // Napravimo automobil\r
+            Motor motor = new Motor(gorivo, snaga);\r
+            Automobil automobil = new Automobil(model, godiste, motor, boja, kilometraza);\r
+\r
+            // Dodamo automobil u niz\r
+            rez[i] = automobil;\r
+\r
+        }\r
+\r
+        // Zatvorimo fajl\r
+        Svetovid.closeIn(fajl);\r
+\r
+        // Vratimo ucitani niz\r
+        return rez;\r
+\r
+    }\r
+\r
+    public static void stampajNiz(String naslov, Automobil[] niz) {\r
+        Svetovid.out.printf("%n%s%n%n", naslov);\r
+        for (Automobil a : niz) {\r
+            Svetovid.out.printf("%20s (%4d) %8s %8.2f KW %8s %8d km %n", a.model, a.godiste, a.motor.gorivo, a.motor.snaga, a.boja, a.getKilometraza());\r
+        }\r
+    }\r
+\r
+    private static void sortirajNiz(Automobil[] niz) {\r
+\r
+        // Sortiramo niz pomocu ugradjenog metoda\r
+        Arrays.sort(niz);\r
+\r
+    }\r
+\r
+    private static class GodisteIKmKomparator implements Comparator<Automobil> {\r
+\r
+        @Override\r
+        public int compare(Automobil a1, Automobil a2) {\r
+\r
+            // Poredimo automobile prvo po godistu\r
+            // Vece godiste je bolje u ovom slucaju\r
+            int rezultat = a2.godiste - a1.godiste;\r
+\r
+            // Ako su godista ista, poredimo kilometrazu\r
+            // Manje predjenih kilometara je bolje\r
+            if (rezultat == 0) {\r
+                rezultat = a1.getKilometraza() - a2.getKilometraza();\r
+            }\r
+\r
+            // Vratimo izracunati rezultat poredjenja\r
+            return rezultat;\r
+\r
+        }\r
+    }\r
+\r
+    private static void sortirajNizAlt(Automobil[] niz) {\r
+\r
+        // Sortiramo niz pomocu ugradjenog metoda\r
+        Arrays.sort(niz, new GodisteIKmKomparator());\r
+\r
+    }\r
+}\r
diff --git a/sortiranje/automobili/automobili.txt b/sortiranje/automobili/automobili.txt
new file mode 100644 (file)
index 0000000..a66230c
--- /dev/null
@@ -0,0 +1,169 @@
+24\r
+\r
+Opel Corsa\r
+2007\r
+Benzin\r
+59\r
+Crvena\r
+57000\r
+\r
+Skoda Octavia\r
+2015\r
+Dizel\r
+43\r
+Siva\r
+102000\r
+\r
+Skoda Superb\r
+2015\r
+Dizel\r
+52\r
+Bordo\r
+105000\r
+\r
+Peugeot 206\r
+2003\r
+Dizel\r
+51\r
+Plava\r
+152000\r
+\r
+Opel Astra\r
+2003\r
+Dizel\r
+55\r
+Siva\r
+122000\r
+\r
+Citroen C4\r
+2011\r
+Dizel\r
+82\r
+Plava\r
+52000\r
+\r
+Renault Twingo\r
+2007\r
+Benzin\r
+43\r
+Bela\r
+120000\r
+\r
+Lancia Lybra\r
+2001\r
+Plin\r
+96\r
+Siva\r
+157000\r
+\r
+Zastava 10\r
+2008\r
+Benzin\r
+44\r
+Crna\r
+68000\r
+\r
+Ford Mondeo\r
+1998\r
+Dizel\r
+66\r
+Crvena\r
+182000\r
+\r
+Opel Astra\r
+2002\r
+Dizel\r
+55\r
+Bela\r
+153000\r
+\r
+Tesla S\r
+2015\r
+Elektro\r
+245\r
+Crna\r
+0\r
+\r
+Tesla X\r
+2015\r
+Elektro\r
+190\r
+Bela\r
+0\r
+\r
+Mazda 6\r
+2006\r
+Benzin\r
+119\r
+Crvena\r
+43000\r
+\r
+Zastava 101\r
+2006\r
+Plin\r
+40\r
+Crvena\r
+179000\r
+\r
+Zastava Koral\r
+2005\r
+Benzin\r
+45\r
+Crna\r
+164000\r
+\r
+Lancia Ypsilon\r
+2003\r
+Dizel\r
+44\r
+Siva\r
+200000\r
+\r
+Lancia Ypsilon\r
+2005\r
+Plin\r
+42\r
+Crvena\r
+132000\r
+\r
+Honda CR-V\r
+2000\r
+Plin\r
+108\r
+Siva\r
+263000\r
+\r
+Smart ForTwo\r
+2005\r
+Dizel\r
+52\r
+Zuta\r
+50000\r
+\r
+Prinz\r
+1995\r
+Benzin\r
+25\r
+Crvena\r
+43000\r
+\r
+Mercedes Benz 190\r
+1992\r
+Plin\r
+90\r
+Siva\r
+325000\r
+\r
+BMW ActiveHybrid 5\r
+2014\r
+Hibrid\r
+225\r
+Siva\r
+23000\r
+\r
+BMW Z4\r
+2013\r
+Benzin\r
+115\r
+Plava\r
+46000\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner