Grundlagen der Programmierung

Werbung
Kapitel 6:
Grundlagen der Programmierung Datenstrukturen
Einführung in die Informatik
Wintersemester 2007/08
Prof. Bernhard Jung
Übersicht
„
„
„
Einleitung
EBNF – Ein Darstellungsmittel für den syntaktischen Aufbau von
Programmiersprachen
Datentypen in Python
Hauptlernziele:
• Die grundlegenden Datentypen in Python kennen lernen
(ähnlich zu vielen anderen Programmiersprachen)
• Syntaktischen Aufbau der Literale verschiedener Datentypen verstehen
• Operationen kennen lernen, die auf Objekte verschiedener
Datentypen angewendet werden können
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
1
Daten, Datentypen, Datenstrukturen
„
Daten: Objekte, mit denen ein Programm umgehen soll
„
Datentypen
‰
‰
‰
z.B. Zahlen, Zeichenketten, Wahrheitswerte, Felder, …
(Æ in vielen Programmiersprachen vordefiniert)
z.B. Bilder, Musikstücke, Videos, …
(Æ definierbar; z.Tl. in Programmbibliotheken definiert)
Unterstützung unterschiedlicher Operationen
„
„
„
z.B. Addition von Zahlen, aber nicht von Bildern
z.B. Komprimierung von Bildern, aber nicht von Zahlen
Datenstruktur: Datentyp + Operationen
Datenstruktur: Eine Menge gleichartiger Daten, auf denen eine Sammlung
von Operationen definiert ist. Eine Operation ist dabei eine Verknüpfung,
die einer festen Anzahl von Eingabedaten ein Ergebnis zuordnet.
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Bsp: Datentypen und Operationen
(am Beispiel Python)
Eingabe-Prompt
Ausgabe: Wert
des Ausdrucks
Eingabe eines Ausdrucks
>>> 1 + 2
3
>>> '1' + '2'
'12'
>>>
>>> 5 / 2
2
>>> 5.0 / 2
2.5
Prof. B. Jung
Additionvon
vonZahlen
Zahlen
Addition
Konkatenationvon
vonZeichenketten
Zeichenketten
Konkatenation
Divisionvon
vonInteger-Zahlen
Integer-Zahlen
Division
Divisionvon
vonGleitkommazahlen
Gleitkommazahlen
Division
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
2
Wdh: Einfache Datentypen
(am Beispiel Python; ähnlich in vielen anderen Programmiersprachen)
‰
Ganze Zahlen ("integer"):
„
„
‰
Reelle Zahlen ("float"):
„
„
‰
„
‰
‰
0.1, 3.14, 10.0, -33.33, ...
auch in Exponentialschreibweise: 1.0e-5, 0.5e10, …
Zeichenketten ("string"):
„
‰
1, 2, 5, -100, ...
auch im Hexadezimalsystem spezifizierbar: 0xA1, 0xFF, 0x3B, …
"TU Bergakademie Freiberg", ...
'Grundlagen der Informatik'
Listen: [1,2,3], ["eins", "zwei", drei"], ...
Boolean: true, false
...
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
EBNF
„
Notation zur Beschreibung von Grammatiken
‰
„
insbesondere Syntax von Programmiersprachen
EBNF – Extended Backus Naur Form
‰
‰
‰
‰
John Backus (1956) – Beschreibung von der Syntax von Fortran
Peter Naur (1958) – Beschreibung von der Syntax von Algol
Niklas Wirth (1976) – Erweiterte BNF zur Beschreibung von Pascal
ISO/ICE-Norm 14977 (1996) – Standard für EBNF Grammatiken
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
3
EBNF
„
Komponenten von EBNF-Grammatiken
‰
Terminalsymbole
„
‰
‰
‰
in Python z.B. "1", "2", "print", "for", "if"
Nichtterminalsymbole
ein Startsymbol (aus der Menge der Nichtterminalsymbole)
Regeln
„
der Form: LHS ::= RHS, wobei
‰
‰
‰
„
LHS (left-hand-side) ist Nichtterminalsymbol
RHS (right-hand-side) ist Ausdruck aus Terminal, Nichtterminalsymbolen,
Operatoren und Klammern
Bedeutung: LHS kann durch RHS ersetzt werden
z.B. Regel
digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
d.h. digit kann durch eines der Zeichen "0" ... "9" ersetzt werden
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
EBNF - Operatoren
„
Auswahl
‰
senkrechter Strich | bezeichnet Auswahlmöglichkeit
„
‰
lies als "oder"
z.B.
digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
oder abkürzend
digit ::= "0" … "9"
„
Prof. B. Jung
d.h. eine Ziffer (digit) ist das Zeichen 0, oder das Zeichen 1, oder
das Zeichen 2, usw.
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
4
EBNF - Operatoren
„
Wiederholung +
‰
Pluszeichen + bezeichnet das mehrfache Vorkommen eines Symbols
„
„
Sternoperator *
‰
‰
„
Der Stern * bedeutet, dass ein Symbol n-mal, n≥0, vorkommt
z.B. ba* steht für b, ba, baa, baaa, baaaa, …
Option []
‰
‰
„
z.B. ba+ steht für ba, baa, baaa, baaaa, …
Kennzeichnung optionaler Symbole in einem Ausdruck
z.B. a[b]c steht für ac oder abc
Gruppierung ()
‰
‰
Runde Klammern dienen der Gruppierung von Symbolen
z.B. a(b|B)c steht für abc oder aBc
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
EBNF - Beispiel
„
Gegeben seien die Regeln
(R1) fraction ::= "." digit+
(R2) digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
„
Ableitung von ".14" aus fraction
Start:
fraction
Anwendung von (R1): "." digit+
Expansion +-Operator:
"." digit digit
Anwendung von (R2): "." "1" digit
Anwendung von (R2): "." "1" "4"
Vereinfachte Schreibweise:
".14"
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
5
Übersicht: Die wichtigsten Datentypen in Python
Datentypen
Kollektionen
Zahlen
Ganze
Zahlen
float
complex
12.852
1+2j
Unveränderbar
int
123
long
123456789L
Sequenzen
NoneType
True, False
None
Abbildungen
Mengen
Veränderbar
str
unicode
tuple
‘Wort‘
u‘Wort‘
(1, ‘a‘, [2])
Prof. B. Jung
bool
list
[1, ‘a‘, [2]]
Einführung in die Informatik, WS 2007/08
set
dict
set( [1,2])
(‘A‘:65, ‘B‘:66)
frozenset
frozenset( [1,2])
TU Bergakademie Freiberg
Datentyp bool
„
Darstellung von Wahrheitswerten
„
Literale
‰
‰
„
Operationen
‰
‰
„
True
False
and, or, not
gleich (==), ungleich (!=)
Verwendung oft in Bedingungen
Prof. B. Jung
>>> True
True
>>> not True
False
>>> True and True
True
>>> True and False
False
>>> True or True
True
>>> True or False
True
>>> 12 > 9
True
>>> 2*3 == 6
True
>>> 2*3 == 5
False
>>> if 2 == 2:
...
print 'gleich'
...
gleich
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
6
Datentyp bool
and
False
True
or
False
True
Prof. B. Jung
False
False
False
True
False
True
False
False
True
>>> True
True
>>> not True
False
>>> True and True
True
>>> True and False
False
True
True
True
>>> True or True
True
>>> True or False
True
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen int und long
„
Darstellung ganzer Zahlen
„
Datentyp int
‰
‰
„
Werte repräsentiert durch mind. 32 Bit
(neue Prozessoren auch 64 Bit)
Wertebereich
-2 147 483 648 … 2 147 483 647
(oder höher bei 64 Bit)
Datentyp long
‰
‰
‰
beliebig lange Zahlen
Syntax: Ziffernfolge mit angehängtem
'l' oder 'L'
Ganze Zahlen größer als
2147483647 (bzw. kleiner als
-2147483648) werden von Python
automatisch als long interpretiert
Prof. B. Jung
>>> 12
12
>>> 12L
12L
Die Standardfunktion type()
liefert den
Datentyp eines
Ausdrucks oder
einer Variable.
>>> type(12)
<type 'int'>
>>> type(12l)
<type 'long'>
>>> 2147483647
2147483647
>>> 2147483648
2147483648L
>>> type(-2147483648)
<type 'int'>
>>> type(-2147483648-1)
<type 'long'>
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
7
Darstellung ganzer Zahlen: Datentypen int und long
„
„
Darstellung ganzer Zahlen in
unterschiedlichen Zahlensystemen
Dezimalsystem
‰
Literale fangen nie mit 0 an
„
‰
„
>>> 011
9
außer 0 selbst
z.B. 11, 9
>>> 09
Traceback ( File
"<interactive input>",
line 1
09
^SyntaxError: invalid
token
Oktalsystem
‰
‰
‰
„
>>> 9
9
Literale beginnen mit 0
Ziffern 0 … 7
z.B. 011
Hexadezimalsystem
‰
‰
‰
Literale beginnen mit 0x oder 0X
Ziffern 0 … 9, A … F
z.B. 0x11, 0xA9
Prof. B. Jung
>>> 0xA
10
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen int und long
„
EBNF
longinteger ::=
integer ("l" | "L")
integer ::=
decimalinteger | octinteger | hexinteger
decimalinteger ::=
nonzerodigit digit* | "0"
octinteger ::=
"0" octdigit+
hexinteger ::=
"0" ("x" | "X") hexdigit+
digit ::=
"0"..."9"
nonzerodigit ::=
"1"..."9"
octdigit ::=
"0"..."7"
hexdigit ::=
Prof. B. Jung
digit
| "a"..."f"
| "A"..."F" TU Bergakademie Freiberg
Einführung
in die Informatik,
WS 2007/08
8
Darstellung rationaler Zahlen: Datentyp float
„
Darstellung rationaler Zahlen
‰
„
Darstellungsformen:
‰
als Dezimalbruch (pointfloat)
„
‰
z.B. 3.12, 0.1, 1.0
in Exponentialschreibweise
„
„
„
„
>>> 0.2
0.20000000000000001
>>> 0.6
0.59999999999999998
>>> 3.14
3.1400000000000001
"Gleitkommazahlen"
falls Zahl sehr nahe bei Null oder sehr groß
z.B. 1.0e-5 (entspricht 0.00001)
z.B. 1e2 (entspricht 100)
begrenzte Genauigkeit
‰
interne Darstellung von Gleitkommazahlen
ist begrenzt auf feste Anzahl von Stellen
Prof. B. Jung
>>> 1e8
100000000.0
>>> 1e+8
100000000.0
>>> 1e-8
1e-008
>>> 0.00000001
1e-008
>>> 1.234567890123456789
1.2345678901234567
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen float
„
EBNF
floatnumber ::=
pointfloat | exponentfloat
pointfloat ::=
[intpart] fraction | intpart "."
exponentfloat ::=
(intpart | pointfloat)
exponent
intpart ::=
digit+
fraction ::=
"." digit+
exponent ::=
("e" | "E") ["+" | "-"] digit+
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
9
Datentyp complex
„
Darstellung komplexer Zahlen
‰
in Mathematik: Summe aus Real- und Imaginärteil, z.B. 1+2i
„
‰
Buchstabe i bezeichnet Wurzel von -1
in Python: 1 + 2j
„
Realteil kann weggelassen werden, falls 0
„
imagnumber
EBNF
(Imaginärteil)
„
Beispiele
Prof. B. Jung
::= (floatnumber | intpart) ("j" | "J")
>>> 10 + 0.3j
(10+0.29999999999999999j)
>>> 20j
20j
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Operationen auf Zahlen
Operator
Erläuterung
Beispielterm
Ergebnis
**
Potenz
2**3
8
-
Negatives Vorzeichen (unär)
-1
-1
+
Positives Vorzeichen (unär)
+1
1
*
Multiplikation
2.0*2
4.0
/
Division
4.0 / 2.0
2.0
%
Rest der ganzzahligen Division (modulo)
5%3
2
+
Addition
(2+2j) + (3+4j)
(5 + 6j)
-
Subtraktion
6.0 – 3.5
2.5
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
10
Sequenzen
„
Sequenz
‰
‰
Container-Objekt (Kollektion), in dem eine Folge von Objekten zusammengefasst
ist
Elemente sind von 0 beginnend durchnummeriert
s[2]
‰
s[5]
s
59
19
-1
-111
-30
18
18
index
0
1
2
3
4
5
6
Arten von Sequenzen in Python: Zeichenketten, Tupel, Listen
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Darstellung von Zeichenketten: Datentyp str
„
Darstellung von Zeichenketten
‰
„
Kurze Zeichenketten
‰
‰
„
nur ASCII-Zeichen erlaubt
Definition in einer Programmzeile
eingeschlossen in Hochkommata ' oder
Anführungszeichen "
Lange Zeichenketten
‰
‰
>>> "eins zwei drei"
'eins zwei drei'
>>> 'vier fuenf sechs'
'vier fuenf sechs'
>>> type("vier fuenf sechs")
<type 'str'>
können sich über mehrere
Programmzeichen erstrecken
eingeschlossen in dreifache
Hochkommata ''' oder
Anführungszeichen """
>>> """Die Ewigkeit dauert lange,
besonders gegen Ende. (Woody Allen)"""
'Die Ewigkeit dauert lange,\nbesonders gegen Ende. (Woody Allen)'
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
11
Darstellung von Zeichenketten: Datentyp unicode
„
Darstellung von Zeichenketten mit
Unicode-Strings
‰
‰
auch nicht-ASCII-Zeichen erlaubt
Darstellung von Literalen wie bei
str-Zeichenketten, mit
vorangestelltem u
>>> type(u'Unicode-String')
<type 'unicode'>
>>> print u"\N{CYRILLIC CAPITAL LETTER ZHE}"
Ж
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentyp tuple
„
Tupel
‰
‰
„
fasst mehrere Objekte, u.U. unterschiedlichen Typs, zu einem komplexen Objekt zusammen
mathematische Schreibweise: z.B. (1,2,3)
Beispiele
>>> (1,2,3)
(1, 2, 3)
>>> ("Ampel", 3, ("rot", "gelb", "gruen") )
('Ampel', 3, ('rot', 'gelb', 'gruen'))
>>> type( (1,2,3) )
<type 'tuple'>
>>> ()
()
Prof. B. Jung
# leerer Tupel
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
12
Datentyp list
„
Darstellung von Listen
‰
Listen enthalten oft Elemente vom gleichen Typ
‰
Inhalt von Listen kann zur Laufzeit verändert werden
‰
Darstellung in Python durch eckige Klammern []
„
„
„
können aber auch Elemente unterschiedlichen Typs enthalten
i.Ggs. zu Tupeln, Zeichenketten
Beispiele
>>> [1,2,3,4,5]
[1, 2, 3, 4, 5]
>>> ["Morgen", "Mittag", "Abend"]
['Morgen', 'Mittag', 'Abend']
>>> ["Abend", 2, 1.0, ['a', 'b'] ]
['Abend', 2, 1.0, ['a', 'b']]
>>> type([1,2])
<type 'list'>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Einige Operationen auf Sequenzen
„
Zugriff auf Elemente
‰
„
Konkatenation
‰
„
>>> 'Berg' + 'akademie'
'Bergakademie'
>>> [1,2,3]+[4]
[1, 2, 3, 4]
mittels Operator +
Bestimmung der Länge
‰
„
mittels Index in eckigen
Klammern
mittels Standardfunktion len()
Vervielfältigung
‰
mittels Multiplikations-operator *
Prof. B. Jung
>>> rgb = ("rot", "gruen", "blau")
>>> rgb[1]
'gruen'
>>> "Informatik"[0]
'I'
>>> primzahlen = [2,3,5,7,11,13]
>>> primzahlen[5]
13
>>> len( [1,2,3] )
3
>>> len('Bergakademie')
12
>>> 20*'.'
'....................'
>>> ('an','aus') * 3
('an', 'aus', 'an', 'aus', 'an', 'aus')
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
13
Datentypen set und frozenset
„
Darstellung von Mengen
‰
‰
‰
„
Operationen
‰
‰
‰
„
Menge = ungeordnete Kollektion ohne Duplikate
set-Objekte sind veränderbar
frozenset-Objekte sind unveränderbar
Durchschnitt &
Vereinigung |
Differenz –
>>> set( [1,2])
set([1, 2])
Beispiele
>>> set([1,2,1,2]) # Duplikate?
set([1, 2])
>>> set([1,2]) & set([2,3]) # Durchschnitt
set([2])
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentyp dict
„
Dictionary
‰
Kollektion von Schlüssel-Wert-Paaren
„
‰
d.h. Abbildung von Schlüsseln auf Werte
Zugriff auf Elemente der Kollektion über Schlüssel
>>> woerterbuch = {"sun":"Sonne", "moon":"Mond", "star":"Stern"}
>>> woerterbuch["sun"]
'Sonne'
>>> type(woerterbuch)
<type 'dict'>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
14
Herunterladen