Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut."—  Präsentation transkript:

1 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz

2 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 2 Lösung Übung 3 Algorithmen mit Gedächtnis Verbunddatentypen Übungsbesprechung Übung 5 Überblick

3 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 3 Algorithmen mit Gedächtnis Motivation Bei vielen Aufgabenstellungen muß man sich Zustände über mehrere Aufrufe von Algorithmen hinweg merken (Gedächtnis). Bisher verwendeten wir ausschließlich lokale Variable, die beim Verlassen eines Algorithmus zerstört werden. addValue(  int v) { int sum = 0 sum = sum + v write("Aktuelle Summe = "); write(sum) writeln }

4 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 4 Globale Variable oder statisch lokale Variable Zur Realisierung eines "Gedächtnisses", das sich Zustände über mehrere Aufrufe einer Algorithmus hinweg merkt, können Variable entweder als globale Variable oder als statische lokale Variable deklariert werden. Global: int sum = 0 //auch für weitere Algorithmen sichtbar addValue(  int v) { sum = sum + v write("Aktuelle Summe = "); write(sum) writeln } Local: addValue(  int v) { static int sum = 0 // nur in addValue sichtbar sum = sum + v write("Aktuelle Summe = "); write(sum) writeln }

5 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 5 Beispiel: Schadstoffstatistik Schreiben Sie einen Algorithmus mit Gedächtnis, der als Eingangsparameter einen aktuellen Meßwert für einen Luftschadstoff erwartet und bei jedem 10. Aufruf den aktuellen Mittelwert für alle bisherigen Meßwerte und das bisher aufgetretene Maximum ausdruckt. Verwendung: addSample(0.123) addSample(0.23) addSample(0.421) addSample(0.232).... //nach 10. Aufruf: Maximum SO = 7.21 Durchschnitt SO = 0.562 //nach 20....

6 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 6 Beispiel: Schadstoffstatistik addSample(  float val) { static float max = 0 static float avg = 0 static int numOfVal = 0 if (val > max) { max = val } avg = (avg * numOfVal + val) / (numOfVal + 1) numOfVal ++ if (numOfVal % 10 == 0) { write("Maximaler Wert SO2 = "); write(max); writeLn() write("Durschnitt SO2 = "); write(avg); writeLn() }

7 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 7 Motivation: Bisher wurden nur primitive (einfache) Datentypen sowie Felder dieser behandelt. Das Arbeiten mit nur primitiven Datentypen ist nur für sehr kleine Problemlösungen ausreichend, da man schnell die Übersicht verliert, welche Variablen logisch zusammen gehören. Beispiel: Verwalten einer Person mit Vor- und Zuname? char[1:n] first, last Beispiel: Verwalten zweier Personen mit Vor- und Zuname? char[1:n] first1, last1, first2, last2 Beispiel: Verwalten von m Personen mit Vor- und Zuname? char [1:m, 1:n] firstArray, lastArray Idee: Verbund, also zusammengesetzter Datentyp Person Benutzerdefinierte Datentypen (Verbunde)

8 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 8 Benutzerdefinierte Datentypen (Verbunde) Typdeklaration: type Person { char[1:n] first, last } type Point { int x,y } Variablen: Person a // Person a sind unmittelbar definiert, Speicherplatz ist reserviert a.first = "Max"// Zuweisung sofort möglich a.last = "Mustermann" Point p1; p1.x = 5 p1.y = 8 Variablendeklaration, Zuweisung, Vergleich, et.c. ähnlich primitiver Variable

9 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 9 Benutzerdefinierte Datentypen (Verbunde) Verwendung als Eingangsparameter: f(  Person p) { p.firstName = "nix" } Gesamte Person p wird kopiert. Änderungen haben somit keine Außenwirksamkeit. Verwendung als Übergangsparameter: f(  Person p) { Person a a.firstName = "franz" a.lastName = "Huber" p = a } // keine Kopie, direkte Manipulation von p, außenwirksam

10 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 10 Felder von Verbunden Variablendeklaration: type Person { char[1:n] first, last } Person [n] pers //Array ist deklariert und definiert //Index 0..n-1 Person [1:n] pers2 //Array ist deklariert und definiert //Index 1..n Verwendung: pers[1].first = "Max" pers[1].last = "Mustermann" pers[2] = pers[1] //Alle Werte werden kopiert. if(pers[1] == pers[2]) // true, Wertvergleich pers2 = pers //pers2 muß gleich groß oder größer sein. // die einzelnen Datenwerte werden kopiert pers == pers2 (bedeutet: alle Werte aller Datenobjekte sind gleich -> Felder gleich groß)

11 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 11 Zusammengesetzte Verbunde Typdeklaration: type Point { int x,y } type Rectangle { Point p int width, height } Verwendung: Rectangle r1, r2; // r ist mit allen inneren Verbunden definiert r1.p.x = 5 r1.p.y = 10 r1.width = 100 r1.height = 50 r2 = r1 // kopiert alle (inkl. innerer) Werte if (r2 == r1) // alle Werte werden verglichen -> true

12 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 12 Verbunde mit Algorithmen Motivation: Verbunde können auch Algorithmen enthalten, die logisch zum Verbund gehören. Die Algorithmen greifen meist auf Variablen des Verbunds im Sinne von Gedächtnisvariablen zu. Beim Aufruf des Algorithmus muß eine Variable eines Typs vorhanden sein, der den Algorithmus enthält. z.b. Point p; Rectangle r; r.contains(p) Typdeklaration: type Point { int x,y } type Rectangle { Point p int width, height boolean contains(Point other) { return (other.x >= p.x && other.y >= p.y //p kann implizit verwendet werden && other.x <= p.x + width && other.y <= p.y + height) }.... }

13 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 13 Verbunde mit Algorithmen Verwendung: Rectangle r1, r2 Point p1 p1.x = 5 p1.y = 5 r1.p = p1 r1.width = 10 r1.height = 5 r2.p = r1.p r2.width = 15 r2.height = 3 p1.x = 10 p1.y = 4 if (r1.contains(p1) && r2.contains(p1)) {...} //


Herunterladen ppt "Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut."

Ähnliche Präsentationen


Google-Anzeigen