pkj 2005/1 stefan dissmann zusammenfassung der vorwoche variable stehen für (einen) wert, der sich...

16
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable • stehen für (einen) Wert, • der sich im Programmablauf ändern kann. Variablen besitzen einen Typ. Konzepte für Variablen: • Vereinbarung, • Initialisierung, • Zuweisung, • Wertabfrage

Upload: walburg-stitz

Post on 05-Apr-2015

106 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/1Stefan Dissmann

Zusammenfassung der Vorwoche

Variable• stehen für (einen) Wert,• der sich im Programmablauf ändern kann.

Variablen besitzen einen Typ.

Konzepte für Variablen:• Vereinbarung,• Initialisierung,• Zuweisung,• Wertabfrage

Page 2: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/2Stefan Dissmann

Zusammenfassung der Vorwoche

While-Schleife• wiederholt eine Anweisung oder• einen Block von Anweisungen• aufgrund einer Bedingung.

Syntax:while(Bedingung) while(Bedingung)

{ Anweisung; Anweisungen

}

Bedingungliefert bei ihrer Auswertung true oder false.

Page 3: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/3Stefan Dissmann

Ein neues Problem:Bestimmung von Primzahlen

Aufgabe:Bestimme alle Primzahlen bis zu einer vorgegebenen Obergrenze, beispielsweise bis 64.

Erinnerung:Primzahlen sind natürliche Zahlen und immer nur durch 1 und sich selbst ganzzahlig teilbar.

Beispiele:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, …

Lösungsansatz:Primzahlbestimmung durch hinreichend viele Teilbarkeitsprüfungen.

Page 4: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/4Stefan 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)

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Wähle z = 2 und streiche Vielfache ((2) und (3))

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 262 3 5 7 9 11 13 15 17 19 21 23 25

Wähle z = 3 und streiche Vielfache ((4) und (3))2 3 5 7 9 11 13 15 17 19 21 23 25

Page 5: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/5Stefan 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.

Bestandsaufnahme:• Natürliche Zahlen auflisten (1): while-Schleife• Häufiges Wiederholen von (3) und (4): while-Schleife• Vielfache über Division ermitteln (3): wird schon gehen• Liste von Zahlen aufbewahren: ? (einfache Variable ungünstig)

Page 6: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/6Stefan Dissmann

Liste der natürlichen Zahlen (>1)

public class listeVonZahlen {

public static void main(String[] args) {

int obergrenze = 20;

int zähler = 2;

while (zähler <= obergrenze) {

System.out.print(zähler + " ");

zähler = zähler + 1;

}

}

}

Ausgabe:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Page 7: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/7Stefan Dissmann

Aufbewahren vieler Zahlen

Benötigt wird:Eine Variable, die für viele Werte des gleichen Typs

steht.

Passendes Konstrukt in JAVA:Variable, die Feld (Array) von Werten speichert

Nun für Felder betrachten:• Vereinbarung,• Initialisierung,• Zuweisung,• Wertabfrage

Page 8: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/8Stefan Dissmann

Vereinbarung von Feldern

Erinnerung:int i; vereinbart einen Bezeichner i,

der für genau eine Zahl stehen kann.

Felder:int f[]; vereinbart einen Bezeichner f,

der eine Anzahl von Zahlen beinhaltet. Neue Sonderzeichen: [] Die Anzahl gehört nicht zur

Vereinbarung!

Auch möglich:

int[] feld1, feld2; entspricht: int feld1[], feld2[];

int feld1[], zahl, feld2[];

Page 9: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/9Stefan Dissmann

Initialisierung von Feldern

Initialisierung eines Feldes umfasst:• Festlegen der Anzahl der Elemente (Größe des Feldes)• Festlegen der Werte für die Elemente

Beide Varianten sind möglich:• int[] f = new int[5];

Initialisieriert die Größe des Feldes auf 5 Elemente.Neues Schlüsselwort: newNeue Verwendung von […]

• int[] g = {17,2,4,122,0,-3}Initialisieriert die Größe des Feldes auf 6 Elemente.Belegt diese 6 Elemente mit den vorgegebenen Zahlen.Neue Verwendung von { … }

Page 10: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/10Stefan Dissmann

Zuweisung an felder

Zuweisung ist möglich für

• Größe des Feldesint[] f;f = new int[7]; wie bei Initialisierung

• Einzelne Elemente des Feldesf[0] = 22; erstes Element erhält

den Wert 22f[1] = -3; zweites Element erhält

den Wert -3int elem = 4;f[elem] = 0; viertes Element erhält

den Wert 0f[elem+1] = 34; fünftes Element erhält

den Wert 34

Page 11: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/11Stefan Dissmann

Zuweisung an Felder

Anmerkungen:• Die Nummer eines Elements heißt Index.

f[1] bezeichnet das zweite Element von f mit dem Index 1.• Der Index muss immer zwischen 0 und der Größe-1 des Feldes liegen.

int[] g={3}; g[1]=5; führt zu Fehler!• Neue Verwendung von […]: ermöglicht die Zuweisung an Elemente.

Vorsicht: • Erneutes Zuweisen der Größe führt zu Verlust der alten Elemente.• Zuweisung von ganzen Feldern führt zu (noch) unerklärbaren

Seiteneffekten.int[] f, g={3}; f=g; Nicht verwenden!

Statt dessen elementweises Kopieren durch f[0]=g[0];

Page 12: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/12Stefan Dissmann

Wertabfrage bei Feldern

Abfrage ist möglich für• Größe des Feldes

über length-Abfrage:int[] f = {5,6,7,8};System.out.println(f.length); druckt 4

aus!

• Werte der einzelnen Elemente des Feldesint[] f = {5,6,7,8};System.out.println(f[1]); druckt 6 aus!System.out.println(f[1]+f[3]); druckt 14 aus!

Noch eine Verwendung von […]: ermöglicht die Abfrage der Elemente.

Page 13: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/13Stefan Dissmann

Beispiele mit Feldern

Aufgabe war:Lege Liste mit den natürlichen Zahlen>1 bis zu einer vorgegebenen Obergrenze an!

Erste Lösung mit Initialisierung eines int-Feldes:int[] f={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

•Viel Schreibarbeit bei großer Grenze•Wenig flexibel, wenn Grenze geändert wird

•unbrauchbar

Page 14: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/14Stefan Dissmann

Beispiele mit Feldern

Zweite Lösung mit Zuweisung in einer Schleife:int obergrenze = 64;int[] f = new int[obergrenze-1];int zähler = 0;while (zähler < f.length) {

f[zähler] = zähler+2;

zähler = zähler+1;

}

Und die zugehörige Testausgabe:zähler = ;while (zähler < f.length) {

System.out.print(f[zähler] + " ");

zähler = zähler+1;

}

Page 15: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/15Stefan 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: - nur für Vielfache von 2- Kommentar muss in JAVA ausformuliert werden

Page 16: PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen

PKJ 2005/16Stefan Dissmann

Zusammenfassung

•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 Elemente 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