Advertisement
pseudocreator

SPA2, k1, v2, Biblioteka

Nov 4th, 2015
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.75 KB | None | 0 0
  1. /*
  2. * Insertion sort vrsi manji broj poredjenja u odnosu na selection;
  3. * Ukoliko su swapovi/razmene dva elementa "skupe" potrebno koristiti selection;
  4. */
  5.  
  6. import org.svetovid.io.SvetovidReader;
  7. import org.svetovid.io.SvetovidWriter;
  8.  
  9. import java.util.Arrays;
  10.  
  11. import java.util.Comparator;
  12.  
  13.  
  14. public class Biblioteka{
  15.  
  16.   public static void main(String[] args){
  17.    
  18.     Svetovid.out.println("Start programa.");
  19.    
  20.     //ucitaj ime ulaznog/izlaznog fajla
  21.     String fileIn = Svetovid.in.readLine("Unesite ime ulaznog fajla: ");
  22.     String fileOut = Svetovid.in.readLine("Unesite ime izlaznog fajla: ");
  23.    
  24.     //ucitavanje knjige iz fajla
  25.     Knjiga[] biblioteka = ucitajKnjige(fileIn);
  26.    
  27.     if (biblioteka == null) {
  28.       Svetovid.err.println("Nepostojeci fajl.");
  29.       return;
  30.     } else {
  31.       Svetovid.out.println("Uspesno citanje podataka iz fajla.\n");
  32.     }
  33.    
  34.     //stampanje svih knjiga pre sortiranja
  35.     stampajKnjige(biblioteka);
  36.     Svetovid.out.println("----------------");
  37.    
  38.     // Pitamo korisnika za vrstu sorta
  39.     Svetovid.out.println("Opcija 1: ugradjeni sort");
  40.     Svetovid.out.println("Opcija 2: insertion sort");
  41.     Svetovid.out.println("Opcija 3: selection sort");
  42.     Svetovid.out.print("Unesite opciju 1-3:");
  43.     int opcija1 = Svetovid.in.readInt();
  44.     if(!(opcija1 >= 1 && opcija1 <= 3)){
  45.       Svetovid.err.println("Odabrana je nepostojeca opcija");
  46.       return;
  47.     }
  48.    
  49.     // Pitamo korisnika za kriterijum sortiranja
  50.     Svetovid.out.println("Opcija 1: sort sa rastucim id knjige");
  51.     Svetovid.out.println("Opcija 2: sort sa opadajucim id knjige");
  52.     Svetovid.out.println("Opcija 3: sort po naslovu");
  53.     Svetovid.out.println("Opcija 4: sort po autoru, a zatim po naslovu");
  54.     int opcija2 = Svetovid.in.readInt();
  55.    
  56.     //zavrsiti kostur
  57.     /*
  58.     switch(opcija2){
  59.       case 1:
  60.         if(opcija1 == 1){
  61.          
  62.         } else if(opcija1 == 2){
  63.            
  64.         } else {
  65.      
  66.         }
  67.         break;
  68.       case 2:
  69.       case 3:
  70.       case 4:
  71.     }
  72.     */
  73.    
  74.     //stampaj knjige nakon sortiranja
  75.     stampajKnjige(biblioteka);
  76.    
  77.     //snimi u fajl
  78.     if(snimiKnjige(biblioteka, fileOut)){
  79.       Svetovid.out.println("Uspesno snimljeni podaci u zadati fajl");
  80.     } else {
  81.       Svetovid.err.println("Greska pri snimanju podataka u zadati fajl");
  82.     }
  83.   }
  84.  
  85.   private static Knjiga[] ucitajKnjige(String f){
  86.  
  87.     if(!Svetovid.testIn(f)){
  88.       return null;
  89.     }
  90.    
  91.     SvetovidReader reader = Svetovid.in(f);
  92.    
  93.     int num = reader.readInt();
  94.     Knjiga[] knjige = new Knjiga[num];
  95.    
  96.     for(int i = 0; i < num; i++){
  97.    
  98.       int id = reader.readInt();
  99.       String naslov = reader.readLine();
  100.       String autor = reader.readLine();
  101.      
  102.       knjige[i] = new Knjiga(id, naslov, autor);
  103.      
  104.     }
  105.    
  106.     reader.close();
  107.     return knjige;
  108.    
  109.   }
  110.  
  111.   public static void stampajKnjige(Knjiga[] niz){
  112.     for(Knjiga k: niz){
  113.       Svetovid.out.println(k.toString());
  114.     }
  115.   }
  116.  
  117.   private static boolean snimiKnjige(Knjiga[] nizKnjiga, String f){
  118.    
  119.     if(!Svetovid.testOut(f)){
  120.       return false;
  121.     }
  122.    
  123.     SvetovidWriter writer = Svetovid.out(f);
  124.    
  125.     writer.println(nizKnjiga.length);
  126.    
  127.     for(Knjiga k: nizKnjiga){
  128.       writer.println(k.id);
  129.       writer.println(k.naslov);
  130.       writer.println(k.autor); //k.getAutor(); u slucaju private
  131.     }
  132.    
  133.     writer.close();
  134.     return true;
  135.   }
  136.  
  137.   //ugradjeno sortiranje
  138.   public static void sortiraj(Knjiga[] niz){
  139.     Arrays.sort(niz);
  140.   }
  141.  
  142.   public static void sortirajKnjige(Knjiga[] niz, Comparator<Knjiga> c){
  143.    Arrays.sort(niz, c);
  144.   }
  145.  
  146.   //insertion sort
  147.   public static void insertionSort(Comparable[] niz, Comparator comparator){
  148.     for(int i = 0; i < niz.length; i++){
  149.      
  150.       Comparable temp = niz[i];
  151.      
  152.       int j = i - 1;
  153.      
  154.       while(j >= 0 && comparator.compare(niz[j], temp) > 0){
  155.         niz[j + 1] = niz[j];
  156.         j--;
  157.       }
  158.      
  159.       niz[j + 1] = temp;
  160.      
  161.     }
  162.   }
  163.    
  164.   //selection sort
  165.   public static void selectionSort(Comparable[] niz, Comparator comparator) {
  166.    
  167.     for (int i = niz.length - 1; i >= 1; i--) {
  168.    
  169.       int maxIndex = 0;
  170.       for (int j = 1; j <= i; j++) {
  171.         if(comparator.compare(niz[maxIndex], niz[j]) <= 0){
  172.           maxIndex = j;
  173.         }
  174.     }
  175.      
  176.       if(maxIndex != i){
  177.         Comparable temp = niz[i];
  178.         niz[i] = niz[maxIndex];
  179.         niz[maxIndex] = temp;
  180.       }
  181.  
  182.     }
  183.   }
  184.  
  185. }
  186.  
  187. class Knjiga implements Comparable<Knjiga>{
  188.  
  189.   public final int id;
  190.   public final String naslov;
  191.   public final String autor;
  192.  
  193.   public Knjiga(int id, String naslov, String autor){
  194.     this.id = id;
  195.     this.naslov = naslov;
  196.     this.autor = autor;
  197.   }
  198.  
  199.   @Override
  200.   public String toString(){
  201.     return id + " " + naslov + " " + autor;
  202.   }
  203.  
  204.   @Override
  205.   public int compareTo(Knjiga that){
  206.     return this.id - that.id;
  207.   }
  208. }
  209.  
  210. // Komparator koji koristi prirodni poredak, tj. samo poziva compareTo()
  211. class KomparatorPoPrirodnomUredjenju implements Comparator<Knjiga>{
  212.  
  213.   @Override
  214.   public int compare(Knjiga k1, Knjiga k2){
  215.     return k1.compareTo(k2);
  216.   }
  217.  
  218. }
  219.  
  220. class InverzniKomparator implements Comparator<Knjiga>{
  221.  
  222.   private Comparator<Knjiga> originalni;
  223.  
  224.   public InverzniKomparator(Comparator<Knjiga> originalni){
  225.     this.originalni = originalni;
  226.   }
  227.  
  228.   @Override
  229.   public int compare(Knjiga k1, Knjiga k2){
  230.     return -originalni.compare(k1, k2);
  231.   }
  232.  
  233. }
  234.  
  235. // Komparator koji prvo poredi pomocu primarnog komparatora a potom po sekundarnom
  236. class KompozitniKomparator implements Comparator<Knjiga>{
  237.  
  238.   private Comparator<Knjiga> primarni;
  239.   private Comparator<Knjiga> sekundarni;
  240.  
  241.   public KompozitniKomparator(Comparator<Knjiga> primarni, Comparator<Knjiga> sekundarni){
  242.     this.primarni = primarni;
  243.     this.sekundarni = sekundarni;
  244.   }
  245.  
  246.   @Override
  247.   public int compare(Knjiga k1, Knjiga k2){
  248.     int res = primarni.compare(k1, k2);
  249.     if(res == 0){
  250.       res = sekundarni.compare(k1, k2);
  251.     }
  252.    
  253.     return res;
  254.   }
  255. }
  256.  
  257. class KomparatorPoAutoru implements Comparator<Knjiga> {
  258.  
  259.     @Override
  260.     public int compare(Knjiga k1, Knjiga k2) {
  261.       return k1.autor.compareTo(k2.autor);
  262.     }
  263.    
  264. }
  265.  
  266. class KomparatorPoNaslovu implements Comparator<Knjiga> {
  267.  
  268.     @Override
  269.     public int compare(Knjiga k1, Knjiga k2) {
  270.       return k1.naslov.compareTo(k2.naslov);
  271.     }
  272. }
  273.  
  274. // Komparator koji poredi po autoru, a za iste autore, po naslovu
  275. class KomparatorPoAutoruIPotomNaslovu extends KompozitniKomparator {
  276.  
  277.   public KomparatorPoAutoruIPotomNaslovu(){
  278.     super(new KomparatorPoAutoru(), new KomparatorPoNaslovu());
  279.   }
  280.  
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement