gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Stabla, dodat zadatak sa vezbi
authorDoni Pracner <quinnuendo@gmail.com>
Thu, 22 Dec 2016 11:33:39 +0000 (12:33 +0100)
committerDoni Pracner <quinnuendo@gmail.com>
Thu, 22 Dec 2016 11:33:39 +0000 (12:33 +0100)
Stabla/konkretnoStablo/BinarnoStablo.java [new file with mode: 0644]
Stabla/konkretnoStablo/_zadatak-stabla1.txt [new file with mode: 0644]

diff --git a/Stabla/konkretnoStablo/BinarnoStablo.java b/Stabla/konkretnoStablo/BinarnoStablo.java
new file mode 100644 (file)
index 0000000..230bc74
--- /dev/null
@@ -0,0 +1,72 @@
+// Konkretno stablo koje sadrzi Osobe\r
+class StabloO {\r
+    \r
+    // jedan cvor u stablu sa jednom osobom i pokazivacima\r
+    // na "decu"\r
+    private static class Cvor {\r
+        Osoba osoba;\r
+        Cvor levo;\r
+        Cvor desno;\r
+    }\r
+    \r
+    // koren celog stabla\r
+    private Cvor koren;\r
+    \r
+    // Vraca ukupan broj osoba u stablu\r
+    public int brojOsoba() {\r
+        return brojOsoba(koren);\r
+    }\r
+\r
+    protected static int brojOsoba(Cvor cvor) {\r
+        if (cvor == null) {\r
+            return 0;\r
+        }\r
+        int broj = 1;\r
+        broj = broj + brojOsoba(cvor.levo);\r
+        broj = broj + brojOsoba(cvor.desno);\r
+        return broj;\r
+    }\r
+    \r
+    public int brojNivoa() {\r
+        // Spremimo argumente i pozovemo rekurzivni metod\r
+        return brojNivoa(koren);\r
+    }\r
+\r
+    // Metod koji zapravo resava dati problem\r
+    protected static int brojNivoa(Cvor cvor) {\r
+        if (cvor == null) {\r
+            return 0;\r
+        }\r
+        int brojNivoaLevog = brojNivoa(cvor.levo);\r
+        int brojNivoaDesnog = brojNivoa(cvor.desno);\r
+        return Math.max(brojNivoaLevog, brojNivoaDesnog) + 1;\r
+    }\r
+\r
+}\r
+\r
+// Glavna klasa\r
+public class BinarnoStablo {\r
+\r
+    // Glavni program\r
+    public static void main(String[] args) {\r
+\r
+        // Napravimo pomocni objekat za ucitavanje i ispisivanje\r
+        TreeIO<StabloO> io = new TreeIO<>(StabloO.class);\r
+\r
+        // Procitamo stablo iz fajla\r
+        StabloO stablo = io.read(Svetovid.in("Osobe.txt"));\r
+\r
+        // Ispisemo ucitano stablo\r
+        io.print(Svetovid.out, stablo);\r
+\r
+        // ilustracije poziva metoda\r
+        \r
+        int brojElemenata = stablo.brojOsoba();\r
+        Svetovid.out.println("Broj elemenata:", brojElemenata);\r
+        \r
+        int brojNivoa = stablo.brojNivoa();\r
+        Svetovid.out.println("Broj nivoa:", brojNivoa);\r
+\r
+        // dodati ovde pozive implementiranih metoda\r
+    }\r
+}\r
diff --git a/Stabla/konkretnoStablo/_zadatak-stabla1.txt b/Stabla/konkretnoStablo/_zadatak-stabla1.txt
new file mode 100644 (file)
index 0000000..d1354e2
--- /dev/null
@@ -0,0 +1,149 @@
+************************************************************\r
+         Zadatak - binarna stabla\r
+************************************************************\r
+\r
+Data je klasa BinarnoStablo sa glavnim programom koji\r
+ucitava jedno stablo i poziva neke od operacija nad njim.\r
+U istom fajlu je i klasa `StabloO` koja predstavlja binarno\r
+stablo osoba. Klasa `Osoba` je takodje data implmentirana.\r
+\r
+U okviru klase `StabloO` implementirati operacije navedene u\r
+nastavku i ilustrovati njihov rad pozivanjem iz glavnog\r
+programa u `BinarnoStablo`. Svaki metod je potrebno\r
+implementirati kao javan metod klase `StabloO`, a cesto je\r
+potrebno napravitit i pomocni zasticen staticki metod istog\r
+imena. Pogledati primer implementacije metoda\r
+brojElemenata() i brojNivoa().\r
+\r
+Sve promene treba raditi u fajlu BinarnoStablo.java u kome\r
+su pomenute klase. Ostali fajlovi su klasa `Osoba` koja\r
+predstavlja element koji ubacujemo u konkretnom programu,\r
+kao i pomocne klase koje sluze za ucitavanje stabla iz fajla\r
+u urednom formatu. Ucitavanje stabla na ovaj nacin nije\r
+neophodno uciti, a dato je tacno kako treba da se ucita.\r
+\r
+\r
+Metodi\r
+======\r
+\r
+public boolean jePrazno()\r
+-------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca true ako je stablo prazno, false ako nije.\r
+\r
+public boolean postojiElement(Osoba element)\r
+----------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca true ako se prosledjeni elemnt nalazi u\r
+stablu, false inace.\r
+\r
+Prilikom pretrage stabla koristiti metod equals().\r
+\r
+\r
+public void stampajPreorder()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente preorder nacinom obilaska.\r
+\r
+public void stampajInOrder()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente inorder nacinom obilaska.\r
+\r
+public void stampajPostOrder()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente postorder nacinom obilaska.\r
+\r
+public void stampajListove()\r
+----------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemente koji se nalaze u listovima.\r
+\r
+List je cvor koji nema ni levog ni desnog potomka.\r
+\r
+private Cvor pronadji(Osoba element)\r
+------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi dati element i vraca stablo sa korenom\r
+u tom elementu.\r
+\r
+Ako element ne postoji u stablu, vratiti null.\r
+\r
+Ovaj metod koristiti kao pomocni za sledeci.\r
+\r
+\r
+public void stampajSveIspod(Osoba element)\r
+--------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+stampa sve elemnte koji su direktni ili indirektni\r
+potomci datog.\r
+\r
+\r
+public boolean ubaci(Osoba roditelj, Osoba potomak, boolean levo)\r
+---------------------------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi element dat u prvom argumentu (roditelj)\r
+i kao njegovog poromka ubacuje element dat u drugom\r
+argumentu (potomak). Ako je treci argument (levo)\r
+true tada se element ubacuje kao levi potomak, a\r
+ako je false, kao desni.\r
+\r
+Ako se na zeljenom mestu vec nalazi nesto, vratiti false\r
+i ne ubacivati element, inace vratiti true pri uspesnom\r
+ubacivanju.\r
+\r
+\r
+public Osoba roditeljOd(Osoba potomak)\r
+--------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi i vraca roditelja datog elementa. Ako\r
+je prosledjeni element koren celog stabla\r
+vratiti null.\r
+\r
+\r
+public Osoba min(Comparator<Osoba> komparator)\r
+public Osoba max(Comparator<Osoba> komparator)\r
+--------------------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+pronalazi i vraca najmanji, odnosno najveci, element\r
+stabla.\r
+\r
+Prilikom pretrage koristiti prosledjeni komparator.\r
+\r
+Za testiranje je dat `KomparatorPoPlati`, napraviti\r
+druge po potrebi.\r
+\r
+\r
+public StabloO kopija()\r
+-------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca kopiju stabla.\r
+\r
+Potrebno je iskopirati i sve cvorove kako izmene\r
+jednog stabla ne bi uticale na drugo.\r
+\r
+\r
+public StabloO obrnuto()\r
+--------------------------\r
+\r
+U klasi StabloO, implementirati metod koji\r
+vraca novo stablo nastalo obrtanjem originalng.\r
+Stablo se obrce tako sto se zamene mesta levih\r
+i desnih podstabala koja se pre toga takogje\r
+obrnu.\r
+\r
+Posle poziva metoda originalno stablo mora ostati\r
+nepromenjeno.\r
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner