Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Feld (auch Array, Feld- oder Array-Variable) steht für eine nummerierte Folge von Werten (Elemente),

Ähnliche Präsentationen


Präsentation zum Thema: "PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Feld (auch Array, Feld- oder Array-Variable) steht für eine nummerierte Folge von Werten (Elemente),"—  Präsentation transkript:

1 PKJ 2005/1 Stefan Dissmann 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 PKJ 2005/2 Stefan Dissmann 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 PKJ 2005/3 Stefan Dissmann 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? zähler = zähler+1; } Unzureichend:- würde nur für Vielfache von 2 streichen - Kommentar muss in JAVA ausformuliert werden

4 PKJ 2005/4 Stefan Dissmann 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 PKJ 2005/5 Stefan Dissmann 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 PKJ 2005/6 Stefan Dissmann 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 PKJ 2005/7 Stefan Dissmann 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 PKJ 2005/8 Stefan Dissmann 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 PKJ 2005/9 Stefan Dissmann 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 PKJ 2005/10 Stefan Dissmann 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 PKJ 2005/11 Stefan Dissmann 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 PKJ 2005/12 Stefan Dissmann 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 PKJ 2005/13 Stefan Dissmann Erinnerung – Sieb des Eratosthenes Index … Wert Wähle 0 und setze ab 1 (=0+1) alle Vielfachen von zahlen[0] auf 0. Index … Wert Wähle 1 und setze ab 2 (=1+1) alle Vielfachen von zahlen[1] auf 0. Index … 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. Index … Wert

14 PKJ 2005/14 Stefan Dissmann 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 PKJ 2005/15 Stefan Dissmann 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 >= w 2. 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 PKJ 2005/16 Stefan Dissmann 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 PKJ 2005/17 Stefan Dissmann Verbesserung der Ablage Komprimieren der Primzahlen auf den Anfang des Feldes Index … Wert Index … Wert Index … Wert Index … Wert Hausaufgabe!

18 PKJ 2005/18 Stefan Dissmann Zusammenfassung If-Anweisung %-Operator Vergleichsoperatoren ==, !=, =, Umgang mit Feldern Programm Sieb des Eratosthenes mit Analyse


Herunterladen ppt "PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Feld (auch Array, Feld- oder Array-Variable) steht für eine nummerierte Folge von Werten (Elemente),"

Ähnliche Präsentationen


Google-Anzeigen