Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und...

40
Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 V07 Aggregierte Datenstrukturen Prof. Dr. Detlef Krömker Professur für Graphische Datenverarbeitung Institut für Informatik Fachbereich Informatik und Mathematik (12)

Transcript of Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und...

Page 1: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Hier wird Wissen Wirklichkeit

Modul: Programmierung B-PRG

Grundlagen der Programmierung 1

V07 Aggregierte Datenstrukturen

Prof. Dr. Detlef Krömker

Professur für Graphische Datenverarbeitung

Institut für Informatik

Fachbereich Informatik und Mathematik (12)

Page 2: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker2 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Rückblick: Datentypen – Abstrakte Datentypen

‣ Ein Datentyp (in der Informatik) ist die Zusammenfassung von

Objektmengen mit den darauf definierten Operationen.

‣ Dabei werden durch den Datentyp unter Verwendung einer so

genannten Signatur ausschließlich die Namen dieser Objekt- und

Operationsmengen spezifiziert.

‣ Ein so spezifizierter Datentyp besitzt jedoch noch keine Semantik.

‣ Die Defnition eines Abstrakten Datentyps (ADT) hält sich an folgendes

Muster:

‣ Typ/Wertebereich

‣ Methoden - die Syntax wie mit dem Datentyp gearbeitet wird

‣ Axiome - die die Semantik des Datentypen definieren

Page 3: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker3 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Rückblick

Datentypen / Objekte

Zahlen

Zeichen

aufrufbar

None

elementare

Prozeduren

Klassen

Ganzzahlen

Gleitkommazahl.

div. Kodierungen

integer

Komplexe Zahlen

long

float

decimal

ustring

complex

string

class

def

Python Objekte

unmutable

mutable

Page 4: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker4 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Wo stehen wir – „der rote Faden“

‣ V0 - V4 Computer - Algorithmen – Programm

Elementare Datenstrukturen: Integer, Float, Strings

Kontrollstrukturen: Verzweigungen, Schleifen, Prozeduren

‣ V5 Module und Namensräume, Elemente des Softwaretests

Ein- / Ausgabe

‣ V6 Etwas „Theorie“ : Syntax, Semantik, Daten,

Information, ...

‣ V7 Aggregierte Datentypen: Listen, Mengen, Dictionaries

‣ V8 OO-Programmierung

‣ V9 Stapel, Schlangen, Graphen und Bäume

‣ V10 OO-Analyse und Design (Softwarestrukturen)

Page 5: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker5 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Unser heutiges Lernziel

Aggregierte Datentypen / Kollektionen

Zahlen

Zeichen

Kollektionen

Wahrheitswerte

aufrufbar

none

Sequenzen

Abbildungen

Mengen

elementare

Prozeduren

Klassen

Ganzzahlen

Gleitkommazahl.

Unicode

integer

Komplexe Zahlen

float

decimal

complex

string

class

def

list [ ]

dictionary { }

tupel ( )

Python Objekte

set ( )

frozenset ( )

unmutable

mutable

Aufzählungstypen

Page 6: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker6 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Übersicht

‣ Vorbemerkungen

‣ Aggregierte Datentypen (Kollektionen) – Datenstrukturen –

Objekte

‣ Praktisch wichtige Datenstrukturen

Felder (array) Listen (list)

Mengen (set) Stapel (stack)

(Warte-)Schlange (queue) Verbund (struct)

Dictionaries (Assoziative Felder)

‣ Realisierungen in Python

List – Tupel – String

Set – Fozenset

Dictionaries

Page 7: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker7 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Vorbemerkungen

‣ „Große Programmieraufgabe“ – erfolgreich erledigt?

‣ Ein Angebot: Am Freitag 3. Dezember findet um 10.00 Uhr ein Test

(90 Minuten) statt in den Fächern:

‣ Modellierung

‣ Mathe für Informatiker 1

‣ Programmieren 1

‣ ca. 3 x10 Multiple-Choice Aufgaben es gibt Übungspunkte in PRG,

wie ein Übungsblatt! = 2,5 Klausurpunkte

‣ Jede(r) bekommt individuell Feedback per email (Übungspunkte +

Testergebnisse) und Angebote (Vergleich mit dem Durchschnitt!)

Page 8: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker8 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Hochleistungsrechner der Goethe-Uni

am 22.11.2010 eingeweiht

steht im Industriepark Höchst

‣ weltweit Rang 22 (Top 500, 11/10)

‣ Deutschland Rang 2 (nach Jülich)

‣ 285 Tflops/sec

Green 500: energieeffizienteste

Großcomputer Europas

740 MFlops/ Watt

Verbrauch 470 kWatt, Wassergekühlt

Page 9: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker9 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Der Hochleistungsrechner

832 Knoten

20928 CPUs Cores

+ 778 GPUs

56 Tbyte RAM

2 PByte Disk

34 Schränke

Page 10: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker10 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Aggregierte Datentypen –Datenstrukturen - Objekte

‣ Zusammengesetzte (aggregierte) Datentypen sind Datenkonstrukte,

welche aus einfacheren (elementaren) Datentypen oder

zusammengesetzten Datentypen bestehen.

‣ Eine Abgrenzung zu dem Begriff Datenstruktur ist kaum möglich, da

sie nahezu beliebig komplex werden können.

‣ Datenstruktur: Der Fokus der Diskussion liegt auf der Struktu-

rierung/(der Kodierung und Anordnung) der gespeicherten Daten

‣ Aggregierter Datentyp: Der Fokus der Diskussion liegt auf den

Operationen (im Sinne eines abstrakten Datentyps).

Page 11: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker11 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Aggregierte Datentypen –Datenstrukturen - Objekte

‣ Die Definition von Datenstrukturen erfolgt im Allgemeinen durch die

Angabe einer Spezifikation zur Datenhaltung (Widerspruch zur

Abstraktion ??? ) und

‣ der Operationen an der Schnittstelle.

Diese Spezifikation legt das allgemeine Verhalten der Operationen fest

und abstrahiert damit von der konkreten Implementation der

Datenstruktur.

‣ Von den meisten Datenstrukturen gibt es neben ihrer Grundform viele

Spezialisierungen, die eigens für die Erfüllung ganz bestimmter

Aufgaben spezifiziert wurden.

Page 12: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker12 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Aggregierte Datentypen

‣ stehen in den meisten Programmiersprachen zur Verfügung.

‣ Programmiersprachen können aggregierte Datentypen auf zwei

Ebenen unterstützen:

1. Sie stellt Konstruktoren zur Verfügung, mit deren Hilfe der Aufbau

eines aggregierten Datentyps beschrieben werden kann.

2. Sie verfügen über vordefinierte aggregierte Datentypen

(builtins).

‣ 1. bottom-up (historisch) 2. top-down

Page 13: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker13 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

bottom-up: Konstruktoren (1)

ARRAY (Reihung, Feld)

alle Komponenten einer Reihung besitzen stets den gleichen

Datentyp

‣ eine Komponente wird über einen Index bzw. eine Menge von Indizes

angesprochen:

array_name [index] bzw. # eindimensional

array_name [index_1]...[index_n] # n-dimensional

Page 14: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker14 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

bottom-up: Konstruktoren (2)

RECORD (Verbund, Struct)

‣ die Komponenten eines Verbundes können unterschiedliche

Datentypen besitzen

‣ jede Komponente besitzt einen eigenen Namen. Angesprochen

wird eine Komponente in folgender Weise:

record_name.komponenten_name

Page 15: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker15 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zeiger oder Pointer ... eine Ergänzung

sind eine besondere Art von Variablen, die auf einen anderen Speicherbereich verweist (referenziert) ... eine Referenz

Der referenzierte Speicherbereich enthält entweder Daten (Objekt, Variable) oder Programmcode (ggf. sind auch mehrfach Referenzzierungen zugelassen)

Array und Record sind lineare Strukturen: Durch Zeiger kann man dagegen beliebige verzweigte Strukturen realisieren.

Mit Zeigern kann man rechnen, sie inkrementieren, zuweisen, etc. Andererseits kann auf das verwiesene Element selbst zugegriffen werden. Dieses nennt man Dereferenzierung.

Page 16: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker16 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zeiger

kommen vor allem in maschinennahen Programmiersprachen wie z.B.

Assembler, C oder C++ vor

in streng typisierten Sprachen wie Modula-2 oder Ada stark einschränkt

in Sprachen wie Java, Eiffel oder Python zwar intern vorhanden, aber für

dem Programmierer verborgen

(weil Programmierern bei der Arbeit mit Zeigern leicht schwerwiegende

Programmierfehler unterlaufen, sicherlich die Hauptursache für

„Pufferüberläufe“ und „Abstürze“ bei C oder C++ Programmen).

Page 17: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker17 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zeiger – pros (1)

‣ Mit Feldern/Vektoren kann man durch Zeiger schnell innerhalb des

Feldes springen und navigieren. Mittels Zeigerinkrement wird dabei

durch ein Feld hindurchgelaufen (anstatt eines Index)

‣ Verweise auf Speicherbereiche können geändert werden, z.B. zur

Sortierung von Listen, ohne die Elemente umkopieren zu müssen

(dynamische Datenstrukturen).

‣ Mit Zeigern lassen sich Datenstrukturen wie „verkettete Listen“ effektiv

und (fast natürlich) realisieren.

Page 18: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker18 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zeiger (pros 2)

‣ Bei Funktionsaufrufen kann durch die Übergabe eines Zeigers auf eine

Variable vermieden werden, die Variable selbst zu übergeben

(vermeidet Zeit- und Platz-aufwändige Anfertigung einer Kopie)

‣ Anstatt Variablen jedes Mal zu kopieren und so jedes Mal erneut

Speicherplatz zur Verfügung zu stellen, kann man in manchen Fällen

einfach mehrere Zeiger auf ein und dieselbe Variable verweisen

lassen.

Page 19: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker19 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zeiger – cons (1)

‣ Der Umgang mit Zeigern ist relativ schwierig zu erlernen, kompliziert

und fehleranfällig. (Auch bei erfahrenen Programmierern kommen

Flüchtigkeitsfehler im Umgang mit Zeigern noch relativ häufig vor.)

‣ Programmierfehler bei der Arbeit mit Zeigern können schwere Folgen

haben: z.B. Programmabstürze, unbemerkter Beschädigung von Daten

oder gar Programmteilen, Pufferüberläufen, etc.

‣ Die Effizienz des Prozessor-Caches leidet darunter, wenn eine

Datenstruktur auf viele Speicherblöcke verweist, die im Adressraum

weit auseinander liegen.

Page 20: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker20 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zeiger – cons (2)

ein „effizientes“ Programmieren mit Zeigern ist nur möglich, wenn man die

Implementierung einer Datenstruktur kennt und

das steht im Widerspruch zu den Konzepten des abstrakten Datentyps

oder der Objektorientierten Programmierung:

‣ die Komponenten eines abstrakten Datentyps sollen nach außen

verborgen (gekapselt) werden

‣ auf die Komponenten eines abstrakten Datentyps darf nicht einzeln

zugegriffen werden können, sondern nur mit Hilfe spezieller

Methoden.

Page 21: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker21 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Arrays – Records - Zeiger

„Konstruktoren“ zur benutzerdefinierten Definition aggregierter Datentypen

... das kommt in der nächsten Vorlesung

Zunächst: „mächtige“ aggregierte Datentypen ... schauen wir einmal zur

Mathematik

Aus der Mathematik können wir hierfür, gewissermaßen top-down, wichtige

Grundstrukturen zusammen mit typischen Grundoperationen

übernehmen:

‣ Mengen

‣ Tupel

‣ Relationen und Funktionen (lesen Sie bitte im Skript den Anhang)

Page 22: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker22 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Mengen

‣ Mengen: „Eine Menge ist eine Zusammenfassung bestimmter,

wohlunterschiedener Objekte unsere Anschauung oder unseres

Denkens zu einem Ganzen. Diese Objekte heißen Elemente der

Menge.“ (naive Definition von Cantor)

‣ Charakteristische Operationen sind:

\

Page 23: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker23 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Tupel

‣ Ein Tupel ist eine endliche Liste, in der hintereinander Angaben nicht

notwendig voneinander verschiedener mathematischer Objekte stehen.

‣ Ist n die Länge der Liste, dann spricht man von einem n-Tupel; 2-Tupel

nennt man auch geordnete Paare, 3-Tupel auch Tripel.

‣ Das an i-ter Stelle eines nichtleeren Tupels angegebene Objekt heißt

seine i-te Komponente.

‣ Tupel sind durch das Gleichheitsaxiom charakterisiert:

Zwei Tupel sind dann und nur dann gleich, wenn sie gleichlang sind

und ihre entsprechenden Komponenten gleich sind.

Page 24: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker24 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Konstrukte aus der Mathematik

(partielle) Funktionen/Abbildungen: „Eine partielle Funktion ist

eine rechtseindeutige Relation R. R ist eine Menge von n-

Tupeln. Objekte, die in der Relation R zueinander stehen, bilden

