Einführung in die Programmierung

Ähnliche Dokumente
Abschnitt 2: Daten und Algorithmen

Abschnitt 4: Daten und Algorithmen

Daten und Algorithmen

Abschnitt 4: Daten und Algorithmen

Einführung in die Programmierung

1. Grundlegende Konzepte der Informatik

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen

Einführung in die Informatik I

Formale Sprachen und Automaten

Kapitel 1: Informationsverarbeitung durch Programme

2 Zahlen und Zahlensysteme

Abschnitt 11: Korrektheit von imperativen Programmen

Übersicht. 3.1 Datendarstellung durch Zeichenreihen. 3.2 Syntaxdefinitionen. 3.3 Algorithmen

Grundlagen der theoretischen Informatik

Grundlagen der Programmierung

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Allgemeine Informationen zum Praktikum

Kapitel 5: Darstellung von Daten im Rechner

Informatik I Information & Daten Repräsentation von Daten

5.1 Basistypen. Wie viele Werte kann man mit n Bit darstellen? 30. Jan Felix Brandt, Harald Räcke 70/596

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

Kapitel 1: Informationsverarbeitung durch Programme

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

1. Grundlagen der Informatik Zahlensysteme und interne Zahlendarstellung

Information und ihre Darstellung

Kapitel 0: Grundbegriffe Gliederung

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2018/19. Allgemeine Informationen zum Praktikum

2.1 Fundamentale Typen

Zahlensysteme und Kodes. Prof. Metzler

Kapitel 1: Informationsverarbeitung durch Programme

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

Zum Nachdenken. Wenn die Zahl (123) hat, was könnte dann (123,45) 10

II. Grundlagen der Programmierung

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

5 Zahlenformate und deren Grenzen

Information und ihre Darstellung

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

Rückblick. Addition in der b-adischen Darstellung wie gewohnt. Informatik 1 / Kapitel 2: Grundlagen

2 Darstellung von Zahlen und Zeichen

4. Daten. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Semantik von Ausdrücken

Algorithmen & Programmierung. Reelle Zahlen in C (1) Darstellung reeller Zahlen

Rechnerstrukturen. Michael Engel und Peter Marwedel. Sommer TU Dortmund, Fakultät für Informatik

Kapitel 2. Mathematische Grundlagen. Skript zur Vorlesung Einführung in die Programmierung

1 Formale Sprachen, reguläre und kontextfreie Grammatiken

Basisinformationstechnologie I

Abschnitt 5: Grundlagen der funktionalen Programmierung

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

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

Variablen, Konstanten und Datentypen

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

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

Inhalt. 2.1 Darstellung von Zahlen. 2.2 Darstellung von Zeichen. 2.3 Boolesche Algebra. 2.4 Aussagenlogik. 2.5 Logische Funktionen

Informationsdarstellung 2.2

7. Übung zur Vorlesung Grundlagen der Informatik

Rückblick. Zahlendarstellung zu einer beliebigen Basis b. Umwandlung zwischen Zahlendarstellung (214) 5 = (278) 10 =(?) 8

Abschnitt 3: Mathematische Grundlagen

Rechnerstrukturen, Teil 1. Vorlesung 4 SWS WS 15/16

Zahlen im Computer (Klasse 7 Aufbaukurs Informatik)

2.5 Primitive Datentypen

Die Zahl ist: (z 2, z 1, z 0 ) (z ) : 7 = 0 Rest z 2

Abschnitt 3: Mathematische Grundlagen

Grundbegriffe der Informatik Kapitel 3: Mengen, Alphabete, Abbildungen

Einführung in die Programmierung Wintersemester 2008/09

Gegenstand der Vorlesung 1

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

Organisatorisches (1)

Abschnitt 5: Grundlagen der funktionalen und imperativen Programmierung

Einführung in die Programmierung

Mathematische Grundlagen der Computerlinguistik

Einführung in die Programmierung

4. Induktives Definieren - Themenübersicht

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

2. Datentypen und Deklarationen

Einführung in die Computerorientierte Mathematik

Einführung in die Computerorientierte Mathematik

Learning Object-Oriented Programming. Algorithmen. Algorithmusbegriff. Klärung der Herkunft des Begriffs Formale Definition von Algorithmus

