1 / 22

Informatik II (für Fakultät Maschinenwesen)

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

rob
Download Presentation

Informatik II (für Fakultät Maschinenwesen)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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) 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)

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

  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 • 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; Speicher für n in fac(3) Stack für Aufruf fac(3): 3 Speicher für n in fac(2) 2 Speicher für n in fac(1) 1 Speicher für n in fac(0) 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: new(NewElement); NewElement^.Key := …; NewElement^.NextElement := nil; ListenEnde^.NextElement := NewElement; ListenEnde := 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: new(NewElement); NewElement^.Key := …; NewElement^.NextElement := ListenAnfang; ListenAnfang := NewElement;

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

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

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

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

More Related