Algorithmen und Programmierung II


SS 2001 Hannes Federrath
Übung 1 Lars Knipping
Abgabe bis zum 10.05.01.

Aufgabe 1 (5 P.)

Gegeben seien folgende Java-Deklarationen:

  1. int x;
  2. int y;
  3. char z;
  4. long w;

Welche der folgenden Java-Ausdrücke ist unter den o.g. Deklarationen korrekt? Wenn der Ausdruck nicht korrekt ist, was ist der Fehler und gibt es eine Typdeklaration, mit der er korrekt ist?

  1. w = x / (y+1)
  2. i = 25L
  3. x = x+1
  4. 17 % 3
  5. y += 1
  6. 2 * (x+y) - (z/73)
  7. x = y = z = 0
  8. x = y + (z +=w)
  9. 6++
  10. (x+y)++

Aufgabe 2 (5 P.)

Folgendes Java-Programm berechnet die Fakultät einer ganzen Zahl:

/** Berechnet fuer n>=0 die Fakultaet n! von n */ 
public class Factorial { 

  public static int getFactorialOf(int n) { 
    int fact = 1; 
    for (int i=1; i<=n; ++i) {  // Schleife  
      fact *= i;                // Abkuerzung fuer: fact = fact * i; 
    } 
    return fact; 
  } 

  public static void main(String[] argv) { 
    if (argv.length == 1) {  // Pruefe ob die Kommandozeile genau ein Argument hat 
      int n      = Integer.parseInt(argv[0]);  // Kommandozeilenargument einlesen 
      int result = getFactorialOf(n);          // Fakultaet berechnen
      System.out.println(result);              // Ergebnis ausgeben 
    } else { 
       System.out.println("usage> java Factorial <n>"); 
    } 
  } 
} 

Ändere die Methode getFactorialOf(int n) derart, daß die Fakultät rekursiv berechnet wird. Hinweis: Man spricht von Rekursion wenn sich eine Methode selbst aufruft. Der rekursive Algorithmus zur Berechnung der Fakultät beruht darauf, daß n! gleich n*(n-1)! ist.

Aufgabe 3 (7 P.)

  1. Entwickele ein Java-Programm, das die Summe
    1 - 1/2 + 1/3 - 1/4 + ... + 1/9999 - 1/10000
    auf die folgenden vier Arten berechnet:
    1. Addition der Terme strikt von links nach rechts,
    2. Addition der Terme strikt von rechts nach links,
    3. getrennte Addition der positiven und negativen Terme, von links nach rechts, und
    4. getrennte Addition der positiven und negativen Terme, von rechts nach links.
  2. Führe das Programm aus. Warum ergeben die Berechnungsmethoden unterschiedliche Resultate? Welche ist vorzuziehen und warum?