Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање на језику Java - колоквијуми
Први колоквијум
Друга група
3. 12. 2005

Задатак | Напомене | Решење

Поставка задатка (решење | садржај)

Саставити на језику Java следећи пакет класа:

Грешке пријављивати изузецима. У класама за изузетке предвидети састављање текста поруке.

Саставити на језику Java класу са главним програмом који:

  • направи празан стек капацитета који прочита са главног улаза;
  • извршава команде:
  • испише на главном излазу стредњу величину свих премета који су у току рада узимани са стека.

    На располагању стоји готова класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података (датотека \\Xs200−2\Nastava\ProgJava\Citaj.java).


    Напомене (садржај)


    Решење задатка (поставка | садржај)

    // GPredmeti.java
    
    package predmeti;
    
    public abstract class GPredmeti extends Exception {
      private String por;
      protected GPredmeti (String p) { por = p; }
      public String toString () { return "*** " + por; }
    }
    
    // GPun.java
    
    package predmeti;
    
    public class GPun extends GPredmeti {
      public GPun () { super ("Stek je pun!"); }
    }
    
    // GPrazan.java
    
    package predmeti;
    
    public class GPrazan extends GPredmeti {
      public GPrazan () { super ("Stek je prazan!"); }
    }
    
    // Predmet.java
    
    package predmeti;
    
    public abstract class Predmet implements Cloneable {
      public abstract double vel ();
      public Object clone () {
        try { return super.clone (); }
          catch (CloneNotSupportedException g) { return null; }
      }
    }
    
    // Kupa.java
    
    package predmeti;
    
    public class Kupa extends Predmet {
      private double r, h;
      public Kupa (double rr,double hh) { r = rr; h = hh; }
      public Kupa () { r = h = 1; }
      public double vel () { return r * r * Math.PI * h / 3; }
      public String toString () { return "K(" + r + "," + h + ")"; }
    }
    
    // Stek.java
    
    package predmeti;
    
    public class Stek implements Cloneable {
      private Predmet[] niz;
      private int vrh;
      public Stek (int k) { niz = new Predmet [k]; }
      public Stek () { this (3); }
      public int vel () { return vrh; }
      public Stek stavi (Predmet p) throws GPun {
        if (vrh == niz.length) throw new GPun ();
        niz[vrh++] = p;
        return this;
      }
      public Predmet uzmi () throws GPrazan {
        if (vrh == 0) throw new GPrazan ();
        return niz[--vrh];
      }
      public Object clone () {
        Stek s = null;
        try {
          s = (Stek) super.clone ();
          s.niz = new Predmet [niz.length];
          for (int i=0; i<vrh; s.niz[i]=(Predmet)niz[i++].clone());
        } catch (CloneNotSupportedException g) {}
        return s;
      }
      public String toString () {
        String s = "";
        for (int i=vrh-1; i>=0; s+=niz[i--]+" ");
        return s;
      }
    }
    
    // PredmetiT.java
    
    import predmeti.*;
    
    public class PredmetiT {
      public static void main (String[] varg) {
        System.out.print ("Kapacitet? ");
        Stek s = new Stek (Citaj.Int ());
        double sr = 0; int n = 0;
        radi: while (true) {
          try {
            System.out.print ("Izbor (S-stavi, U-uzmi, Z-zavrsi)? ");
            switch (Citaj.Char ()) {
              case 'S': case 's':
                System.out.print ("r,h? ");
                s.stavi (new Kupa (Citaj.Double(), Citaj.Double()));
                break;
              case 'U': case 'u':
                { Predmet p = s.uzmi ();
                  System.out.println ("Predmet: " + p);
                  sr += p.vel (); n++;
                  break;
                }
              case 'Z': case 'z': break radi;
              default:
                System.out.println ("*** Neispravan izbor!");
            }
          } catch (GPredmeti g) { System.out.println (g); }
        }
        if (n > 0) sr /= n;
        System.out.println ("Srednje velicina: " + sr);
      }
    }
    
    Kapacitet? 3 Izbor (S-stavi, U-uzmi, Z-zavrsi)? s r,h? 3 5 Izbor (S-stavi, U-uzmi, Z-zavrsi)? s r,h? 2 6 Izbor (S-stavi, U-uzmi, Z-zavrsi)? u Predmet: K(2.0,6.0) Izbor (S-stavi, U-uzmi, Z-zavrsi)? s r,h? 5 7 Izbor (S-stavi, U-uzmi, Z-zavrsi)? s r,h? 6 7 Izbor (S-stavi, U-uzmi, Z-zavrsi)? s r,h? 1 2 *** Stek je pun! Izbor (S-stavi, U-uzmi, Z-zavrsi)? u Predmet: K(6.0,7.0) Izbor (S-stavi, U-uzmi, Z-zavrsi)? u Predmet: K(5.0,7.0) Izbor (S-stavi, U-uzmi, Z-zavrsi)? u Predmet: K(3.0,5.0) Izbor (S-stavi, U-uzmi, Z-zavrsi)? u *** Stek je prazan! Izbor (S-stavi, U-uzmi, Z-zavrsi)? z Srednje velicina: 129.8524963483781
    (садржај)
             
    Аутор: Ласло Краус
    Е-пошта: kraus@etf.rs

    Copyright © 2010, Laslo Kraus
    Последња ревизија: 8.9.2010.