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

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

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

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

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

Написати на језику Java интерактиван програм (с менијем) који читајући потребне податке с главног улаза:

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


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


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

// Telo.java

package tela;

public interface Telo {
  boolean jednako (Telo t);
  double zapremina ();
  String toString ();
}

// Sfera.java

package tela;

public class Sfera implements Telo {
  private double r;

  public Sfera (double rr) { r = rr; }

  public Sfera () { r = 1; }

  public boolean jednako (Telo t) { return t instanceof Sfera && r==((Sfera)t).r; }

  public double zapremina () { return 4 * r*r*r *Math.PI / 3; }

  public String toString () { return "S(" + r + ")"; }
}

// Valjak.java

package tela;

public class Valjak implements Telo {
  private double r, h;

  public Valjak (double rr, double hh) { r = rr; h = hh; }

  public Valjak () { r = h = 1; }

  public boolean jednako (Telo t) {
    return t instanceof Valjak && r == ((Valjak)t).r  && h == ((Valjak)t).h;
  }

  public double zapremina () { return r*r*Math.PI*h; }

  public String toString () { return "V(" + r + "," + h + ")"; }
}

// Kupa.java

package tela;

public class Kupa implements Telo {
  private double r, h;

  public Kupa (double rr, double hh) { r=rr; h=hh; }

  public Kupa () { r = h = 1; }

  public boolean jednako (Telo t) {
    return t instanceof Kupa && r == ((Kupa)t).r && h == ((Kupa)t).h;
  }

  public double zapremina () { return r * r * Math.PI * h / 3; }

  public String toString () { return "K(" + r + "," + h + ")"; }
}

// Piramida.java

package tela;

public class Piramida implements Telo {
  private double a, h;

  public Piramida (double aa, double hh) { a = aa; h = hh; }

  public Piramida () { a = h = 1; }

  public boolean jednako (Telo t) {
    return t instanceof Piramida && a == ((Piramida)t).a && h == ((Piramida)t).h;
  }

  public double zapremina () { return a * a * h / 3;}

  public String toString () { return "P(" + a + "," + h + ")"; }
}

// GNeOdgovara.java

package tela;

public class GNeOdgovara extends Exception {
  public String toString () { return "*** Neodgovarjuca vrsta tela!"; }
}

// Glista.h

package tela;

public class Glista {
  private class Clanak {
    Telo telo; Clanak sled;
    Clanak (Telo t) {
      telo = t;
      if (prvi == null) prvi = this; else posl.sled = this;
      posl = this;
    }
  }

  private Clanak prvi, posl;

  public Glista dodaj (Telo t) throws GNeOdgovara {
    if (prvi==null && !(t instanceof Kupa)                           ||
        prvi!=null && (
          !(posl.telo instanceof Sfera) && !(t instanceof Sfera ) ||
           (posl.telo instanceof Sfera) && !(t instanceof Valjak)
        )
    ) throw new GNeOdgovara ();
    new Clanak (t);
    return this;
  }

  public double zapremina () {
    double v = 0;
    for (Clanak tek=prvi; tek!=null; tek=tek.sled) v += tek.telo.zapremina ();
    return v;
  }

  public String toString () {
    StringBuffer s = new StringBuffer ("G<");
    for(Clanak tek=prvi; tek!=null; tek=tek.sled){
      s.append (tek.telo);
      if (tek.sled != null) s.append ('|');
    }
    return s.append ('>').toString ();
  }
}

// Test.java

import tela.*;

public class Test {
  private static class Greska extends Exception {
    private String poruka;
    public Greska (String p) {poruka = "*** " + p;}
    public String toString () { return poruka; }
  }

  private static Telo citaj () throws Greska {
    System.out.print ("Vrsta (K,S,V,P)? ");
    switch (Citaj.Char ()) {
      case 'K': case 'k':
        System.out.print ("r,h? ");
        return new Kupa (Citaj.Double(), Citaj.Double());
      case 'S': case 's':
        System.out.print ("r?   ");
        return new Sfera   (Citaj.Double());
      case 'V': case 'v':
        System.out.print ("r,h? ");
        return new Valjak (Citaj.Double(), Citaj.Double());
      case 'P': case 'p':
        System.out.print ("a,h? ");
        return new Piramida(Citaj.Double(), Citaj.Double());
      default:
        throw new Greska ("Nepoznata vrsta tela!");
    }
  }

  public static void main (String[] varg) {
    Glista gl = new Glista ();
    radi: while (true) {
      try {
        System.out.print (
          "\n1. Nova glista\n"      +
            "2. Dodaj clanak\n"     +
            "3. Ispisi glistu\n"    +
            "4. Ispisi zapreminu\n" +
            "0. Kraj rada\n"        +
            "Vas izbor? "
        );
        switch (Citaj.Char ()) {
          case '1': gl = new Glista (); break;
          case '2': gl.dodaj (citaj ()); break;
          case '3': System.out.println (gl); break;
          case '4': System.out.println ("V=" + gl.zapremina());break;
          case '0': break radi;
          default: throw new Greska ("Nedozvoljen izbor!");
        }
      } catch (Exception g) { System.out.println(g); }
    }
  }
}
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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