Algorithmen und Programmierung II


SS 2001 Hannes Federrath
Übung 3 Lars Knipping
Abgabe bis zum 24.05.01.

Aufgabe 1 (6 P.)

Wir nehmen an, für die Multiplikation natürlicher Zahlen stehe der Operator* nicht zur Verfügung. Man kann dann zwar naiv durch wiederholtes Addieren multiplizieren, geschickter ist es aber, die Shift-Operatoren << und >> einzusetzen. Dies führt zu einem Algorithmus mit ähnlicher Struktur wie in Aufgabe 2.3.

  1. Entwickle den Algorithmus als Pseudocode.
  2. Implementiere ein entsprechendes Programm in Java, dem die Operanden als Kommandozeilenparameter übergeben werden.

Aufgabe 2 (5 P.)

Eine natürliche Zahl t heißt Teiler einer natürlichen Zahl n, wenn n durch t ohne Rest teilbar ist. Eine natürliche Zahl n heißt vollkommene Zahl, wenn sie gleich der Summe ihrer Teiler ist (1 eingeschlossen, n ausgeschlossen). Die kleinste vollkommene Zahl ist 6 = 1+2+3.

Implementiere und teste ein Java-Programm, das möglichst viele vollkommene Zahlen ausgibt.

Aufgabe 3 (7 P.)

Wieviele rechtwinklige Dreiecke mit ganzzahligen Kathetenlängen (größer Null) gibt es, deren Fläche einen vorgegebenen ganzzahligen Wert nicht übersteigt?

  1. Beschreibe die Überlegungen zur Lösung des Problems und skizziere die Arbeitsweise des vorgeschlagenen Algorithmus.
  2. Verfasse ein entsprechendes Java-Programm, das nach Eingabe der Fläche die Kantenlängen ausgibt, und teste es mit geeignet gewählten Flächen-Werten. Berücksichtige auch ausgefallene Werte.