7. Syntax: Grammatiken, EBNF

Diskrete Strukturen Kapitel 2: Grundlagen (Mengen)

Zahlen in Binärdarstellung

Datendarstellung Teil 2

Elementare Konzepte von

4. Zahlendarstellungen

Einstieg in die Informatik mit Java

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

2. Vorlesung: Boolesche Algebra

2 Mengenlehre. 2.1 Grundlagen Definition

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 189

5 Mengen und Folgen. Themen: Hilberts Hotel Mächtigkeit von Mengen Zahlenfolgen Stellenwertsysteme

Einstieg in die Informatik mit Java

6 Ü B E R S E T Z U N G E N U N D C O D I E R U N G E N. 6.1 von wörtern zu zahlen und zurück Dezimaldarstellung von Zahlen Num 10

5 Stellenwertsysteme. Berechne q :=, und setze r := a q b. = 2.25, also q = 2.25 = 2 und = 3. Im Beispiel ergibt sich a b

Transkript:

Einführung in die Programmierung Teil 3: Daten und Algorithmen Prof. Dr. Peer Kröger, Florian Richter, Michael Fromm Wintersemester 2018/2019

Übersicht 1. Datendarstellung durch Zeichenreihen 2. Syntaxdefinitionen 3. Eigenschaften von Algorithmen 4. Paradigmen der Algorithmenentwicklung

Roadmap Wir nehmen unsere Diskussion über den Algorithmus-Begriff wieder auf und konkretisieren einige wichtige Aspekte. Wir beschäftigen uns zunächst mit dem Aspekt der (eindeutigen) Darstellung der zu verarbeitenden Daten Anschließend diskutieren wir anhand einem Beispiel wesentliche Eigenschaften von Algorithmen und unterschiedliche Herangensweisen in der Algorithmenentwicklung. Prof. Dr. Peer Kröger: EiP (WS 18/19) Teil 3: Daten und Algorithmen 0. 3

Kapitel 1: Datendarstellung durch Zeichenreihen 1. Datendarstellung durch Zeichenreihen 2. Syntaxdefinitionen 3. Eigenschaften von Algorithmen 4. Paradigmen der Algorithmenentwicklung 4

Daten Wir betrachten zunächst die Daten (Objekte), die durch Algorithmen verarbeitet werden sollen. Wir wollen insbesondere klären, wie diese Daten dargestellt werden. Typische Daten sind Zahlen, z.b. die Zahl drei, die wie folgt dargestellt werden kann: 3 DREI III drei ausgestreckte Finger einer Hand... 5

Datendarstellung Wir unterscheiden bei einem Objekt die Darstellung, (Syntax, Bezeichnung ), seine Bedeutung, (Semantik, Information ). Man kann die Syntax (von etwas) definieren, ohne die entsprechende Semantik zu kennen. Die Syntax von Daten (genauso: Programmiersprachen) muss formal (und eindeutig) definiert sein (z.b. mit Hilfe von Grammatiken ). Wir führen hier allerdings eher eine informelle Diskussion und verweisen auf andere Vorlesungen. 6

Datendarstellung Einige der oben genannten Datendarstellungen für die Zahl drei sind für maschinelle Verarbeitung nicht geeignet. Alle geeigneten Datendarstellungen beruhen auf dem Grundprinzip der Zeichenreihe, die wir im folgenden formal definieren. Dazu benötigen wir zunächst eine Menge an Zeichen, die zur Bildung von Zeichenreihen zur Verfügung steht. 7

Alphabet Definition (Alphabet) Ein Alphabet A ist eine endliche Menge, deren Elemente Zeichen genannt werden. Alphabete, die genau zwei Zeichen enthalten heißen binär. Beispiele Menge der Großbuchstaben: {A,B,C,...,Z} Menge der Dezimalziffern: {0,1,2,3,...,9} Menge der Vorzeichen: {+, } Menge der Richtungszeiger eines Lifts: {, } Ein wichtiges binäres Alphabet besteht aus den Binärziffern (Bits) {0, 1}. 8

