© 2006 Pohlig Bestimmung des ggT zweier Zahlen Bestimmung nach Definition – Implementierung Euklidscher Algorithmus – Implementierung Aufwand – Effizienz von Algorithmen Erweiterung der Klasse Mathematik die Methode ggt(int a, int b) Informatikkurs mit Java 1 © 2006 Pohlig Übung Nr. 1 (Aufgabenblatt) Lösung: Variante 1 Konsolen-Eingabe der Zahlen, deren ggT bestimmt werden soll. import info1.*; public class GgT1{ public static void main(String[] args){ Teilt i a und b int ggT = 1; restlos, so kommt i System.out.print("erste Zahl: "); als ggT in Frage. Der int a = Console.in.readInt(); letzte i-Wert ist der System.out.print("zweite Zahl: "); gesuchte ggT. Er wird am Schluss int b = Console.in.readInt(); for (int i = 1; i <= Math.min(a,b); i++){ausgegeben. if ((a%i==0)&&(b%i==0)) ggT = i; Prüft mit der 1 } beginnend, ob i die System.out.println(ggT); Zahlen a und b restlos } teilt. Ende bei der } Kleineren der beiden. Informatikkurs mit Java 2 © 2006 Pohlig Test Geben Sie für a den Wert 162019746 und für B den Wert 115720390 ein Es dauert eine geraume Zeit, bis das Ergebnis erscheint. Wir bauen in unser Programm eine Stoppuhr ein, die die Zeit stoppt, die zur Durchführung des Algorithmus‘ benötigt wird. Wir benutzen dazu ein Objekt der Klasse StoppUhr. Benutze deren Methoden starten() und stoppen(). Wenn das Objekt eineStoppuhr heißt. Lässt sich gestoppte Zeit mit System.out.println(eineStoppUhr) auf dem Bildschirm ausgeben. Informatikkurs mit Java 3 © 2006 Pohlig Variante 2 StoppUhr eineStoppUhr = new StoppUhr(); … eineStoppUhr.starten(); for (int i = 1; i <= Math.min(a,b); i++){ if ((a%i==0)&&(b%i==0)) ggT = i; } eineStoppUhr.stoppen(); System.out.println(ggT); System.out.println(eineStoppUhr); Starten und Stoppen der StoppUhr Ausgabe der gestoppten Zeit Deklarartion und Erzeugen eines StoppUhr-Objekts Informatikkurs mit Java 4 © 2006 Pohlig Effizienz prüfen Informatikkurs mit Java 5 © 2006 Pohlig Euklid Lebensdaten: ca. 365 – ca. 300 Möglicherweise verbirgt sich hinter dem Namen Euklid mehrere Personen. 13 Bücher zu den Elementen zusammengefasst. Axiomatischer Aufbau der Mathematik. Formulierung von Algorithmen und deren Beweise Informatikkurs mit Java 6 © 2006 Pohlig Raffael (1483-1520: Die Schule von Athen, Vatikanische Museen) Raffael Euklid unterrichtet seine Schüler. Als Vorlage für Euklid diente Raffel das Portrait von Bramante, einem der Bauleiter des Peterdomes in Rom Informatikkurs mit Java 7 © 2006 Pohlig Der verbesserte Euklidsche Algorithmus Gesucht ggT(792,75) =3 792 = 10 . 75 + 42 75 = 1 . 42 + 33 42 = 1 . 33 + 9 33 = 3 . 9 +6 9 = 1 .6 +3 6= 2.3 +0 eineStoppUhr.starten(); int r; do{ r = a%b; a = b; b = r; } while(b!=0); a b r Informatikkurs mit Java 8 © 2006 Pohlig Effizienz prüfen Informatikkurs mit Java 9 © 2006 Pohlig Effiziente Methode in die Klasse Mathematik übernehmen public static int ggT(int a, int b){ int ggT = 1; int r; do{ r= a%b;info1.*; import a= b; public class GgTTest { b = r; } while(b!=0); public static void main (String[] args) { return a; System.out.print("1. Zahl: "); int a = Console.in.readInt(); } System.out.print("2. Zahl: "); int b = Console.in.readInt(); System.out.println("der ggT("+a+","+b+") ist: "+ Mathematik.ggT(a,b)); } } Informatikkurs mit Java 10