und im PPT-Format (Power Point)

Werbung
Informatik II
(für Fakultät Maschinenwesen)
Heinrich Hußmann
Sommersemester 2001
Technische Universität Dresden
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
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
(5. Studienbrief, Kapitel 6)
15.5., 29.5.
4. Einordnung und Ausblick
(unter anderem: Software-Engineering)
12.6.00
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
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
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++, ...
Technische Universität Dresden
Prof. Hußmann
Informatik II (Maschinenwesen)
Rückblick
•
•
•
•
Variablen
Datentypen
Ausdrücke
Anweisungen
– Zuweisungen
– Fallunterscheidung
– Schleifen
• Unterprogramme
• Units (Module)
• Grafikprogrammierung
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);
begin
if n = 0 then fac := 1
else fac := n * fac(n–1);
end;
Stack für Aufruf fac(3):
3
2
1
0
Speicher für n in fac(3)
Speicher für n in fac(2)
Speicher für n in fac(1)
Speicher für n in fac(0)
Dynamisches Wachsen und
Schrumpfen des Stacks
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 :=
p^.b :=
new(q);
q^.a :=
q^.b :=
1;
2;
Heap ("Halde"):
...
a: 1
b: 2
3;
4;
...
a: 3
b: 4
...
Technische Universität Dresden
Speicher für p^
Prof. Hußmann
Speicher für q^
Informatik II (Maschinenwesen)
Listen
• Linear verkettete Liste:
Inhalt1
Inhalt2
Inhalt3 nil
• Zyklisch verkettete Liste:
Inhalt1
Inhalt2
Inhalt3
Inhalt2
Inhalt3
• Doppelt verkettete Liste:
Inhalt1 nil
Technische Universität Dresden
Prof. Hußmann
nil
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.
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;
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;
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;
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;
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;
Technische Universität Dresden
Prof. Hußmann
Informatik II (Maschinenwesen)
Delphi-Beispielprojekt zu Listen
Technische Universität Dresden
Prof. Hußmann
Informatik II (Maschinenwesen)
Beispiel: Einfach verkettete Liste (1)
type
var
string25=string[25];
TListe = ^TElement;
TElement = record
Key:
integer;
Name:
string25;
NextElement: TListe
end;
ListenAnfang,ListenEnde: TListe;
Zaehler: integer;
procedure InitListe;
begin
ListenAnfang := nil;
ListenEnde := nil
end;
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};
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};
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};
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};
Technische Universität Dresden
Prof. Hußmann
Informatik II (Maschinenwesen)
Herunterladen