Informatik II (für Fakultät Maschinenwesen)

Slides:



Advertisements
Ähnliche Präsentationen
Ziele von EINI I + II Einführen in „Informatik“
Advertisements

Imperative Programmierung
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Hochschule Fulda – FB ET Sommersemester 2010
Zusammenfassung der Vorwoche
Rekursionen Erstellt von J. Rudolf im November 2001 /
10. Grundlagen imperativer Programmiersprachen
Unter- und Oberklassen: Beispiel
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
DINAMISCHE STRUKTUREN FACHBEGRIFFE 1. DER POINTERDER POINTER 2. DER BUFFERDER BUFFER 3. DER KNOTENDER KNOTEN DIE EINFACHVERKETTETE LISTE DEFINITION DEFINITION.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
INHALT INHALT Inhalt Delphi IDE ObjectPascal Hello World! Delphi IDE
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Listen Klaus Becker KB Listen 2 Listen Ansgar A., Speyer Claudia B., Koblenz Knut B., Neustadt Annett B., Wörrstadt Stefani D., Bad Ems Jochen F.,
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Animation von Dijkstra
Animation von Dijkstra
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 4
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
MODULA-2.
Agenda für heute, 28. April, 2005 Strukturierte VariablenStrukturierte Variablen Arrays.
Kapitel 5: Von Datenstrukturen zu Abstrakten Datentypen
Übung 4.1 Strukturierte Datentypen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Der Datentyp Verbund (record)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Lernlandkarte OOP (ObjektOrientiertes Programmieren)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Extended Pascal ( Erweitreung von Pascal) Name: Mehmet CELIK Matr :
The Programming Language Pascal
Prüfungsbesprechung Barbara Scheuner Vorlesung: Programmieren und Problemlösen Prof. Hans Hinterberger.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Parametrisierte Prozeduren und Funktionen
 Präsentation transkript:

Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001 Technische Universität Dresden

Prof. Dr. Heinrich Hußmann Fakultät Informatik Lehrstuhl Softwaretechnologie Dürerstr. 26, 2. OG, Raum 258 Telefon 463-8464 Email hussmann@inf.tu-dresden.de Informationen zur Vorlesung im WWW: http://www-st.inf.tu-dresden.de/im2 Betreuung zum Praktikum: Frank-Ulrich Kumichel, Telefon 463-8484

Gliederung und Terminplan Vorlesungsumfang 1 SWS, aber Doppelstunden Achtung: Termine nicht ganz regelmäßig! 1. Pointer-Programmierung mit Object Pascal (4. Studienbrief, Abschnitt 5.7) 10.4.01 2. Objektorientierte Programmierung mit Object Pascal (5. Studienbrief, Kapitel 5) 17.4, 24.4., 8.5. 3. Datenbankprogrammierung mit SQL und Delphi 15.5., 29.5. (5. Studienbrief, Kapitel 6) 4. Einordnung und Ausblick 12.6.00 (unter anderem: Software-Engineering)

Studienbriefe Für erste Doppelstunde: Für weitere Vorlesungen: 4. Studienbrief (vorhanden) Für weitere Vorlesungen: 5. Studienbrief in Arbeit Verfügbar voraussichtlich Anfang Mai Verkaufspreis voraussichtlich 3 DM

Delphi-Praktikum Praktikumszeiten in Pool Willersbau A 119: Dienstag 6. und 7. DS (16:40 bis 20:00 Uhr) Donnerstag 5. und 6. DS (14:50 bis 18:30 Uhr) Testatabnahme während des Praktikums Termin individuell vereinbart Mitbringen: Aufgabenstellung Projekt-Listing Testatblatt Einschreibung in Klausur im Praktikum

Vorbemerkung Warum Programmieren lernen? Verständnis grundlegender Mechanismen Qualifizierter Umgang mit Anwendungssoftware Fähigkeit zur Kooperation mit Software-Spezialisten Warum Pointer, Objektorientierung, Komponenten, Datenbanken: Fortgeschrittene Konzepte für komplexe Anwendungen Erleichterung von Anpassungen Komponenten, Datenbanken Softwarekomponenten vs. Hardwarekomponenten Warum Delphi? Leicht zugänglich (Pascal-basiert) Umfaßt alle modernen Programmier-Konzepte (sh. oben) Wissen übertragbar auf Java, C++, ...

Rückblick Variablen Datentypen Ausdrücke Anweisungen Unterprogramme Zuweisungen Fallunterscheidung Schleifen Unterprogramme Units (Module) Grafikprogrammierung

Speicherverwaltung: Stack Für statische Parameter und Variable wird Speicherplatz während des Programmablaufs automatisch reserviert und freigegeben. function fac (n: integer); begin if n = 0 then fac := 1 else fac := n * fac(n–1); end; Stack für Aufruf fac(3): Speicher für n in fac(3) 3 2 Speicher für n in fac(2) 1 Speicher für n in fac(1) Speicher für n in fac(0) Dynamisches Wachsen und Schrumpfen des Stacks

