/*
 * "Grundkurs Programmieren in Java - Band 1 (4. Auflage, 2007)"
 * 2001-2007, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 10.16 (Version 4.0)
 * (c) 2001-2007 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 * Alle Klassen in einer Datei (Glasboden, TrinkGlas, TesteTrinkGlas)
 *
 */

class Glasboden {

  private double radius;

  public Glasboden (double r) {
    radius = r;
  }
  public void verkleinern (double x) {
    // verkleinert den Radius des Glasboden-Objekts um x
    radius  = radius - x;
  }
  public double flaeche () {
    // liefert die Flaeche des Glasboden-Objekts
    return Math.PI * radius * radius;
  }
  public double umfang () {
    // liefert den Umfang der Glasboden-Objekts
    return 2 * Math.PI * radius;
  }
  public String toString() {
    // liefert die String-Darstellung des Glasboden-Objekts
    return "B(r=" + radius + ")";
  }

}

/* ****************************************************************** */

class TrinkGlas {

  private Glasboden boden;
  private double    fuellStand;

  public TrinkGlas (double fuellStand, Glasboden boden) {
    this.fuellStand = fuellStand;
    this.boden      = boden;
  }

  public void verkleinern (double x) {
    boden.verkleinern(x);
    fuellStand = fuellStand - x;
  }

  public double flaeche() {
    return boden.umfang() * fuellStand + boden.flaeche();
  }

  public double fuellMenge() {
    return boden.flaeche() * fuellStand;
  }

  public String toString() {
    return "G(b=" + boden + ",s=" + fuellStand + ")";
  }

}

/* ****************************************************************** */

public class TesteTrinkGlas {

  public static void main(String[] args) {

    Glasboden b = new Glasboden(100);
    TrinkGlas g = new TrinkGlas(50,b);

    while ( g.flaeche() < g.fuellMenge()/8 ) {
      g.verkleinern(5);
      System.out.println( "Das Trinkglas " + g                   );
      System.out.println( "hat die Innenflaeche " + g.flaeche()  );
      System.out.println( "und die Fuellmenge " + g.fuellMenge() );
    }
  }

}