Zeichenreihe Definition (Zeichenreihe) Eine Zeichenreihe über einem Alphabet A ist eine (endliche) Folge von Zeichen aus A. Formal ist damit auch die leere Folge eine Zeichenreihe. Wir schreiben Zeichenreihen/Folgen (x 1, x 2,..., x n ) auch als x 1 x 2... x n. 9

Zeichenreihe Beispiele Sei A 1 = {A,B,C,...,Z} Die Folge INFORMATIK ist eine Zeichenreihe über A 1. Die Folge (R,I,C,H,T,E,R) ist eine Zeichenreihe über A 1. Die Folge Kröger ist keine Zeichenreihe über A 1. Warum? Sei A 2 = {0, 1} Die Folge 0 ist eine Zeichenreihe über A 2. Die Folge 1 ist eine Zeichenreihe über A 2. Die Folge 01 ist eine Zeichenreihe über A 2. Die Folge 10 ist eine Zeichenreihe über A 2. Die Folge 11 ist eine Zeichenreihe über A 2. Die Folge 00 ist eine Zeichenreihe über A 2.... 10

Bezeichnung von Daten Wir verwenden ausschließlich Zeichenreihen zur Bezeichnung von Daten. Im Folgenden betrachten wir als Beispiel die Darstellung von natürlichen Zahlen (Elementen der Menge N 0 ). Die Zahl Dreizehn lässt sich u.a. durch folgende Zeichenreihen bezeichnen: 13 (A = {0, 1, 2,..., 9}), DREIZEHN (A = {A,B,...,Z}), (A = { }). Nicht alle diese Darstellungen sind für den praktischen Gebrauch (z.b. Rechnen) geeignet. 11

Zifferndarstellung / p-adische Zahlendarstellung Am besten für die Darstellung von natürlichen Zahlen eignet sich die Zifferndarstellung über einem vorgegebenen Alphabet von Ziffern, d.h. die Zeichen des zugrunde liegenden Alphabets sind Ziffern (oder werden als Ziffern interpretiert). Beispiel für eine Zifferndarstellung ist die allgemein gebräuchliche Dezimaldarstellung über dem Alphabet {0, 1, 2,..., 9}. Die folgende Definition der p-adischen Zahlendarstellung führt allgemein die Zifferndarstellung über ein beliebiges Alphabet von Ziffern ein. 12

Zifferndarstellung / p-adische Zahlendarstellung Definition (p-adische Zahlendarstellung) Sei p N, p 2 und A p = {z 0, z 1..., z p 1 } ein Alphabet mit p Zeichen (genannt Ziffern) z 0, z 1..., z p 1. Die Funktion Z : A p N 0 bildet jedes Zeichen aus A p auf eine natürliche Zahl wie folgt ab: Z (z i ) = i für i = 0,..., p 1. Eine Zeichenreihe x = x nx n 1... x 1 x 0 (der Länge (n + 1)) über A p (d.h. x i A p für 0 i n) bezeichnet die Zahl Z(x) = p n Z (x n) + p n 1 Z (x n 1 ) +... + p Z (x 1 ) + Z (x 0 ). Zur Verdeutlichung schreiben wir auch x p statt x. x p heißt p-adische Zahlendarstellung der Zahl Z(x p) N 0. 13

Zifferndarstellung / p-adische Zahlendarstellung Nochmal: Z(x) = p n Z (x n) + p n 1 Z (x n 1 ) +... + p Z (x 1 ) + Z (x 0 ). Beispiel Mit p = 10 und A 10 = {z 0, z 1..., z 9 } erhält man die Dezimaldarstellung wenn man statt den Ziffern z i des Alphabets gleich die Zahl Z (z i ) schreibt (also z.b. statt z 3 schreibe Z (z 3 ) = 3 bzw. statt z 9 z 8 z 3 direkt 983): Z(983 10 ) = 10 2 9 + 10 1 8 + 10 0 3 = neunhundertdreiundachtzig. (Wir schreiben direkt A 10 = {0, 1..., 9} anstelle von {z 0, z 1..., z 9 }) 14

