Aufgaben Logische Programmierung
Aufgaben Logische Programmierung
Aufgaben Logische Programmierung
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Aufgabe 10 Komplexe Zahlen<br />
Dateiname: komplex.pl<br />
In der Mathematik, Physik und Technik werden oft komplexe Zahlen verwendet. Dabei wird<br />
√ −1 mit i (unter Technikern auch mit j) bezeichnet. Dann hat jede komplexe Zahl die Form<br />
A + Bi, wobei A und B reelle Zahlen sind (der Realteil bzw. der Imaginärteil der komplexen<br />
Zahl). In Prolog kann man eine solche komplexe Zahl darstellen als zusammengesetzten Term,<br />
also als Struktur komplex(A,B). Die Zahl 2 + 3i wird dann z.B. dargestellt durch die Struktur<br />
komplex(2,3). Schreiben Sie ein Prologprogramm zur Addition zweier komplexer Zahlen, zur<br />
Multiplikation zweier komplexer Zahlen und zur Berechnung des Betrags einer komplexen Zahl!<br />
Beispiele:<br />
Addition: (2 + 3i) + (10 + 20i) = 12 + 23i<br />
Multiplikation: (2 + 3i) · (10 + 20i) = −40 + 70i<br />
Betrag: |2 + 3i| ≈ 3, 60555<br />
Ihr Programm sollte sich also so verhalten:<br />
?- add(komplex(2,3),komplex(10,20),Summe).<br />
Summe = komplex(12, 23).<br />
?- mal(komplex(2,3),komplex(10,20),Produkt).<br />
Produkt = komplex(-40, 70).<br />
?- betrag(komplex(2,3),Betrag).<br />
Betrag = 3.60555.<br />
Aufgabe 11 Euklidischer Algorithmus<br />
Dateiname: ggT.pl<br />
Probieren Sie zunächst die folgende Anfrage zur Berechnung des Restes von 100 bei der Division<br />
durch 7 aus:<br />
?- X is 100 mod 7.<br />
Der Euklidische Algorithmus zur Berechnung des größten gemeinsamen Teilers (ggT) zweier<br />
natürlicher Zahlen beruht auf der folgenden Idee:<br />
Nehmen wir an, wir wollen z.B. ggT(18,42) berechnen. Jeder gemeinsame Teiler von 18 und<br />
42 muss auch Teiler von 42 − 18, also von 24 sein und damit gemeinsamer Teiler von 18 und<br />
24. Umgekehrt ist jeder gemeinsame Teiler von 18 und 24 auch gemeinsamer Teiler von 18<br />
und 42. Daher ist ggT(18, 42) = ggT(18, 24). Allgemein ist ggT(a, b) = ggT(a, b − a), wenn<br />
b die größere der beiden Zahlen ist. Man kann das gleiche Argument nun wiederholen und<br />
sagen, ggT(18, 24) = ggT(18, 24 − 18), also ggT(18, 24) = ggT(18, 6). Nun ist 18 die größere der<br />
beiden Zahlen und wir rechnen 18 − 6 = 12 und daher ggT(18, 6) = ggT(12, 6). Allgemein gilt<br />
ggT(a, b) = ggT(a − b, b), wenn a > b ist. Wenn man das so weiter führt, erhält man insgesamt<br />
6