eindeutig interpretierbar, ausführbar Algorithmus: statisch endlich 0..n Eingangsobjekte 0..n Ausgangs- oder Ergebnisobjekte 0..n lokale Hilfsobjekte Programme Programme sind Algorithmen, die in einer Programmiersprache abgefaßt sind, damit sie auf einem Rechner ausgeführt werden können Prozessor: Mensch oder Maschine Algorithmen vs. Programme">

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 Übungsmodul 1 Dr. W. Narzt u. Dr. A.Stritzinger Institut.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 1 Dr. W. Narzt u. Dr. A.Stritzinger Institut."—  Präsentation transkript:

1 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 1 Dr. W. Narzt u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz

2 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 2 Algorithmen allgemein Darstellungsarten Algorithmenbeschreibungssprache Jana Beispiele Übungsvorbesprechung Übung 1 Überblick

3 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 3 Algorithmen Problemlösungsverfahren, die sich aus einzelnen "Aktionen" zusammensetzen. Jede Aktion hat einen Effekt Jede Aktion -> eindeutig interpretierbar, ausführbar Algorithmus: statisch endlich 0..n Eingangsobjekte 0..n Ausgangs- oder Ergebnisobjekte 0..n lokale Hilfsobjekte Programme Programme sind Algorithmen, die in einer Programmiersprache abgefaßt sind, damit sie auf einem Rechner ausgeführt werden können Prozessor: Mensch oder Maschine Algorithmen vs. Programme

4 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 4 Jana JANA Übersicht Algorithmen (Prozeduren) Kommentare Operatoren Ablaufsteuerung (Sequenz, Selektion, Iteration) if / else if / else, switch; while, repeat, for 4 Elementare Datentypen boolean, int, float, char Felder (inkl. Zeichenketten) boolean[1:n], char[], float[-3:3], int[1:n; 1:m] und weitere Sprachkonstrukte

5 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 5 JANA (2) Algorithmen (Prozeduren/Funktionen) Zuweisung: i = 1 // sprich i wird/becomes 1 Gleichheitsprüfung: i == 1 (Ergebnis: boolean) (auch: !=,, >=, <=, *, /, %, +, -, !, &&, ||, usw.) i = search( values, 3) // Funktionsaufruf replace( values, 1, 4) // Prozeduraufruf // + Anweisungen zur Ablaufsteuerung Operatoren und Anweisungen int search ( int[1:n] values, int x) { …} replace( int[1:n] values, int valueToReplace, int value) { …}

6 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 6 Ablaufsteuerung Verzweigung (Selektion) if (ausdruck) { Anweisungen } if (ausdruck1) { Anweisungen1 } else if (ausdruck2) { Anweisungen2 } else { Anweisungen3 } switch (ausdruck) { case ausdruck1: { Anweisungen1 } case ausdruck2: { Anweisungen2 }... default: { Anweisungenn } }

7 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 7 Ablaufsteuerung (2) Schleifen (Iteration) while (ausdruck) { Anweisungen } repeat { Anweisungen } until (ausdruck) // iteriert von i=1 bis n for (i=1.. n) { Anweisungen } // i nimmt nacheinander alle // werte der menge an for (i ) { Anweisungen } // iteriert über 2er-potenzen for (int i=2, 4, 8, 16,.., n) { Anweisungen }

8 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 8 Elementare Datentypen Elementare Typen: int..., -1, 0, 1, 2,... float , 0.0, char'a', 'b', 'c',... boolean true, false Konstanten: final int i = 5 final boolean a = true, b = false

9 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 9 Felder (Arrays) Deklaration in Jana: int[1:n] feld Feldliteral in Jana: feld = {1, 2, 3, 4} Elementzugriff erfolgt immer durch Indizierung: feld[i] = element element = feld[i] Alle Elemente müssen gleichen (statischen) Datentyp haben. Unterer und oberer Grenzindex sind frei wählbar. Für unteren Grenzindex ist 0 (Java, C++) oder 1 (Smalltalk) üblich n Erstes Element an Position unterer Grenzindex (z.B.: 0) Letztes Element an Position oberer Grenzindex (z.B.: n) IndexElemente Annordnung einer Zahl von Elementen die fortlaufend nummeriert sind (Index von unterer bis oberer Grenze, muß ganze Zahl sein)