Zifferndarstellung / p-adische Zahlendarstellung Beispiele p = 2 und A 2 = {0, 1} (Binärdarstellung): Z(1111010111 2 ) = 2 9 1+2 8 1+2 7 1+2 6 1+2 5 0+2 4 1+2 3 0+2 2 1+2 1+1 = neunhundertdreiundachtzig. p = 8 und A 8 = {0, 1, 2, 3, 4, 5, 6, 7} (Oktaldarstellung): Z(1727 8 ) = 8 3 1 + 8 2 7 + 8 2 + 7 = neunhundertdreiundachtzig. p = 16 und A 16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} (Hexadezimaldarstellung): Z(3D7 16 ) = 16 2 3 + 16 13 + 7 = neunhundertdreiundachtzig. 15

Zifferndarstellung / p-adische Zahlendarstellung Führende Nullen sind in der Definition der p-adischen Zahldarstellung zugelassen, z.b. ist die Zeichenreihe 000983 eine zulässige Dezimaldarstellung und bezeichnet die gleiche Zahl wie die Zeichenreihe 983. Offensichtlich können führende Nullen immer weggelassen werden, außer bei der Bezeichnung 0 für die Zahl null. Für jede Zahl aus N 0 gibt es für beliebiges p 2 eine p-adische Darstellung. Betrachtet man nur Darstellungen ohne führende Nullen, so ist (zu festem p 2) die p-adische Zahldarstellung eindeutig. 16

Menschengerechte Darstellung von Daten Zur Entwicklung von Algorithmen (z.b. mittels Programmiersprachen) werden wir typischerweise die Dezimaldarstellung der natürlichen Zahlen verwenden. Allgemein gibt es für die meisten Daten eine Standarddarstellung bei denen die Lesbarkeit der Darstellung für den menschlichen Benutzer im Vordergrund steht. Eine Maschinen-nahe Darstellung ist die Binärdarstellung, aber auch die Oktal- und Hexadezimaldarstellung, die für uns Menschen meist etwas ungewöhnlicher sind. 17

Menschengerechte Darstellung von Daten Wir verwenden hier folgende Standardbezeichnungen wie sie in den üblichen höheren Programmiersprachen gebräuchlich sind: Natürliche Zahlen N 0 Dezimaldarstellung (ohne führende Nullen) Ganze Zahlen Z wie natürliche Zahlen, ggf. mit Vorzeichen -, z.b. 3,-3. Reelle Zahlen R Gleitpunktdarstellung, siehe später. Wahrheitswerte B TRUE und FALSE für wahr bzw. falsch. 18

Darstellung von Zeichen und Texten Eine Dezimaldarstellung (z.b. 983) stellt eine natürliche Zahl dar, die verarbeitet werden kann. Die Zeichenreihe selbst (und nicht die dargestellte Zahl) könnte aber auch Gegenstand der Verarbeitung sein. Zeichenreihen können also nicht nur Darstellungen von Objekten sein, sondern auch selbst Objekte, die dargestellt werden müssen. Zeichenreihen heißen in diesem Zusammenhang Texte. 19

Darstellung von Zeichen und Texten In der Praxis wird zur Bildung von Texten häufig das sog. ASCII-Alphabet benutzt. Das ASCII-Alphabet repräsentiert eine Menge von Zeichen, die wir im folgenden als CHAR bezeichnen. Die Elemente von CHAR finden Sie in allen gängigen Lehrbüchern. 20

Maschinengerechte Darstellung von Daten Wie bereits erwähnt wird auf Rechenanlagen meist eine andere Darstellung der Daten gewählt (typischerweise Zeichenreihen über den oben benannten Alphabeten A 2, A 8 und A 16 ). Aus technischen Gründen kann die kleinste Speichereinheit eines Computers (das Bit) nur zwei Zustände speichern: Zustand 1: es liegt (elektr.) Spannung an. Zustand 0: es liegt keine Spannung an. Daher werden Werte (Daten/Objekte) als Bitmuster (Zeichenreihe über dem Alphabet A 2 = {0, 1}) codiert gespeichert (auch Darstellungen über A 8 und A 16 sind mit diesen technischen Gegebenheiten gut vereinbar). 21

