Grundlagen der Programmierung - Datenstrukturen

Ähnliche Dokumente
3 Syntax von Programmiersprachen

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Syntax von Programmiersprachen

Kapitel 2. Methoden zur Beschreibung von Syntax

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Programmierkurs Python I

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Elementare Konzepte von

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

2.1 Fundamentale Typen

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut

Programmierkurs Python I

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

Kapitel 2. Methoden zur Beschreibung von Syntax

3.4 Struktur von Programmen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

7. Syntax: Grammatiken, EBNF

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1 Syntax von Programmiersprachen

JAVA-Datentypen und deren Wertebereich

Abschnitt 4: Daten und Algorithmen

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Einführung in die Informatik. Programming Languages

Beispiele elementarer Datentypen Ganze Zahlen (integer) Unterbereiche Gleitkommazahlen Festkommazahlen

Alphabet, formale Sprache

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Abschnitt 2: Daten und Algorithmen

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Java Einführung Operatoren Kapitel 2 und 3

Programmierkurs I. Gliederung: Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen)

Diskrete Strukturen Kapitel 2: Grundlagen (Mengen)

Algorithmen und ihre Programmierung

Java I Vorlesung Imperatives Programmieren

Programmierkurs C++ Variablen und Datentypen

2.5 Primitive Datentypen

Einführung in die Programmierung mit VBA

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Einstieg in die Informatik mit Java

WS 2009/10. Diskrete Strukturen

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Kapitel IV Formale Sprachen und Grammatiken

Einführung in die Informatik. Programming Languages

Einstieg in die Informatik mit Java

Tag 2 Repetitorium Informatik (Java)

Programmieren in Python

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Algorithmen und Programmieren II Einführung in Python (Teil 2)

Einführung in die Programmierung EBNF. Thomas R. Gross. Department Informatik ETH Zürich

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einstieg in die Informatik mit Java

Programmierkurs Java

Formale Sprachen, reguläre und kontextfreie Grammatiken

Kapitel 3: Variablen

Praktische Eine Einführung

Inhalt Kapitel 11: Formale Syntax und Semantik

Programmierung. Grundlagen. Tina Wegener, Ralph Steyer. 2. Ausgabe, 1. Aktualisierung, April 2014

Diana Lange. Generative Gestaltung Operatoren

2. Programmierung in C

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

Einstieg in die Informatik mit Java

Funktionale Programmierung Grundlegende Datentypen

4. Induktives Definieren - Themenübersicht

Grundlagen der Informatik 2. Typen

Einführung in die Informatik I

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke

Einführung in die Programmiertechnik

Inhalt. 2.1 Darstellung von Zahlen. 2.2 Darstellung von Zeichen. 2.3 Boolesche Algebra. 2.4 Aussagenlogik. Informatik 1 / Kapitel 2: Grundlagen

Projekt 3 Variablen und Operatoren

2. Vorlesung: Boolesche Algebra

Vorlesung Programmieren

Grunddatentypen, Ausdrücke und Variablen Typkonversion, Überprüfen und Auswerten von Ausdrücken

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

Einstieg in die Informatik mit Java

Einführung in die Informatik I

Wo sind wir? Übersicht lexikale Struktur von Java

Motivation und Überblick

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Variablen, Konstanten und Datentypen

\\//_. 18. Mai Goethe-Gymnasium Sebnitz. Datenstrukturen und Datentypen \\//_. Datentypen und. Datenstrukturen. einfache Datentypen

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben

Reguläre Ausdrücke. Michael Jäger. 4. April 2017

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Informationsdarstellung 2.2

Modul 122 VBA Scribt.docx

7. Formale Sprachen und Grammatiken

1. Informationsdarstellung. Darstellung und Bedeutung. Darstellung und Bedeutung. Interpretation ??? 1. Kapitel

Übung Praktische Informatik I

Zahlensysteme. Digitale Rechner speichern Daten im Dualsystem 435 dez = binär

Transkript:

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 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. Bsp: Datentypen und Operationen (am Beispiel Python) Eingabe-Prompt Eingabe eines Ausdrucks Ausgabe: Wert des Ausdrucks >>> 1 + 2 3 >>> '1' + '2' '12' >>> Addition von Zahlen Addition von Zahlen Konkatenation von Zeichenketten Konkatenation von Zeichenketten >>> 5 / 2 2 >>> 5.0 / 2 2.5 Division von Integer-Zahlen Division von Integer-Zahlen Division von Gleitkommazahlen Division von Gleitkommazahlen 2

