Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

PRJ 2007/1 Stefan Dissmann Problemstellung Berechne die Summe der Quadrate aller natürlichen Zahlen bis zu einer vorgegebenen Zahl (bspw. 100)! Oder mathematisch:

Ähnliche Präsentationen


Präsentation zum Thema: "PRJ 2007/1 Stefan Dissmann Problemstellung Berechne die Summe der Quadrate aller natürlichen Zahlen bis zu einer vorgegebenen Zahl (bspw. 100)! Oder mathematisch:"—  Präsentation transkript:

1 PRJ 2007/1 Stefan Dissmann Problemstellung Berechne die Summe der Quadrate aller natürlichen Zahlen bis zu einer vorgegebenen Zahl (bspw. 100)! Oder mathematisch: Berechne z=1 100 z 2 = z=1 100 z * z = 1*1 + 2*2 + 3*3 + 4*4 + … + 100*100 =…((((1*1) + 2*2) + 3*3) + 4*4) + … + 100*100)

2 PRJ 2007/2 Stefan Dissmann Konzeption der Lösung Aufgabe: Berechne …((((1*1) + 2*2) + 3*3) + 4*4) + … + 100*100) 1. Algorithmus einer Lösung: (1) fange mit z = 1 an; (2) berechne das Quadrat von z; (3) bestimme die neue Zwischensumme: alte Zwischensumme + berechnetes Quadrat (4) erhöhe z um 1; (5) prüfe ob z > 100 ist, sonst gehe wieder zu (2) (6) gib die Zwischensumme aus

3 PRJ 2007/3 Stefan Dissmann Konzeption der Lösung 2. Algorithmus einer Lösung: (1) fange mit z = 1 an; (neu) prüfe ob z <= 100 ist, sonst gehe zu (6) (vergleiche mit 5) (2) berechne das Quadrat von z; (3) bestimme die neue Zwischensumme alte Zwischensumme + berechnetes Quadrat (4) erhöhe z um 1; (neu) gehe zu (2) (6) gib die Zwischensumme aus

4 PRJ 2007/4 Stefan Dissmann Lösung mit JAVA public class summeQuads { public static void main(String[] args) { int z = 1; // (1) int summe = 0; while(z <= 100) { // (neu) summe = summe + z * z; // (2) und (3) z = z + 1; // (4) } // (neu) System.out.println ("Summe Quadratzahlen: " + summe); //(6) } Ausgabe: Summe Quadratzahlen:

5 PRJ 2007/5 Stefan Dissmann While-Anweisung Syntaktischer Aufbau: while(Bedingung) Anweisung; Semantik (Bedeutung): Wiederhole Anweisung solange, bis Bedingung falsch ergibt. Bedingungen müssen wahr (true) oder falsch (false) liefern.

6 PRJ 2007/6 Stefan Dissmann Alternative Lösung mit JAVA public class summeQuadsMitFor { public static void main(String[] args) { int summe = 0; for(int z=1; z<=100; z=z+1) { // (1, neu, 4) summe = summe + z * z; // (2) und (3) } // (neu) System.out.println ("Summe Quadratzahlen: " + summe); //(6) } Ausgabe: Summe Quadratzahlen:

7 PRJ 2007/7 Stefan Dissmann for-Schleife for (int z=1; z<=100; z=z+1) { summe = summe + z * z; } 3 Bestandteile Initialisierung: Wird genau ein Mal und am Anfang ausgeführt! (auch mit Vereinbarung, auch mehrere Variable) Bedingung (wie bei while-Schleife) Anweisungsteil: Wird immer am Ende eines Schleifendurchlaufs ausgeführt! (auch mit mehreren Anweisungen)

8 PRJ 2007/8 Stefan 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

9 PRJ 2007/9 Stefan 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!

10 PRJ 2007/10 Stefan 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]; Initialisiert die Größe des Feldes auf 5 Elemente. int[] g = {17,2,4,122,0,-3} Initialisiert die Größe des Feldes auf 6 Elemente.

11 PRJ 2007/11 Stefan Dissmann Zuweisung an felder Zuweisung ist möglich für Größe des Feldes int[] f; f = new int[7]; wie bei Initialisierung Einzelne Elemente des Feldes f[0] = 22; erstes Element auf den Wert 22 f[1] = -3; zweites Element auf den Wert -3 int elem = 3; f[elem] = 0; viertes Element auf den Wert 0 f[elem+1] = 34; fünftes Element auf den Wert 34

12 PRJ 2007/12 Stefan 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];

13 PRJ 2007/13 Stefan 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 Feldes int[] 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.

14 PRJ 2007/14 Stefan Dissmann Beispiele mit Feldern Aufgabe: 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

15 PRJ 2007/15 Stefan 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; } zähler = 0; while (zähler < f.length) { System.out.print(f[zähler] + " "); zähler = zähler+1; }

16 PRJ 2007/16 Stefan Dissmann Vergleichsoperator == == 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; }

17 PRJ 2007/17 Stefan Dissmann for-Schleife Wiederkehrendes Problem: Durchlaufen eines Feldes zähler = 0; while (zähler < f.length) { System.out.print(f[zähler] + ); zähler = zähler+1; } Einfacher mit for-Schleife: for (zähler=0; zähler

18 PRJ 2007/18 Stefan Dissmann for-Schleife Und seit JAVA 5 auch möglich! Statt for (z=0; zähler

19 PRJ 2007/19 Stefan Dissmann Zuweisungsoperatoren Kurzformen für häufige Zuweisungen stattkurz summe = summe + zähler; summe += zähler; produkt = produkt * zähler; produkt *= zähler; zähler = zähler + 1;zähler++; oder ++zähler; aber: zähler++ und ++zähler liefern unterschiedliche Ergebnisse

20 PRJ 2007/20 Stefan Dissmann Zuweisungsoperatoren Beispiel: int i=1, j=1; System.out.println(1 + i++); druckt 2 System.out.println(1 + ++j); druckt 3 System.out.println(i+ +j); druckt 2 2 i++ erhöht i um 1 und liefert den Wert von i vor der Erhöhung ++i erhöht i um 1 und liefert den Wert von i nach der Erhöhung


Herunterladen ppt "PRJ 2007/1 Stefan Dissmann Problemstellung Berechne die Summe der Quadrate aller natürlichen Zahlen bis zu einer vorgegebenen Zahl (bspw. 100)! Oder mathematisch:"

Ähnliche Präsentationen


Google-Anzeigen