Übungen zu Einführung in die Informatik II

Werbung
Technische Universität München
Fakultät für Informatik
Prof. Dr. M. Broy
SS 2002
Übungsblatt 1
17. April 2002
Übungen zu Einführung in die Informatik II
Aufgabe 1
Funktionale Programmierung
Hinweis: Die in dieser Aufgabe zu formulierenden Rechenvorschriften können in Gofer oder in
Vorlesungsnotation angegeben werden!
Die Rechenstruktur SEQ sei wie in der Vorlesung definiert!
a) Es bezeichne ls eine Sequenz von Sequenzen der Sorte m, d.h. ls ist von der Sorte seq seq
m. Die Funktion addFirst fügt ein Element x der Sorte m am Anfang jedes Elements von
ls an. Formulieren Sie unter Verwendung applikativer Programmiertechniken eine Rechenvorschrift, die die Funktion addFirst implementiert!
Gegeben sei eine Sequenz xs von paarweise verschiedenen Elementen der Sorte m. Gesucht ist
eine Sequenz der Sorte seq seq m, die alle Untersequenzen von xs enthält (Bemerkung: Eine
Untersequenz entsteht aus einer Sequenz xs durch Streichen beliebig vieler Elemente).
b) Formulieren Sie kurz die Grundidee Ihres Algorithmus!
c) Geben Sie unter Verwendung applikativer Programmiertechniken eine Rechenvorschrift an,
die die Sequenz aller Untersequenzen von xs berechnet! (Hinweis: Der Einsatz der Funktion
addFirst aus Teilaufgabe a) ist bei der Lösung dieser Aufgabe hilfreich!)
Aufgabe 2
Zuweisungsorientierte Programmierung
Jede natürliche Zahl n 2 ist entweder selbst eine Primzahl oder lässt sich als Produkt von Primzahlen schreiben; d. h. in Primfaktoren zerlegen, z. B. 120 2 2 2 3 5. In dieser Aufgabe ist
ein zuweisungsorientiertes Programm (Vorlesungsnotation oder Pascal)
proc primfak = (nat n)
zu entwickeln, das eine natürliche Zahl n 2 in Primfaktoren zerlegt und das Ergebnis auf dem
Bildschirm ausgibt; z. B. primfak(120) soll die Ausgabe 2 2 2 3 5 liefern.
Hinweis: Sie können folgende Hilfsfunktionen und -prozeduren verwenden:
fct mod = (nat n, nat k) nat Rest der ganzzahligen Division n durch k
fct div = (nat n, nat k) nat
ganzzahlige Division n durch k
proc writeNat = (nat n)
Ausgabe einer Zahl auf dem Bildschirm
a) Implementieren Sie zuweisungsorientiert eine Prozedur test, die mit zwei natürlichen Zah: i n j aufruft.
len i j 2 parametrisiert ist und primfak für alle n
–2–
b) Implementieren Sie eine Funktion fct kleinsterTeiler = (nat n) nat, die für eine natürliche
Zahl n die kleinste natürliche Zahl d 1 ermittelt, die n ohne Rest teilt.
c) Implementieren Sie die Prozedur primfak.
Aufgabe 3
Zusicherungskalkül für Schleifen
Gegeben sei die Pascal-Funktion summe(n : Integer):Integer, zur Berechnung der Summe
der ersten n natürlichen Zahlen.
procedure summe (n : Integer):Integer;
var i, s :Integer;
begin
{n >= 0}
i := 0;
s := 0;
while i<n do
begin
i := i + 1;
s := s + i;
end;
summe := s;
end;
{summe = n*(n+1)/2}
Das Programm ist bereits teilweise annotiert. Fügen Sie die fehlenden Annotationen korrekt ein.
Aufgabe 4 (P) Enumerierte Sorten und Tupelsorten
a) Definieren Sie jeweils in Pascal:
Eine Sorte für die Monate und Tage eines Kalenderjahres
Eine Tupelsorte für das Datum
Eine Tupelsorte die den Vornamen, den Nachnamen und das Geburtsdatum einer Person enthält
Ein Feld, in das 100 Personen eingetragen werden können
b) Geben Sie ein Pascalprogramm zur Eingabe und Ausgabe der Personendaten an!
Herunterladen