Algorithmen und Programmierung II


SS 2001 Hannes Federrath
Übung 9 Lars Knipping
Abgabe bis zum 12.07.01.

Aufgabe 1 (10 P.)

  1. In der Vorlesung kam das Beispiel Bruch.java vor:

    class Bruch {
    
      /** Es folgen die Attribute */
      int zaehler;
      int nenner;
    
      /** Konstruktor */
      Bruch(int z, int n) {
        zaehler = z;
        nenner = n;
        kuerze();
      }
    
      /** Hier eine Methodefinition zum Kuerzen */
      void kuerze() {
        // ...
      }
    
      /** Methode zum Hinzuaddieren */
      void add(Bruch r) {
        zaehler = zaehler*r.nenner + r.zaehler*nenner;
        nenner = nenner*r.nenner;
        kuerze();
      }
    
      /** Methode zum Wandeln in einen String */
      public String toString() {
        return "("+zaehler+"/"+nenner+")";
      }
    }
    

    Vervollständige die Methode kuerze. Diese soll die interne Darstellung des Bruchs in eine gekürzte Form bringen. Außerdem soll nach dem Aufruf von kuerze der Nenner immer positiv sein. Weiterhin implementiere analog zu der Methode add-Methode

    /** Dreht das des Bruches Vorzeichen um */
    void neg();
    /** Subtrahiert r von diesem Bruch */
    void sub(Bruch r);
    /** Setzt diesen Bruch auf seinen Kehrwert */
    void kehrwert();
    /** Multipliziert diesen Bruch mit r */
    void mul(Bruch r);
    /** Dividiert diesen Bruch durch r */
    void div(Bruch r);
    

  2. An einigen Stellen kann es zu einer Fehlersituation kommen, die man eigentlich mit einer Exception behandeln sollte. Um für einen Fehler handelt es sich und welches sind die Stellen, an denen er vorkommen kann? (Keine Implementation notwendig.)

Aufgabe 2 (8 P.)

Gegeben sei eine Liste von Objekten:

/** A list for storing objects */
public class List  {

  private Node node = null;

  /** Constructs an empty list */
  public List() {}

  /** adds the given entry to this list */
  public void addElement(Object anObject) {
    node = new Node(anObject, node);
  }
}

class Node {
  /** the value stored in this node */
  protected Object entry;
  /** the next list node */
  protected Node next;

  /** contructs a list node with the given entry and trailing node */
  public Node(Object nodeEntry, Node tail) {
    entry = nodeEntry;
    next = tail;
  }
}

Erweitere diese Liste um die folgenden beiden Methoden:

  /**
   * Gibt eine neue Liste zurueck die die gleichen Elemente enthaelt,
   * in gleicher Reihenfolge wie diese Liste.
   */
  List getCopy();
  /**
   * Gibt eine neue Liste zurueck die die gleichen Elemente enthaelt,
   * aber in umgekehrter Reihenfolge wie diese Liste.
   */
  List getReversedCopy();