Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Zusammenfassung der Vorwoche

Ähnliche Präsentationen


Präsentation zum Thema: "Zusammenfassung der Vorwoche"—  Präsentation transkript:

1 Zusammenfassung der Vorwoche
Feld (auch Array, Feld- oder Array-Variable) steht für eine nummerierte Folge von Werten (Elemente), der sich im Programmablauf ändern können. Das Feld besitzen einen Typ, der für die einzelnen Elemente gilt. Der Zugang zu Elementen erfolgt über ihren Index. Konzepte für Felder: Vereinbarung, Initialisierung von Größe und Werten, Zuweisung von Größe und Werten, Abfrage von Größe und Werten

2 Primzahlbestimmung – Sieb des Eratosthenes
Vorgehen „Sieb des Eratosthenes“: (1) Schreibe alle natürlichen Zahlen (>1) bis zur Obergrenze als Liste auf. (2) Wähle die erste Zahl z aus. (3) Streiche alle (echten) Vielfachen von z aus der Liste aller Zahlen. (4) Falls das Ende der Liste noch nicht erreicht ist, wähle die nächste nicht gestrichene Zahl als z und beginne bei (3). (5) Sonst ist die Aufgabe erfüllt. Beispiel: Schreibe Zahlen auf (1) Wähle z = 2 und streiche Vielfache ((2) und (3)) Wähle z = 3 und streiche Vielfache ((4) und (3))

3 Sieb des Eratosthenes Vorstufe zur Primzahlenbestimmung:
int obergrenze = 64; int[] zahlen = new int[obergrenze-1]; int zähler = 0; while (zähler < zahlen.length) { zahlen[zähler] = zähler+2; zähler = zähler+1; } int testwert = zahlen[0]; // das ist die 2! zähler = 1; while (zähler < zahlen.length) { // zahlen[zähler] teilbar durch testwert? } Unzureichend: - würde nur für Vielfache von 2 streichen - Kommentar muss in JAVA ausformuliert werden

4 Teilbarkeit prüfen int testwert = zahlen[0]; // das ist die 2! zähler = 1; while (zähler < zahlen.length) { // zahlen[zähler] teilbar durch testwert? zähler = zähler+1; } Kommentar übersetzen in (1) wenn zahlen[zähler]/testwert keinen Rest ergibt (2) dann ganzzahlig teilbar, also zahlen[zähler] „löschen“, d.h. zahlen[zähler]=0;

5 Teilbarkeit prüfen in JAVA
int testwert = zahlen[0]; zähler = 1; while (zähler < zahlen.length) { if(zahlen[zähler] % testwert == 0) { zahlen[zähler] = 0; } zähler = zähler+1; Neu: if-Anweisung % Operator == Operator

6 If-Anweisung Syntaktischer Aufbau: if(Bedingung) Anweisung;
Semantik (Bedeutung): Führe Anweisung aus, wenn Bedingung wahr ergibt und sonst tue nichts und gehe weiter. Bedingung muss wahr (true) oder falsch (false) liefern.

7 Modulo-Operator % Liefert den Rest einer ganzzahliger Division!
Beispiel: 257 : 4 = 64 Rest 1 in JAVA: int ergebnis = 257 / 4; int rest = 257 % 4; System.out.println(ergebnis + “ Rest “ + rest); Anmerkung: % lässt sich umständlich ersetzen durch / 4 * 4 (vgl. Übungen)

8 Vergleichsoperator ==
Vergleicht alle Arten von Zahlen Vergleicht auch String-Literale “…“ Liefert als Ergebnis einen Wahrheitswert: true, false Typ heißt: boolean Test auf Ungleichheit: != Weitere Vergleichsoperatoren für Zahlen: >, <, >=, <=

9 Vergleichsoperator ==
Aber: == vergleicht nicht Felder, d.h. dort Vergleich der Elemente notwendig: boolean gleich = true; int[] f1 = {1,2,3}; int[] f2 = {2,3,4}; gleich = f1.length == f2.length; if (gleich) { int z = 0; while (gleich && z < f1.length) { gleich = f1[z] == f2[z]; z = z+1; }

10 Bestandsaufnahme – Sieb des Eratosthenes
1. Anlegen eines Feldes mit 63 Zahlen: int obergrenze = 64; int[] zahlen = new int[obergrenze-1]; int zähler = 0; while (zähler < zahlen.length) { zahlen[zähler] = zähler+2; zähler = zähler+1; }

11 Bestandsaufnahme – Sieb des Eratosthenes
2. Löschen der Vielfachen von 2 int testwert = zahlen[0]; zähler = 1; while (zähler < zahlen.length) { if(zahlen[zähler] % testwert == 0) { zahlen[zähler] = 0; } zähler = zähler+1;

12 Bestandsaufnahme – Sieb des Eratosthenes
3. Ausgabe des Feldes zähler = 0; while (zähler < zahlen.length) { System.out.print(zahlen[zähler] + “ “); zähler = zähler+1; }

13 Erinnerung – Sieb des Eratosthenes
Index … Wert Wähle 0 und setze ab 1 (=0+1) alle Vielfachen von zahlen[0]auf 0. Wert Wähle 1 und setze ab 2 (=1+1) alle Vielfachen von zahlen[1]auf 0. Wert Wähle 2 und tue nichts, da zahlen[2]==0. Wähle 3 und setze ab 4 (=3+1) alle Vielfachen von zahlen[3]auf 0. Wert

14 Sieb des Eratosthenes Löschen aller Vielfachen
int testzähler = 0; while (testzähler < zahlen.length) { if (zahlen[testzähler] != 0) { zähler = testzähler + 1; while (zähler < zahlen.length) { if (zahlen[zähler] % zahlen[testzähler] == 0) { zahlen[zähler] = 0; } zähler = zähler+1; testzähler = testzähler + 1;

15 Diskussion des Abbruchkriteriums
Äußere Schleife: int testzähler = 0; while (testzähler < zahlen.length) { } Frage: Sind wirklich length-viele Durchläufe notwendig! Antwort: Nein, da für den zu testenden Wert w alle Kombinationen mit Zahlen kleiner als w schon gelöscht sind. Daher ist das kleinste zu löschende Vielfache von >= w2. Also reicht Durchlauf bis zu ((Wurzel aus dem letzten Wert) +1) -2 (Können wir aber noch nicht!) Und es reicht: zähler = testzähler * testzähler -2

16 Verbesserung der Ausgabe
Unterdrücken der Ausgabe von 0: zähler = 0; while (zähler < zahlen.length) { if (zahlen[zähler] != 0) { System.out.print(zahlen[zähler] + “ “); } zähler = zähler+1;

17 Verbesserung der Ablage
Komprimieren der Primzahlen auf den Anfang des Feldes Index … Wert Wert Wert Wert Hausaufgabe!

18 Zusammenfassung If-Anweisung %-Operator Vergleichsoperatoren
==, !=, <=, >=, <, > Umgang mit Feldern Programm Sieb des Eratosthenes mit Analyse


Herunterladen ppt "Zusammenfassung der Vorwoche"

Ähnliche Präsentationen


Google-Anzeigen