Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informatik II (für Fakultät Maschinenwesen)

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II (für Fakultät Maschinenwesen)"—  Präsentation transkript:

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

2 Prof. Dr. Heinrich Hußmann
Fakultät Informatik Lehrstuhl Softwaretechnologie Dürerstr. 26, 2. OG, Raum 258 Telefon Informationen zur Vorlesung im WWW: Betreuung zum Praktikum: Frank-Ulrich Kumichel, Telefon

3 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) 2. Objektorientierte Programmierung mit Object Pascal (5. Studienbrief, Kapitel 5) , 24.4., 8.5. 3. Datenbankprogrammierung mit SQL und Delphi 15.5., 29.5. (5. Studienbrief, Kapitel 6) 4. Einordnung und Ausblick (unter anderem: Software-Engineering)

4 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

5 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

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

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

8 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

9 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 ...

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

11 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.

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

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

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

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

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

17 Delphi-Beispielprojekt zu Listen

18 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

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

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

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

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


Herunterladen ppt "Informatik II (für Fakultät Maschinenwesen)"

Ähnliche Präsentationen


Google-Anzeigen