Speicherverwaltung: Heap Für dynamische Variablen muß Speicherplatz explizit angefordert und freigegeben werden type Elem = record a, b: integer end; Ptr = ^Elem; var p, q: Ptr; new(p); p^.a := 1; p^.b := 2; new(q); q^.a := 3; q^.b := 4; Heap ("Halde"): ... a: 1 Speicher für p^ b: 2 ... a: 3 Speicher für q^ b: 4 ...

Listen Linear verkettete Liste: Zyklisch verkettete Liste: Doppelt verkettete Liste: Inhalt1 Inhalt2 Inhalt3 nil Inhalt1 Inhalt2 Inhalt3 Inhalt1 nil Inhalt2 Inhalt3 nil

Linear verkettete Liste Es gibt genau ein Listenelement, das keinen Vorgänger hat. Listenanfang Es gibt genau ein Listenelement, das keinen Nachfolger hat. Listenende Die übrigen Listenelemente haben genau einen Vorgänger und einen Nachfolger. Alle Listenelemente sind vom Listenanfang aus durch Nachfolgerbildung erreichbar. Die Anzahl der Listenelemente heißt Listenlänge.

Deklarationen für einfach verkettete Liste (1) Listendeklarationen: type TListe = ^TElement; TElement = record Key: integer; NextElement: TListe end; var ListenAnfang, ListenEnde: TListe; Initialisierung:: ListenAnfang := nil; ListenEnde := nil;

Anfügen an Listenende Anfügen an leere Liste: new(NewElement); NewElement^.Key := …; NewElement^.NextElement := nil; ListenAnfang := NewElement; ListenEnde := NewElement; Anfügen an nicht-leere Liste: ListenEnde^.NextElement := NewElement;

Anfügen an Listenanfang Anfügen an leere Liste: new(NewElement); NewElement^.Key := …; NewElement^.NextElement := nil; ListenAnfang := NewElement; ListenEnde := NewElement; Anfügen an nicht-leere Liste: NewElement^.NextElement := ListenAnfang;

Einfügen nach einem bestimmten Element Zeiger auf beliebiges Listenelement: var AktElement: TListe; Einfügen nach AktElement: new(NewElement); NewElement^.Key := …; NewElement^.NextElement := AktElement^.NextElement; AktElement^.NextElement := NewElement;

Durchlaufen einer Liste AktElement := ListenAnfang; while AktElement <> nil do begin ... // Verarbeitung der Listenelemente AktElement := AktElement^.NextElement; end;

Delphi-Beispielprojekt zu Listen

Beispiel: Einfach verkettete Liste (1) type string25=string[25]; TListe = ^TElement; TElement = record Key: integer; Name: string25; NextElement: TListe end; var ListenAnfang,ListenEnde: TListe; Zaehler: integer; procedure InitListe; begin ListenAnfang := nil; ListenEnde := nil

Beispiel: Einfach verkettete Liste (2) procedure AppendElement(k:integer; n:string25); var NewElement: TListe; begin new(NewElement); NewElement^.Key:=k; NewElement^.Name:=n; NewElement^.NextElement:=nil; if ListenEnde = nil then ListenAnfang:=NewElement else ListenEnde^.NextElement:=NewElement; ListenEnde:=NewElement; end {AppendElement};

Beispiel: Einfach verkettete Liste (3) procedure DeleteElement(k:integer); var Element, VorElement: TListe; begin Element:=ListenAnfang; VorElement:=nil; while (Element<>nil) and (Element^.Key<>k) do VorElement:=Element; Element:=Element^.NextElement; end; if Element <> nil then if VorElement = nil then ListenAnfang:=Element^.NextElement else VorElement^.NextElement:=Element^.NextElement; if Element^.NextElement=nil then ListenEnde:=VorElement; // dispose(Element); wenn gewuenscht end {DeleteElement};

Beispiel: Einfach verkettete Liste (4) procedure ShowList; var z: integer; Element: TListe; begin Element:=Listenanfang; z:=0; while Element<>nil do z:=z+1; Form1.StringGrid2.Cells[0,z]:= IntToStr(Element^.Key); Form1.StringGrid2.Cells[1,z]:=Element^.Name; Element:=Element^.NextElement; end; Form1.StringGrid2.RowCount:=z+1; end {ShowList};

Beispiel: Einfach verkettete Liste (5) procedure SortList; // "Bubblesort"-Algorithmus var Element,TestElement: TListe; TestKey: integer; begin Element:=ListenAnfang; while Element<>nil do if Element^.NextElement<>nil then begin TestKey:=Element^.Key; TestElement:=Element^.NextElement; while TestElement<>nil do if TestKey>TestElement^.Key then ... vertausche Element und TestElement TestElement:=TestElement^.NextElement; end; Element:=Element^.NextElement; end {SortList};