Maschinengerechte Darstellung von Daten Intern kann der Computer also z.b. die natürlichen Zahlen in Binärcodierung repräsentieren. Ganze Zahlen können intern ebenfalls leicht als Zeichenkette über dem Alphabet A 2 = {0, 1} codiert werden (z.b. mit einem führenden Bit für das Vorzeichen; Genaueres darüber werden Sie in der Vorlesung Rechnerarchitektur lernen). Zeichen aus dem ASCII-Alphabet werden intern meist mit einer natürlichen Zahl repräsentiert, also auch hier gibt es eine binäre Darstellung. 22

Maschinengerechte Darstellung von Daten Die Binärdarstellung der reellen Zahlen ist etwas komplizierter. Die Gleitpunktdarstellung einer Zahl z ist z = m 2 e, wobei sowohl m (Mantisse) als auch e (Exponent) binär repräsentiert werden (können). In vielen Programmiersprachen (z.b. Java) wird eine reelle Zahl dargestellt durch z = m 10 e, z.b. 3.14, 7.45, 1.33E 2 (für 1.33 10 2 ). 23

Maschinengerechte Darstellung von Daten Eine genaue Spezifikation lernen wir im nächsten Abschnitt kennen. Achtung: Für viele reelle Zahlen gibt es gar keine derartige Darstellung (z.b. für 2). Die darstellbaren Zahlen heißen auch Gleitpunktzahlen und sind eine (echte) Teilmenge von R. Dieser Aspekt der maschinengerechten Darstellung von Daten ist bei der Entwicklung von Algorithmen möglicherweise wichtig! Warum? 24

Maschinengerechte Darstellung von Daten Ein weiterer Aspekt der maschinengerechten Darstellung ist, dass die Ressourcen (Speicherzellen) einer Rechenanlage begrenzt sind. Es stehen daher für die Darstellung von Daten immer nur endlich viele Bits zur Verfügung. D.h. zur Darstellung einer beliebigen natürlichen Zahl stehen nur Zeichenketten mit fixer Länge zur Verfügung (notfalls mit führenden Nullen). 25

Maschinengerechte Darstellung von Daten Achtung: Werte, deren Darstellung mehr Zeichen (Bits) benötigen würden, können somit nicht dargestellt werden. Die Länge der zur Verfügung stehenden Zeichenketten hat damit offenbar Einfluss auf den Wertebereich der darstellbaren Objekte. Dies ist bei der Entwicklung von Algorithmen möglicherweise ebenfalls wichtig! Warum? 26

Maschinengerechte Darstellung von Daten Die Elemente des ASCII-Alphabets (zur Darstellung von Zeichen und Texten) werden intern durch natürliche Zahlen codiert. Diese Zahlen werden im Rechner entsprechend binär dargestellt (urspr. als 7-Bit Zeichenreihe, später als 8-Bit z.b. als UTF-8). Beispielsweise ist dem Symbol a (Element des ASCII-Alphabets) der Wert 97 10 bzw. 01100001 2 zugeordnet, dem Symbol 4 (als Zeichen, d.h. Element des ASCII-Alphabets) der Wert 52 10 bzw. 00110100 2. Achtung: Einheitliche Zeichencodierung ist eines der größten ungelösten Problem der Informatik... 27

Zusammenfassung Daten werden typischerweise durch Zeichenreihen dargestellt. Die p-adische Darstellung definiert die Darstellung von natürlichen Zahlen über ein Alphabet mit p Zeichen. Die meisten Programmiersprachen verwenden die menschengerechte Dezimaldarstellung (p = 10) als Standard-Darstellung. Auf Basis der p-adischen Darstellung lassen sich auch ganze Zahlen und reelle Zahlen (Gleitpunktdarstellung) darstellen. Zeichen als Daten werden typw. über das ASCII Alphabet definiert/durch dessen Elemente repräsentiert. 28

Zusammenfassung Die maschinengerechte Darstellung von natürlichen Zahlen ist die Binärdarstellung (p = 2). Auf Basis der Binärdarstellung lassen sich auch ganze Zahlen und reelle Zahlen darstellen. Die Binärdarstellung von reellen Zahlen ist allerdings unvollständig. Außerdem ist zu beachten, dass für die Zeichenreihen, die Zahlen repräsentieren, nur eine begrenzte (meist vorher definierte) Anzahl von Zeichen (Bits) zur Verfügung steht. Die Elemente des ASCII-Alphabets werden intern wiederum binär codiert (z.b. UTF-8). 29