10 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 10 Lineares Suchen in Feldern //liefert die indexposition der gesuchten Zahl value in feld array, oder -1 //falls nicht enthalten int sequentialSearch( int[1:n] array, int value) { int index for (index = 1 to n) { if (array[index] == value) { // value an der Stelle index gefunden return index } // value im ganzen feld nicht enthalten return -1 } Aufruf: position = sequentialSearch( myArray, searchNumber) Gegeben ist ein unsortiertes Feld mit beliebigen ganzen Zahlen Gesucht: Ist eine bestimmte Zahl enthalten und an welcher Stelle?

11 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 11 Löschen und Einfügen in Felder deleteElem( float[1:n] array, int elemIndex) { int i if (elemIndex n) return; //ungültiger Index for (i = elemIndex to n-1) { array[i] = array[i+1] } Beim Löschen eines Feldelements müssen die dahinterliegenden Elemente um eine Stelle nach vor gereiht werden; insertElem( float[1:n] array, int elemIndex, float value) { int i if (elemIndex n) return //ungültiger Index for (i=n-1 downto elemIndex) { array[i+1] = array[i] } array[elemIndex] = value; } Beim Einfügen müssen alle Elemente ab der Einfüge-Position nach hinten gereiht werden. Vorsicht: oberer Grenzindex, letztes Element geht verloren

12 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 12 Benutzerdefinierte Datentypen (Verbunde) 1 Neben den elementaren Typen sind auch benutzerdefinierte Datentypen erlaubt. Diese werden mit dem Schlüsselwort type gekennzeichnet. Typdefinitionen sind z.b.: type Person= { // verbundtyp int id char[1:n] lastName, firstName } type Day= (Mo,Tu,We,Th,Fr,Sa, Su) // aufzählungstyp type Matrix= int[7, 3] // matrix mit // grenzen 0..6 // und 0..2 type Month= (1..12) // Bereichstyp

13 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 13 Benutzerdefinierte Datentypen (Verbunde) 2 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

14 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 14 Benutzerdefinierte Datentypen (Verbunde) 3 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

15 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 15 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ß)

16 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 16 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

17 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 17 Rückblick Zusammenfassung Algorithmen (Prozeduren) Kommentare Operatoren Ablaufsteuerung (Sequenz, Selektion, Iteration) if / else if / else, switch; while, repeat, for 4 Elementare Datentypen boolean, int, float, char Felder (inkl. Zeichenketten) boolean[1:n], char[], float[-3:3], int[1:n; 1:m] und weitere Sprachkonstrukte

18 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 18 Beispiel: Sinusberechnung durch Reihenentwicklung Idee : Sinusfunktion kann durch folgende Reihe beliebig genau angenähert werden: sin (x) = x 1 /1! - x 3 /3! + x 5 /5! - x 7 /7! + x 9 /9! -... Zusatzidee : Wenn der Wert eines Terms kleiner ist als maximal zulässiger Fehler, dann ist die Abweichung des Näherungswertes vom exakten Sinuswert auch kleiner als der maximal zulässige Fehler und dahinterliegende Terme können ignoriert werden (konvergierende Reihe). Sinus - Version 1: float sinus (float angle) { i = 1 ergebnis = term(i) while (ergebnis noch zu ungenau) { i = i+1 //berechne nächsten term(i) ergebnis = ergebnis +/- term(i) } return ergebnis }

19 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 19 Beispiel: Sinusberechnung durch Reihenentwicklung (2) float sinus (float angle) { int i int termVorzeichen float term, ergebnis, maximalerFehler maximalerFehler = // i = 1 termVorzeichen = -1 term = angle ergebnis = angle //while (ergebnis noch zu ungenau) { while (|term| > maximalerFehler) { i = i+2 //!!! statt i+1 //berechne nächsten term(i) term = (angle i / i!) * termVorzeichen termVorzeichen = -termVorzeichen// schaltet Vorzeichen um ergebnis = ergebnis + term// akkumuliert terme in ergebnis } return ergebnis }


Herunterladen ppt "Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 1 Dr. W. Narzt u. Dr. A.Stritzinger Institut."

Ähnliche Präsentationen


Google-Anzeigen