ein n-Tupel, das Element von R ist.“

Angegeben durch 2-Tupel der Form (Schlüssel, Wert),

geschrieben zum Beispiel als {Schlüssel:Wert}

Page 25: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker25 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Konstrukte aus der Mathematik

Struktur Ordnung Einzigartigkeit der Werte der

Elemente

Werte pro

Element

Set nein ja 1

List ja nein 1

Map (Dictionary)

= Funktion /

Abbildung

nein ja für das erste Element: sichert

Rechtseindeutigkeit, also die

Eigenschaft, eine partielle Funktion

zu sein

2

Python bietet genau diese Konstrukte an!

Page 26: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker26 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

geordnete

Strukturen

Listelist

Abbildungdictionary

Schlangequeue

Mengeset

Feldarray

Stapelstack

tupel

string

frozenset

Vorrangschlangepriority queue

VerbundGraph

Baumtree

∙ ∙ ∙gerichtet

azyklisch

∙ ∙ ∙

nicht geordnete

Strukturen

Record Union

lineare

Strukturen

nichtlineare

Strukturen

Übersicht: Wichtige Datenstrukturen

Page 27: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker27 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Datentypen in Python

Zahlen

Zeichen

Kollektionen

Wahrheitswerte

aufrufbar

none

Sequenzen

Abbildungen

Mengen

elementare

Prozeduren

Klassen

Ganzzahlen

Gleitkommazahl.

div. Kodierungen

integer

Komplexe Zahlen

long

float

decimal

ustring

complex

string

class

def

list [ ]

dictionary { }

tupel ( )

Python Objekte

set ( )

frozenset ( )

unmutable

mutable

Aufzählungstypen

Page 28: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker28 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Kollektionen Sequenzen

Mengen

Abbildungen

tupel ( )

dictionary { }

list [ ]

set ( )

ustring

string

frozenset ( )

Page 29: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker29 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Listen

Erzeugung von Literalen und einfache Zugriffe

‣ Listen werden als durch Komma getrennte Werte in eckigen

Klammern notiert: [x , y, z]:

‣ [ ] eine leere Liste

‣ liste = [1, 2, 3] eine Liste mit drei Integer-Elementen

‣ liste [1] holt das Element 2

‣ liste = [’spam’, [1, 2,3], 3.141] eine verschachtelte Liste: liste [1][0]

holt das Element 1

‣ liste = list (’spam’) erzeugt eine Liste durch Aufruf des

Typkonstruktors

Page 30: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker30 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Tupel

Erzeugung von Literalen und einfache Zugriffe

Tupel werden als durch Komma getrennte Werte in runden Klammern notiert: (x , y, z).

‣ ( ) ein leeres Tupel

‣ tupel = (1, 2, 3) ein Tupel mit drei Integer-Elementen

‣ tupel [1] Achtung: eckige Klammern, holt das Element 2

‣ Tupel = (’spam’, (1, 2,3), 3.141) eine verschachteltes Tupel: tupel [1][0] holt

das Element 1

‣ tupel = tupel(’spam’) erzeugt ein Tupel durch Aufruf des

Typkonstruktors

‣ tupel = 1, 2, 3 das gleiche Tupel wie oben, ist aber in

Funktionsaufrufen nicht erlaubt, weil nicht zwischen Parametern und Tupel-Elementen

unterschieden werden kann.

‣ (1,) ein Tupel mit einem Element – kein

geklammerter Ausdruck, wird durch das Komma deutlich gemacht

Page 31: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker31 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Sequenz Operationen, hier

help (list)

>>> help (list)

Help on class list in module __builtin__:

class list(object)

| list() -> new list

| list(sequence) -> new list initialized from sequence's items

|

| Methods defined here:

|

| __add__(...)

| x.__add__(y) <==> x+y

|

| __contains__(...)

| x.__contains__(y) <==> y in x

|

| __delitem__(...)

| x.__delitem__(y) <==> del x[y]

|

Page 32: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker32 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

help (list)

| __delslice__(...)| x.__delslice__(i, j) <==> del x[i:j]| | Use of negative indices is not supported.| __eq__(...)| x.__eq__(y) <==> x==y| | __ge__(...)| x.__ge__(y) <==> x>=y| | __getattribute__(...)| x.__getattribute__('name') <==> x.name| | __getitem__(...)| x.__getitem__(y) <==> x[y]| | __getslice__(...)| x.__getslice__(i, j) <==> x[i:j]| | Use of negative indices is not supported.

