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 1 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 1 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 1 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 Organisation der Übung Algorithmen allgemein Darstellungsarten Algorithmenbeschreibungssprache Jana Beispiele Übungsbesprechung Übung 1 Überblick

3 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 3 wöchentliche Übung (90 min) Anwesenheitspflicht (2 x fehlen) 10 Übungen (mind. 8) ca 50 % werden kontrolliert Abgabeschluß: Do 10:00 (Briefkästen SWE) Rückgabe: Do darauf 10:00 (Eingangsbereich) (Teaching)www.swe.uni-linz.ac.at Organisation

4 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 4 Beurteilung 50 % Klausur / 50 % Übungen beide Anteile müssen positiv sein jeweils 24 Punkte (>= 12 ist positiv) Nachklausur im WS 2005 Organisation

5 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 5 In der Übung Präsentation der letzten Übung Mitarbeit Beispiele Vortrag Unterlagen & Übungsangabe (z.B. Jana, Org,...) Organisation

6 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 6 Organisation Form Die Übung soll sauber und sorgfältig abgefasst sein. Verwenden Sie die Übungsangabe als Deckblatt. Verwenden Sie zur Ausarbeitung einen Texteditor. Formulieren Sie ihre Algorithmen in Jana. Heften Sie die Übungen links oben zusammen. Ergänzende Skizzen und Diagramme können Sie auch handschriftlich verfassen. Gliederung für jede Aufgabe Lösungsidee Algorithmus Test Gruppenarbeit ist nicht erlaubt!

7 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 7 Tutorenstunden Montag 12:00-13:00 Raum MZ 313A (PC Labor) ab (z.B. Jana, Org,...) Organisation

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

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

10 Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 10 JANA (2) Algorithmen (Prozeduren) Gleichheitsprüfung: i == 1 (Ergebnis: boolean) (auch: !=,, >=, <=, *, /, %, +, -, !, &&, ||, usw.) i = 1 // Zuweisung 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) { }

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

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

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

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

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

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

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) Idee : Sinusfunktion kann durch folgende Reihe beliebig genau angenähert werden: 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 1 SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut."

Ähnliche Präsentationen


Google-Anzeigen