Wdh: Einfache Datentypen (am Beispiel Python; ähnlich in vielen anderen Programmiersprachen) Ganze Zahlen ("integer"): 1, 2, 5, -100,... auch im Hexadezimalsystem spezifizierbar: 0xA1, 0xFF, 0x3B, Reelle Zahlen ("float"): 0.1, 3.14, 10.0, -33.33,... auch in Exponentialschreibweise: 1.0e-5, 0.5e10, Zeichenketten ("string"): "TU Bergakademie Freiberg",... 'Grundlagen der Informatik' Listen: [1,2,3], ["eins", "zwei", drei"],... Boolean: true, false... 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 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 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" d.h. eine Ziffer (digit) ist das Zeichen 0, oder das Zeichen 1, oder das Zeichen 2, usw. 4

EBNF - Operatoren Wiederholung + Pluszeichen + bezeichnet das mehrfache Vorkommen eines Symbols z.b. ba+ steht für ba, baa, baaa, baaaa, Sternoperator * Der Stern * bedeutet, dass ein Symbol n-mal, n 0, vorkommt z.b. ba* steht für b, ba, baa, baaa, baaaa, Option [] 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 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" 5

Übersicht: Die wichtigsten Datentypen in Python Datentypen Zahlen Kollektionen bool, False NoneType None Ganze Zahlen float complex 12.852 1+2j Sequenzen Mengen Abbildungen int Unveränderbaderbar Verän- set dict 123 set( [1,2]) ( A :65, B :66) long str unicode tuple 123456789L Wort u Wort (1, a, [2]) list [1, a, [2]] frozenset frozenset( [1,2]) Datentyp bool Darstellung von Wahrheitswerten Literale False Operationen and, or, not gleich (==), ungleich (!=) Verwendung oft in Bedingungen >>> >>> not False >>> and >>> and False False >>> or >>> or False >>> 12 > 9 >>> 2*3 == 6 >>> 2*3 == 5 False >>> if 2 == 2:... print 'gleich'... gleich 6

Datentyp bool and False False False False False or False False False >>> >>> not False >>> and >>> and False False >>> or >>> or False 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 >>> 12 12 >>> 12L 12L >>> type(12) <type 'int'> >>> type(12l) <type 'long'> >>> 2147483647 2147483647 >>> 2147483648 2147483648L >>> type(-2147483648) <type 'int'> >>> type(-2147483648-1) <type 'long'> Die Standardfunktion type() liefert den Datentyp eines Ausdrucks oder einer Variable. 7

Darstellung ganzer Zahlen: Datentypen int und long Darstellung ganzer Zahlen in unterschiedlichen Zahlensystemen Dezimalsystem Literale fangen nie mit 0 an außer 0 selbst z.b. 11, 9 Oktalsystem 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 >>> 9 9 >>> 011 9 >>> 09 Traceback ( File "<interactive input>", line 1 09 ^SyntaxError: invalid token >>> 0xA 10 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 Einführung digit in die Informatik, "a"..."f" WS 2007/08 "A"..."F" TU Bergakademie Freiberg 8

Darstellung rationaler Zahlen: Datentyp float Darstellung rationaler Zahlen "Gleitkommazahlen" Darstellungsformen: als Dezimalbruch (pointfloat) z.b. 3.12, 0.1, 1.0 in Exponentialschreibweise 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 >>> 0.2 0.20000000000000001 >>> 0.6 0.59999999999999998 >>> 3.14 3.1400000000000001 >>> 1e8 100000000.0 >>> 1e+8 100000000.0 >>> 1e-8 1e-008 >>> 0.00000001 1e-008 >>> 1.234567890123456789 1.2345678901234567 Datentypen float EBNF floatnumber ::= pointfloat exponentfloat pointfloat ::= [intpart] fraction intpart "." exponentfloat ::= (intpart pointfloat) exponent intpart ::= fraction ::= digit+ "." digit+ exponent ::= ("e" "E") ["+" "-"] digit+ 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 EBNF (Imaginärteil) imagnumber ::= (floatnumber intpart) ("j" "J") Beispiele >>> 10 + 0.3j (10+0.29999999999999999j) >>> 20j 20j 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 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 index 59 19-1 -111-30 18 18 0 1 2 3 4 5 6 Arten von Sequenzen in Python: Zeichenketten, Tupel, Listen Darstellung von Zeichenketten: Datentyp str Darstellung von Zeichenketten nur ASCII-Zeichen erlaubt Kurze Zeichenketten Definition in einer Programmzeile eingeschlossen in Hochkommata ' oder Anführungszeichen " Lange Zeichenketten können sich über mehrere Programmzeichen erstrecken eingeschlossen in dreifache Hochkommata ''' oder Anführungszeichen """ >>> "eins zwei drei" 'eins zwei drei' >>> 'vier fuenf sechs' 'vier fuenf sechs' >>> type("vier fuenf sechs") <type 'str'> >>> """Die Ewigkeit dauert lange, besonders gegen Ende. (Woody Allen)""" 'Die Ewigkeit dauert lange,\nbesonders gegen Ende. (Woody Allen)' 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}" Ж 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'> >>> () # leerer Tupel () 12

Datentyp list Darstellung von Listen Listen enthalten oft Elemente vom gleichen Typ können aber auch Elemente unterschiedlichen Typs enthalten Inhalt von Listen kann zur Laufzeit verändert werden i.ggs. zu Tupeln, Zeichenketten Darstellung in Python durch eckige Klammern [] 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'> Einige Operationen auf Sequenzen Zugriff auf Elemente mittels Index in eckigen Klammern Konkatenation mittels Operator + Bestimmung der Länge mittels Standardfunktion len() Vervielfältigung mittels Multiplikations-operator * >>> rgb = ("rot", "gruen", "blau") >>> rgb[1] 'gruen' >>> "Informatik"[0] 'I' >>> primzahlen = [2,3,5,7,11,13] >>> primzahlen[5] 13 >>> 'Berg' + 'akademie' 'Bergakademie' >>> [1,2,3]+[4] [1, 2, 3, 4] >>> len( [1,2,3] ) 3 >>> len('bergakademie') 12 >>> 20*'.' '...' >>> ('an','aus') * 3 ('an', 'aus', 'an', 'aus', 'an', 'aus') 13

Datentypen set und frozenset Darstellung von Mengen Menge = ungeordnete Kollektion ohne Duplikate set-objekte sind veränderbar frozenset-objekte sind unveränderbar Operationen Durchschnitt & Vereinigung Differenz Beispiele >>> set( [1,2]) set([1, 2]) >>> set([1,2,1,2]) # Duplikate? set([1, 2]) >>> set([1,2]) & set([2,3]) # Durchschnitt set([2]) 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'> 14