Page 33: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker33 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

help (list)

| remove(...)

| L.remove(value) -- remove first occurrence of value

|

| reverse(...)

| L.reverse() -- reverse *IN PLACE*

|

| sort(...)

| L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

| cmp(x, y) -> -1, 0, 1

|

| ----------------------------------------------------------------------

| Data and other attributes defined here:

|

| __new__ = <built-in method __new__ of type object>

| T.__new__(S, ...) -> a new object with type S, a subtype of T

>>>

Page 34: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker34 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Mengen

Set – Frozenset

Mengenobjekte werden mit dem eingebauten Funktionen set (änderbar)

oder frozenset (unveränderlich) erzeugt

>>> x = set ('abc')

>>> y = set ('bcde')

>>> x

set(['a', 'c', 'b'])

>>> 'b' in x

True

>>> x & y # Schnittmenge

set(['c', 'b'])

>>>

Page 35: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker35 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Mengen

Operationen und Methoden

is x in M (True/False)M.issubset(N) N istTeilmenge von N (True/False)M.isssuperset(N) N ist Obermenge von N (True/False)

M|N M.union(N) Vereinigung von M und NM|=N M.update(N)

M&N M.intersection(N) Schnittmenge von M und NM&=N M.intersection_update(N)

M-N M.difference(N) Differenz von M und NM-=N M.difference_update(N)

M.symmetric_difference(N) Symmetrische Differenz von M und NM.symmetric_difference_update(N)

M.add(x) Füge ein Element x zur Menge M hinzu. (Hat keine Wirkung, wenn x schon Element von M ist)

M.clear() Erzeugt die Leere Menge MM.pop() Entfernt ein Element von der Menge MM. remove(x) Entferne Element x von der Menge M (x muss

ein Element von M sein, sonst Key error)

Page 36: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker36 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Dictionaries

Dictionaries implementieren partielle Funktionen

Hierzu benutzt man 2-Tupel der Form (Schlüssel, Wert), geschrieben zum Beispiel

als {Schlüssel:Wert.} Da der Wert wieder ein n-Tupel sein kann, aber auch eine

Liste, etc. sind beliebigen partielle Funktionen implementierbar.

Dictionaries sind in Python ein eingebauter Datentyp. Im Gegensatz zu Sequenzen,

die mit einem Zahlen-Intervall indiziert werden, werden Dictionaries über

Schlüssel indiziert, die irgendeinen unveränderlichen Typ haben können.

Strings und Zahlen können immer solche Schlüssel sein. Tupel können als

Schlüssel verwendet werden, wenn sie nur Strings, Zahlen oder Tupel

enthalten.

Listen können nicht als Schlüssel verwendet werden. Warum???

Page 37: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker37 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Dictionaries (2)

Ein Paar geschweiften Klammern erzeugt ein leeres Dictionary: { }. Eine durch Kommata getrennte Liste von Schlüssel:Wert-Paaren innerhalb der Klammern fügt die initialen Schlüssel:Wert-Paare in das Dictionary ein. So werden Dictionaries auch ausgegeben.

Hauptoperationen auf einem Dictionary sind:

‣ das Speichern eines Wertes unter einem Schlüssel und das Abrufen dieses Wertes bei Angabe des Schlüssels.

‣ Es ist auch möglich, ein Schlüssel:Wert-Paar mit del zu löschen. ‣ Wird beim Speichern ein Schlüssel verwendet, der bereits existiert, so

wird der alte damit assoziierte Schlüssel vergessen. Es ist ein Fehler, einen Wert mit einem nicht existierenden Schlüssel abzurufen.

Page 38: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker38 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Zusammenfassung

Praktisch wichtige Datenstrukturen kennen gelernt

Felder (array) Listen (list)

Mengen (set) Stapel (stack)

(Warte-)Schlange (queue) Verbund (struct)

Dictionaries Weitere

Realisierungen in Python

Nutzen Sie die help-Funktion!

Page 39: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker39 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Fragen und (hoffentlich) Antworten

Page 40: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Fachbereich Informatik und Mathematik (12) 2 ... am 22.11.2010 eingeweiht steht im Industriepark Höchst ‣ weltweit

Prof. Dr. Detlef Krömker40 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V8

WS 2006/2007

Ausblick

Danke für Ihre Aufmerksamkeit

Objektorientierte Programmierung