Transcript
Page 1: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Informatik II

(für Fakultät Maschinenwesen)

Heinrich Hußmann

Sommersemester 2001

Technische Universität Dresden

Page 2: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Prof. Dr. Heinrich Hußmann

Fakultät Informatik

Lehrstuhl Softwaretechnologie

Dürerstr. 26, 2. OG, Raum 258

Telefon 463-8464

Email [email protected]

Informationen zur Vorlesung im WWW:

http://www-st.inf.tu-dresden.de/im2

Betreuung zum Praktikum:

Frank-Ulrich Kumichel, Telefon 463-8484

Page 3: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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)

Page 4: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Studienbriefe

• Für erste Doppelstunde:– 4. Studienbrief (vorhanden)

• Für weitere Vorlesungen:– 5. Studienbrief in Arbeit

– Verfügbar voraussichtlich Anfang Mai

– Verkaufspreis voraussichtlich 3 DM

Page 5: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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

Page 6: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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++, ...

Page 7: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Rückblick

• Variablen

• Datentypen

• Ausdrücke

• Anweisungen– Zuweisungen

– Fallunterscheidung

– Schleifen

• Unterprogramme

• Units (Module)

• Grafikprogrammierung

Page 8: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Speicherverwaltung: Stack

• Für statische Parameter und Variable wird Speicherplatz während des Programmablaufs automatisch reserviert und freigegeben.

function fac (n: integer);beginif n = 0 then fac := 1

else fac := n * fac(n–1);end;

10

32

Stack für Aufruf fac(3): Speicher für n in fac(3)

Dynamisches Wachsen und Schrumpfen des Stacks

Speicher für n in fac(2) Speicher für n in fac(1) Speicher für n in fac(0)

Page 9: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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;

a: 1b: 2

Speicher für p^

a: 3b: 4

Speicher für q^

Heap ("Halde"): ...

...

...

Page 10: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Listen

• Linear verkettete Liste:

• Zyklisch verkettete Liste:

• Doppelt verkettete Liste:

Inhalt1 Inhalt2 Inhalt3 nil

Inhalt1 Inhalt2 Inhalt3

Inhalt1 nil Inhalt2 Inhalt3 nil

Page 11: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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.

Page 12: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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;

Page 13: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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:new(NewElement);NewElement^.Key := …;NewElement^.NextElement := nil;ListenEnde^.NextElement := NewElement;ListenEnde := NewElement;

Page 14: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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:new(NewElement);NewElement^.Key := …;NewElement^.NextElement := ListenAnfang;ListenAnfang := NewElement;

Page 15: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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;

Page 16: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Durchlaufen einer Liste

AktElement := ListenAnfang;

while AktElement <> nil do

begin

...

// Verarbeitung der Listenelemente

...

AktElement := AktElement^.NextElement;

end;

Page 17: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Delphi-Beispielprojekt zu Listen

Page 18: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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 := nilend;

Page 19: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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};

Page 20: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

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 begin VorElement:=Element; Element:=Element^.NextElement; end; if Element <> nil then begin if VorElement = nil then ListenAnfang:=Element^.NextElement else VorElement^.NextElement:=Element^.NextElement; if Element^.NextElement=nil then ListenEnde:=VorElement; // dispose(Element); wenn gewuenscht end;end {DeleteElement};

Page 21: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Beispiel: Einfach verkettete Liste (4)

procedure ShowList; var z: integer; Element: TListe;begin Element:=Listenanfang; z:=0; while Element<>nil do begin 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};

Page 22: Technische Universität DresdenProf. HußmannInformatik II (Maschinenwesen) Informatik II (für Fakultät Maschinenwesen) Heinrich Hußmann Sommersemester 2001

Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen)

Beispiel: Einfach verkettete Liste (5)

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


Recommended