Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur...

163
Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3. Modula-2 4. Zahlendarstellung

Transcript of Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur...

Page 1: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Teil III : Vom Algorithmus zur Programmiersprache

1. Algorithmen, Programme, Sprachen

2. Programm- und Sprachelemente

3. Modula-2

4. Zahlendarstellung

Page 2: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

1. Algorithmen, Programme, Sprachen

• Der Algorithmusbegriff• Merkmale und Eigenschaften von Algorithmen• Nachrichten und Sprachen• Formale Sprachen – Syntax

Page 3: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Der Algorithmusbegriff

Begriffsklärung:Ein Algorithmus ist eine Vorschrift, eine Anleitung zur Lösung einer Aufgabenstellung, die so präzise formuliert ist, dass man sie im Prinzip „mechanisch“ ausführen kann

Das heisstes werden Verarbeitungsvorschriften als Nachrichten formuliert, die interpretiert werden müssen

Randbedingungen� verschiedene Formalismen sind möglich� gemeinsames Sprachverständnis ist Voraussetzung

Page 4: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Der „ganze Alltag“ besteht aus Algorithmen:

� Gebrauchsanweisung, Bedienungsanleitung� Rezepte zur Zubereitung von ...� Anleitungen zum „Basteln“� Vorschriften nach denen man sich richtet (oder auch nicht)� Prozessabläufe (Waschmaschine)

Aha: Algorithmus Reproduzierbarkeit

Page 5: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel 1: Rezept für MarmorkuchenZutaten:

250g Mehl, 150g Zucker, 120g Butter, 1/2 Päckchen Backpulver, 3 Eier, 1/4 l Milch, 1 Löffel Kakaopulver, eine Prise Salz, gestossene Vanille

Zubereitung:Die Butter mit den Eigelben schaumig rühren, nach und nach abwechselnd Milch, Zucker, das mit Backpulver gesiebte Mehl, Vanille, Salz und zum Schluss den festen Eischnee untermischen. Den Teig halbieren und unter die eine Hälfte den Kakao mischen. Den hellen Teig in eine gefettete, mit Mehl ausgestreute Form füllen, den dunklen Teig darauf verteilen, eine Gabel mehrmals spiralig durch den Teig ziehen. Den Kuchen im vorgeheizten Backofen bei mittlerer Hitze (ca. 180º) backen. Backzeit ca. 50 min.

mehr oder minder eindeutige Eingabeparameter

Page 6: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel 2: Addieren nach Adam Riese

Page 7: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel 3: Schaltbild (eines Diodenempfängers mit 2-stufigem NF-Verstärker)

Page 8: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel 4: Suchen und Finden einer Ehefrau

Page 9: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel 5: Anleitung Münzfernsprecher

Elementare Eigenschaften eines Algorithmus:� ausführbar und reproduzierbar� aus schrittweise ausführbaren elementarer Operationen

zusammengesetzt� was heisst „elementar“;

Abstraktionsniveau (minimaler Grad an Detaillierung)� endliche Beschreibung� endliche Ausführungszeit (Termination)� unabhängig von Programmiersprache und Computer

Page 10: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Entwicklung eines Algorithmus� schrittweise Verfeinerung mit dem Ziel, die Komplexität zu bewältigen

� Vorgehensweise:� Zunächst Lösung in großen "Einheiten" angeben� Dann jede "Einheit" als gesondertes "Problem" behandeln

Beispiel 6: Radwechsel, da Reifen platt� Lösung: Führe folgende Schritte durch

1. Schrauben lösen2. Wagen anheben3. Rad entfernen4. Reserverad montieren5. Wagen absetzen6. Schrauben festziehen

� Vorteil der Vorgehensweise� "roter Faden"� "großes Problem" wird auf "kleinere Probleme" zurückgeführt

Page 11: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Einzelne Schritte lassen sich weiter detaillieren:2.1 Wagenheber ansetzen2.2 Wagen hochpumpen3.1 Schrauben entfernen3.2 Rad abnehmen

� Auch bereits detaillierte Schritte können noch weiter verfeinert werden2.1.1 Bordbuch holen2.1.2 Ansatzpunkte für Wagenheber ermitteln2.1.3 geeigneten Ansatzpunkt auswählen2.1.4 Wagenheber am gewählten Ansatzpunkt ansetzen

Grad der Verfeinerung (abhängig davon für wen/was bestimmt)

� für wen: Mensch oder Maschine

� für was: Grobkonzept oder Feinkonzept

Page 12: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Selektion (Auswahl)� ist eine Auswahl unter Anweisungsalternativen; sie erfolgt nach explizit angege-

benem Auswahlkriterium (mit den Werten "wahr" oder "falsch"); eine Auswahl kann u.U. "geschachtelt" auftreten aber auch als Mehrfach-Auswahl.

� Auswahl und ...� bedingte Anweisung:

Falls mindestens 1 Schraube festsitzt dann Rostlöser verwenden� alternative Anweisungen:

Falls Ersatzreifen vorhanden dann wechsle den Reifen sonst hole Hilfeoder auchFalls kein Ersatzreifen vorhanden dann hole Hilfe sonst wechsle den Reifen

� Geschachtelte Anweisungen:Falls Ersatzreifen vorhanden dann falls Ersatzreifen nicht platt dann wechsle Reifen sonst hole Hilfe

� Mehrfach-Auswahl:Falls in der Nähe

Telefonzelle: ADAC anrufenWohnhaus : bitte Anwohner um HilfeTankstelle: Tankwart um Hilfe bitten

ansonsten: Warten bis jemand vorbeikommt

Page 13: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Wiederholte Ausführung einer Einzelanweisung oder einer Folge von Anweisungen

� Wiederholungen ...� in vorbestimmter Anzahl:

wiederhole für Schraube 1 bis Schraube 5:Kreuzschlüssel aufsetzen;Falls Schraube lösbar

dann drehe Schraube eine Drehung nach linkssonst Rostlöser verwenden;

warten;drehe Schraube eine Drehung nach links

� in Abhängigkeit einer Bedingung:während Schraube noch mit Nabe verbunden:

drehe Schraube eine Drehung nach linksoder auchwiederhole

drehe Schraube eine Drehung nach linksbis Schraube nicht mehr mit Nabe verbundenoder auchwiederhole immer wieder

drehe Schraube eine Drehung nach links;falls Schraube nicht mehr mit Nabe verbunden dann höre auf

Wiederholung

Page 14: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Merkmale und Eigenschaften von Algorithmen

� Algorithmen und Objekte können elementar aber auch zusammengesetzt sein

� Operationen auf benannten Objekten

� Ausführung von Algorithmus-Teilen sequentiell/parallell

� � nicht-elementare Unteralgorithmen, die durch ihren„Namen“ aufgerufen werden � Prozedurkonzept

� � bedingte Ausführung von Verarbeitungsschritten

� � Wiederholungsanweisungen � Mehrfachausführungen

� meistens auch:� � Eingabe-Objekte zur Ausführung des Algorithmus� � Ausgabe-Objekte nach Ausführung des Algorithmus

Wiederholungsanweisungen � Mehrfachausführungen

Page 15: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Weitere Eigenschaften

� Sequentialität / Parallelität / Kollateralität (sequentiell oder parallel)

� Termination� terminierender Algorithmus kommt in endlich vielen Schritten zum

Ende

� Determinismus� deterministischer Algorithmus besitzt eindeutig vorgeschriebenen

Verlauf

� Determiniertheit� determinierter Algorithmus führt zu eindeutigem Ergebnis� deterministischer Algorithmus ist immer determiniert (verkörpert also

eine Abbildung)� nicht-deterministischer Algorithmus ist bisweilen determiniert

Page 16: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aussagen über Algorithmen

� Voraussetzungen� unter welchen Bedingungen arbeitet der Algorithmus?

� Menge aller erlaubten Eingaben� Menge aller möglichen Ausgaben (bei erlaubten Eingaben)

� Was geschieht bei falscher Eingabe

� Terminationsverhalten� endet ein Algorithmus für alle möglichen Eingaben? Beweis!� Ist es möglich, den Algorithmus in einen nicht-endenden Zyklus

zu bringen?

� Korrektheit� „Übereinstimmung“ Algorithmus - Prozess?� liefert der Algorithmus bei Ausführung die richtige Ausgabe als

Funktion der Eingabe?

Page 17: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aussagen über Algorithmen (cont‘d)

� Aufwand/Effizienz� Speicherplatzbedarf?� Ausführungszeit?� Abhängigkeit der Ausführungszeit von der Eingabe?

Der Korrektheitsbeweis für einen Algorithmus umfasst den Beweis der Termination und den Beweis der Korrektheit!

Urfrage zur Algorithmisierbarkeit/Berechenbarkeit:Was lässt sich algorithmisch lösen (berechnen)?Gibt es einen Algorithmus, der in endlich vielen Schritten mit der Ausgabe = f(Eingabe) stoppt, d.h. die (bekannte) Abbildung f: (Eingabe) ��� (Ausgabe) realisiert?

Page 18: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Nachrichten und Sprachen

� Die Form einer Nachricht wird durch eine Sprachefestgelegt

� Eine Sprache ist hierarchisch aufgebaut

Zeichen ���� Folgen von Zeichen

Wörter ���� Folgen von Wörtern

Sätze ���� Folgen von Sätzen

Sprache

Page 19: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Charakteristika von Sprachen

� Grundelement „Zeichen“� bildet die kleinste Einheit (bzgl. best. Abstraktionsebene)� ist Element einer Grundzeichenmenge („Alphabet“)� Bedeutung ist durch Pragmatik festgelegt

� Zeichenfolgen (= Nachrichten)� werden durch Verkettung gebildet� Regeln für erlaubte/gültige Verkettungen � Syntax

� Interpretation der Zeichenfolgen (= Information)� Feststellung der Bedeutung der Zeichenfolgen � Semantik

Page 20: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel: Katz und Maus

Pragmatik:(Die Darstellungen von Katze und Maus sind „selbsterklärend“)

Syntax: Katze frisst MausMaus frisst Katze

Semantik: Maus ist Beutetier von KatzenKatze jagt Vögel, Mäuse

Page 21: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Definition algorithmischer Sprachen

� Syntax� regelhafte Beschreibung (Festlegung) der äusseren Form einer

Zeichen- oder Wortfolge, die ein legales Konstrukt der algorith-mischen Sprache ergibt

� Regeln sind abhängig oder unabhängig von der Interpretation for-mulierbar

� Semantik� regelhafte Bedeutungszuweisung zu bestimmten, syntaktisch

korrekten Kombinationen von Wörtern� Voraussetzung: „höhere“ Sprache (Metasprache) zur Erläuterung

der Bedeutung der Programmiersprachenkonstrukte

� Pragmatik� Zurückführung einer in der Sprache als primitiv anzusehenden

Operation auf „elementarere Bestandteile“

Page 22: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel: Multiplikationa := 5;b := 6;c := a • b �� c = 30

Syntax: lt. Konstruktionsregeln ein gültiger Ausdruck

Semantik: Bedeutung: Multiplikation zweier Zahlen a, bmit bestimmtem Typ (und Wertebereich)

Pragmatik: Zurückführung der Multiplikation auf einzelneAdditions- und Shiftbefehle

Page 23: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Prinzipielle Fragestellungen zu:Formale Sprachen und Compiler � Spezifikation und Analyse von Programmiersprachen

� Wie sieht eine Grammatik für eine (Programmier-)Sprache aus?

� Wie kann die Zugehörigkeit eines Programms zu der durch die Grammatik definierten Sprache überprüft werden und wie sieht ggf. dessen „syntaktische Struktur“ aus?

� Wie kann die Eindeutigkeit der Syntax garantiert werden mit dem Ziel einer eindeutigen Analyse (eindeutige Semantik), deren Ergebnis (ausführbarer Code) dann auf einem Rechner ausgeführt werden kann?Die Konstruktion von Kunstsprachen („formale Sprachen“) und die Analyse ihrer Sprachelemente ist für die Informatik von zentraler Bedeutung!

Page 24: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Formale Sprachen - Syntax

Wiederholung: Syntax und Semantik von Programmiersprachen

Natürliche Sprachen und Programmiersprachen haben feste Regeln für den Aufbau von Sätzen in der Sprache (Syntax = Lehre vom Satzbau)

Programmiersprache: Zusammenfassung aller laut der Syntax korrekten Satzkonstruktionen (Programme)

Syntax: Erzeugung gültiger Satzkonstruktionen mittels der in der Grammatikfestgelegten Regeln

Semantik (Bedeutungslehre): Beschreibung der Wirkung eines Programmsauf den Rechner, d.h. welche Funktion durch das Programm berechnet wird.

Im Folgenden beschäftigen wir uns mit syntaktischen Strukturen, die Semantik bleibt unberücksichtigt.

Page 25: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Grammatiken und (Formale) Sprachen

� Zeichen, Worte, Sprachen

� Zeichen (Symbole) sind Elemente von ZeichenmengenS: endliche, nicht-leere Menge von Symbolen (Alphabet), d.h.S � { }, card(S) = |S| = n < �

� Worte (Symbol-, Zeichenketten, strings)mit den Elementen si�S werden Zeichenketten „über dem Alphabet S“ durch Aneinanderhängen (Konkatenation) gebildet:

S1 = SS2 = S x S�

Sk = S x S x ... x S (k-fach) �

Sk: Menge aller Zeichenketten w = s1s2...sk der Länge k über SS�: Menge aller Zeichenketten endlicher Länge über S incl.

leerem Wort � (S� ist freie Sprache über S)

Page 26: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Sprache über SS� enthält alle, durch beliebige Anordnung von si�S konstruier-baren Worte

Beschränkung auf „legale“ Konstrukte

L = R(S) Regelsprache aus S�

� d.h. L � S�

Frage: Wie beschreibt man eine Regelsprache?

Page 27: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Grammatik

� Generierung („Produktion“) einer Sprache mittels einer Grammatik

� G = (SN, ST, P, wS) mitSN: Menge der NichtterminalzeichenST: Menge der Terminalzeichen SN � ST = P = {pi}, |P| = n < �: Produktionen (Ersetzungsregeln)P� (SN ST)� x (SN ST)�pi : � � , wenn (�, ) � PwS : Startwort, wS � (SN ST)�, | wS| � 0

� Aus einem Wort u kann ein Wort v dadurch abgeleitet werden, indem ein � in u durch ersetzt wird und damit aus dem Wort u das Wort v entsteht.

Page 28: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Ableitung eines Worts

� Problem Es liegt ein Wort w vor; w gehört zur Sprache, also w � R(S)

� StrategienTop-Down: ausgehend vom Startsymbol wird mittels der Produktionen (Ersetzungsregeln) abgeleitet, bis die gegebene Folge „generiert“ ist.Bottom-Up: umgekehrt (durch „Reduktion“)

� BeispielG = (SN,ST,P,wS)G = ( {S,A}, {0,1}, {S � 0A11, A � , A � 0A, A � 1A}, S)

(1) (2) (3) (4)

Problem: Gehört 0000111 zur Sprache?

Top-Down: S � 0A11 � 00A11 � 000A11 � 0000A11 �(1) (3) (3) (3) (4)

� 00001A11 � 0000111(4) (2)

Page 29: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Kontextfreie Grammatiken und Programmiersprachen

� Kontextfreie Grammatik

� G = (SN, ST, P, Z) mitSN, ST: wie gehabt P� SN x (SN ST)� , d.h. pi : A � , wenn (A, ) � P, wobei A � SN

Z : Startsymbol, Z� SN

� Beispiel: siehe letzte Folie

Page 30: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� EBNF (Erweiterte Backus-Naur-Form)� verkürzte Darstellung für kontextfreie Grammatiken� Alternative: A � � |

als Abkürzung für die Produktionen A � �, A �

� Wiederholungen� 0- oder 1-mal �: A � [�]� 0-, 1- oder n-mal �: A � {�}

� Beispiel von vorneaus den Produktionen

S � 0A11, A � , A � 0A, A � 1Awird in EBNF

S � 0A11, A � {0 | 1}

Page 31: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Syntaxdiagramme� Graphische Darstellung für kontextfreie Grammatiken� Grundbausteine der Diagramme

� Nicht-terminale Zeichen (Variablen) A(� Platzhalter für ein weiteres Diagramm)

� Terminalzeichen s(� Zeichen der formalen Sprache)

� Konkatenationen (Wortkonstruktionen)(� Übergang von einem Knoten

( ) zum Folgenden)

� Beispiel Grammatik von vorne

A

s

0 1 1AS

1

0

A

Page 32: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Zusammenhang: EBNF – Syntaxdiagramm

1. Alternative

2. Verkettung

3. Wiederholungen

0- oder 1-mal �

0-, 1- oder n-mal �

.| BaA �

.aBA �

� �.��A

� �.��A

A a

B

A a B

Page 33: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

2. Programm- und Sprachelemente

• Programmieren und Sprachen• Erste Schritte in MODULA-2• Syntaxdiagramme

Page 34: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Programmieren und Sprachen

Entwurf und Notation von Programmen

Ziel ist es,einen Algorithmus zur Lösung eines Problems in einer maschinell erfassbaren Form zu formulieren

Programmiersprache mit Aufbauregeln (Syntax) undStandardinterpretation (Semantik)

Hauptaufgabe dabei ist es allerdings,einen (abstrakten) Algorithmus zu konzipieren und verifizieren; Programmieren ist somit eine konstruktive Tätigkeit, mehr als nur Codierung� Spezifikation, Entwurf, Modularisierung, ...

Empfehlenswert ist es,systematisch („vom Problem zur Maschine“) vorzugehen („Programmierzyklus“)

Page 35: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Programmierzyklus (aus Puchan et al., 1994)

Problem

Spezifikation desProblems

Entwicklung einesAlgorithmus

Kodierung mittelsProgrammiersprache

Testen, d.h. prüfen ob ...

EditierenCompilierenAusführen

am Rechner:

falls o.k.

richtig kodiert?(Syntax)

... dasProgrammdemAlgorithmusentspricht?

... derAlgorithmusdasProblemlöst?

Testen & beweisbare KorrektheitProgramm ist fertig und „wahrscheinlich“ korrekt

Page 36: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Entwurf Realisierung am Rechner

Algorithmen & Datenstrukturen

Algorithmen

reale Phänomene

Datenstrukturen

Programme

Objekte

Daten

Codierung

Strukturierung

ModellbildungAbstraktion

� Spezifikation

Formulierung� Syntax

Page 37: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Programmiersprachen - Programmierstile

� imperativ (algorithmisch, prozedural)� PASCAL, MODULA-2, BASIC, ALGOL, COBOL, C, FORTRAN

� funktional� LISP, Gofer, OPAL, Haskell

� objektorientiert� Smalltalk, C++

� prädikativ (logisch)� PROLOG

Bemerkungen• OO-Sprachen enthalten imperativen „Kern“• Imperative Sprachen sind noch stets

Weitesten verbreitet

Page 38: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Erste Schritte in MODULA-2

Grundlegender Aufbau von MODULA-2 Programmen

� Komponenten eines Programms

� Beschreibung von Aktionen� Anweisungen („statements“)� Kontrollkonstrukte� Abstraktion durch Prozeduren

� Beschreibung von Daten� Deklarationen und Definitionen

� Manipulationen auf einfachen und komplexen Daten

Page 39: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Programmschema

MODULE Name [Priorität]

IMPORTDeklarationen von Konstanten, Typen, Variablen, ...

BEGIN

Initialisierungsteil

Verarbeitungsteil

Ausgabeteil

END Name.

Rumpf

Page 40: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Namen und Symbole

� Namen (auch: Bezeichner, Identifier)

� Frei gewählte (sinnvolle!) Bezeichnungen für „Elemente“

� Zugriff auf die Elemente über ihren Namen

� Aufbau

Page 41: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Einige reservierte Namen für Modula-2

Page 42: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Operationssymbole und Begrenzer

Page 43: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (1)

Page 44: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (2)

Page 45: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (3)

Page 46: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (4)

Page 47: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (5)

Page 48: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (6)

Page 49: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (7)

Page 50: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (8)

Page 51: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (9)

Page 52: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaxdiagramme für Modula-2 (10)

Page 53: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

3. Modula-2

• Ein erstes Programm• Einfache Datentypen• Operationsprinzipien – Anweisungen• Einfache selbstdefinierte Typen• Strukturierte Daten

Page 54: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Ein erstes Programm

Bibliothek (explizite Nennung)MODULE Ueberschrift;

FROM InOut IMPORT WriteString, WriteLn;

BEGINWriteString(“Allgemeine Informatik I");WriteLn;WriteString(“Wintersemester 2001/2002");WriteLn;

END Ueberschrift.

Ausgabe des angegebenenTexts mit Zeilenvorschub

Page 55: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Kommunikation: Programm - Betriebssystem

DiensteAnforderungen

Bibliotheks-ModulBibliotheks-ModulBibliotheks-ModulBibliotheks-Modul

Modula-2 Programm

IMPORTs

Betriebssystem(hier: UNIX)

Page 56: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� in Modula-2

� Sprachkern ist standardisiert

� Zugriff auf Betriebssystem-Dienste via Bibliotheks-Module� Bibliotheken sind nicht standardisiert� Bibliotheken gehören nicht zum Sprachumfang

� Beurteilung� Nachteil: Unklarheit bzgl. verfügbarer Funktionalität und Struktur der

Bibliotheken� Vorteil: Implementierung der Sprache rechner-/systemunabhängig

� Ulmer Modula-2 Implementierung� Liste und Doku unter:

http://www.mathematik.uni-ulm.de/modula/man/

Page 57: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gestaltung von Programmen (Grundsätzliches)

� Grundregeln zu Programmaufbau und -gestaltung� jedes Programm besteht aus (mehreren) Modulen� jeder Modul ist ein eigenes Dokument� Quelltext ist zeilenweise organisiert, mit je 1 Anweisung oder

Vereinbarung pro Zeile� Verwendung von Leerzeilen (Absetzen von Blöcken)� Einrücken von Anweisungen (entsprechend „logischer Struktur“)� sinnvolle Verwendung von Kommentaren (* ... *)

� Kommentare� Syntax: beliebiger, in (* ... *) eingeschlossener Text� sinnvoll einsetzen

� Modulanfang: Kurzbeschreibung der Aufgabe� Beschreibung der Ein- und Ausgabegrößen� Erläuterung des logischen Programmablaufs

(grob strukturierter Algorithmus, Invarianten)� Erklärung von Variablen, Typen, .... (falls nötig)� Kennzeichnung von END

� nicht sinnvoll � Unter-, aber auch Überkommentierung� Paraphrasierung des Programmtexts

Page 58: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Ein inakzeptables Programm

MODULE Mehrwertsteuer;FROM RealInOut IMPORT ReadReal, WriteReal, WriteFloat; FROM InOut IMPORT WriteString, WriteLn;CONST M = 0.16;VAR x,y : REAL;

BEGIN (*BEGIN Anweisung *)WriteString("Geben Sie den Preis ein: ");ReadReal(x); (* Einlesen von x *)y := x • M; WriteLn;WriteString("Die MWSt beträgt (Float): ");WriteFloat(MWSt, 8, 2); WriteLn;WriteString("Die Mehrwertsteuer beträgt (Real): ");WriteReal(y, 10);WriteLn; END Mehrwertsteuer.

Page 59: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Übersetzung von Programmen („Compilation“)

Fehlermeldungen(Syntaxfehler)Modula-2

ProgrammModula-2Compiler

ausführbarer Codea.out <name>.m2

UNIX

a.outinput output

UNIX

Page 60: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Übersetzung und Ausführung von Programmen

�Übersetzung � m2c <Name>.m2

� Aufruf des Modula-2 Compilers (Programmstart)� input = <Name>.m2; output = a.out (ausführbares Programm)

� m2c -o <Name> <Name>.m2� -o ist Compileroption� das ausführbare Programm heisst statt a.out jetzt <Name>

�Ausführung� Start mittels ...$ a.out� bzw. Start mittels ...$ <Name>

Page 61: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Einfache DatentypenEigenschaften eines „Typs“

�Grundsätzliches� Der (Daten-)Typ kennzeichnet die aktuelle Wertemenge eines Objekts

(Konstante, Variable, Ausdruck, Funktion, ...)� Typ-Zuordnung durch Vereinbarung (= Deklaration)

�Eigenschaften� Der Datentyp bestimmt die Wertemenge,

� zu der eine Konstante gehört� deren Werte durch eine Variable oder einen Ausdruck angenommen

werden können� deren Werte durch einen Operator oder eine Funktion berechnet werden

können� Der Datentyp ist anhand seiner Notation oder Vereinbarung erkennbar� Jeder Operator bzw. jede Funktion

� erwartet Argumente eines bestimmten Typs� liefert Resultate eines bestimmten Typs

Page 62: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Taxonomie der Datentypen

Datentypen

Einfache Datentypen Strukurierte Datentypen Zeiger Datentypen

GleitkommazahlenREALLONGREALCOMPLEXLONGCOMPLEX

Ganzzahlen undOrdinaltypen

CARDINALINTEGERBOOLEANCHAR

Ausschnittstyp/Unterbereichstyp(subrange)

Aufzählungstyp(enumeration)

ARRAY RECORD SET,PACKEDSET

STRINGBITSET

POINTER

Page 63: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Einfache Standardtypen

�Cardinal� Wertemenge: nicht-negative ganze Zahlen

{0,1, ... ,MaxCard}; MaxCard = 232 - 1� Deklaration:

VAR c,anzahl,monat,hausnummer: CARDINAL;

� Ein-/Ausgabe:FROM InOut IMPORT ReadCard(var),Write(var,breite);

� Operationen:� Addition +� Subtraktion –� Multiplikation *� ganzzahlige Division mit Rest DIV, MOD� Vergleiche =,<>,>=,>,<=,<

� Beachte: Vergleichsoperationen sind zweistellig� Falsch: x < y < z

nur beschränkter Wertebereich verfügbar !!

Page 64: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

� Integer� Wertemenge: vorzeichenbehaftete ganze Zahlen

{-2N-1, ... ,2N-1-1}; N = 32� Deklaration:

VAR k, wert,index,faktor: INTEGER;� Ein-/Ausgabe:

FROM InOut IMPORT ReadInt(var),WriteInt(var,breite);� Operationen:

� Addition +� Subtraktion –� Multiplikation *� ganzzahlige Division mit Rest DIV, MOD� Vergleiche =,<>,>=,>,<=,<� Vorzeichenumkehrung –

� Konvertierung � CardinalVAR i,int : INTEGER;

c,card : CARDINAL;i:= INTEGER(card);c:= CARDINAL(int)

nur beschränkter Wertebereich verfügbar !!

Page 65: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Definition von DIV und MOD � (x,y) � (q,r) mit x,y,q,r � N (oder Z)

wobei x DIV y � q („Quotient“)x MOD y � r („Rest“)

� x DIV y = floor(x/y) =: qwobei q > 0, if sgn(x)=sgn(y)

q = 0, if abs(x)<abs(y)q < 0, if sgn(x)�sgn(y)

� x MOD y =: rwobei r = x - (x DIV y)�y, if r � 0

r = x - (x DIV y)�y + y, if r < 0� „DIV-MOD“ - Identität

(x DIV y)�y + (x MOD y) = x

logisch:„abgerundeter“ Quotient • Nenner + Rest = Zähler

Page 66: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Boolean� Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1}� Deklaration:

VAR present,billig,laut,gefunden : BOOLEAN;� Ein-/Ausgabe:

keine!� Operationen:

� Negation, Verneinung NOT ~� Konjunktion, logisches UND AND &� Disjunktion, logisches ODER OR� Vergleiche

� Verwendung� Ergebnis einer Vergleichsoperation� Ausdruck einer erfüllten oder nicht erfüllten Eigenschaft� Variablen vom Typ BOOLEAN sollten Eigenschaftsworte sein

� Boolean in Bedingungen: IF billig THEN ... ELSE ...

anstatt: IF billig = TRUE THEN ... ELSE ...

IF NOT billig THEN ... ELSE ...anstatt: IF billig = FALSE THEN ... ELSE ...

Rangordnung

Page 67: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiele zur AussagenlogikWahrheitstabelle:

P NOT p

FALSE TRUE

TRUE FALSE

P NOT p

0 1

1 0

Wahrheitstabelle:

p q p AND q p OR q

1 1 1 1

1 0 0 1

0 1 0 1

0 0 0 0

Page 68: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiele zur Aussagenlogik

de Morgan‘sche Regeln

NOT (p AND q) = (NOT p) OR (NOT q)

NOT (p OR q) = (NOT p) AND (NOT q)

Vergleiche:

p q p < q p <= q p > q p >= q

1 1 0 1 0 1

1 0 0 0 1 1

0 1 1 1 0 0

0 0 0 1 0 1

Page 69: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiele zur Aussagenlogik

Implikation:

p q p � q p <= q NOTp OR q

TRUE TRUE TRUE TRUE TRUE

TRUE FALSE FALSE FALSE FALSE

FALSE TRUE TRUE TRUE TRUE

FALSE FALSE TRUE TRUE TRUE

p q p � q p <= q NOTp OR q

1 1 1 1 1

1 0 0 0 0

0 1 1 1 1

0 0 1 1 1

Page 70: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Character� Standardisierter Zeichensatz

� Festlegung einer rechnerinternen Darstellung von Zeichen (Bitmuster)� Festlegung einer Ordnung über der Zeichenmenge� Beispiel: ASCII (American Standard Code for Information Interchange)

� Deklaration: VAR ch1,ch2,ch3 : CHAR;

� Zuweisung:ch1 := "a";ch2 := 'b';ch3 := 65C; (65C ist ASCII-Oktal-Code für das Zeichen 5)

� Ein-/Ausgabe:FROM InOut IMPORT Read,Write;

� Operationen: Vergleiche auf Basis der ASCII-Ordnung� ORD(ch) liefert den ASCII-Wert (Ordnungsnr.) des Characters ch

– Z.B. ORD(M) = 33; ORD(!) = 77� CHR(z) liefert den Character zum ASCII-Wert z (0 � z < 128)� Es gilt: CHR(ORD(ch)) = ch und ORD(CHR(z)) = z

Page 71: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Real� Wertemenge: darstellbare reelle Zahlen

(beschr. Stellenzahl)� Deklaration:

CONST pi = 3.1415;VAR coeff,std,temp: REAL;

� Ein-/Ausgabe:FROM RealInOut IMPORT ReadReal(var),

WriteReal(var,minstellen);� Operationen:

� Addition +� Subtraktion –� Multiplikation *� Division /� Vergleichsoperatoren =,<>,>=,>,<=,<� alle Op. auf REAL-Werten sind Approximationen

(Genauigkeit von Maschine/Implementierung)� Konvertierung

� FLOAT: CARDINAL / INTEGER � REAL� TRUNC: REAL � CARDINAL / INTEGER

Dezimalpunkt !!

Page 72: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Operationsprinzipien – AnweisungenAllgemeines

� Ein Programm manipuliert Daten� Operationen � Datenmanipulation (d.h. Zustandsänderung)� Aktionen (� Zustandsänderung) werden in Anweisungen (statements)

beschrieben

einfach((Wert-)Zuweisung) strukturiert Prozedur

zusammengesetzt bedingt repetetiv

statement

Page 73: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Syntaktische Definition von Anweisungen

Page 74: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Zuweisung und Ausdrücke (1)

� Bedeutung, Wirkung� Auswertung des Ausdrucks

� Wert des Ausdrucks muss vom Typ der Variable sein (zumindest typverträglich)

� Zuweisung des Ergebniswertes an die Variable� alter Wert der Variable wird überschrieben (Zustandsänderung)

� Beispiele� inkrementieren: zaehler := zaehler + 1� dekrementieren: zaehler := zaehler - 1� Werte zweier Variablen x,y tauschen

xalt := xx := y (* x und y haben denselben Wert *)y := xalt

�Zuweisung („assignment“) :=� Syntax

Page 75: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Zuweisung und Ausdrücke (2)

�Ausdruck („expression“)� Auswerteregeln: links � rechts, algebraische Regeln

Ausdruck

Operatoren

monadisch(einstellig)

dyadisch(zweistellig)

Operanden

Konstanten Variablen Funktionen

Ausdrücke mit mehreren Operatoren:- (explizit) Klammerungen- (implizit) durch Sprachregelung festge-

legte Ausführungsreihenfolge(z.B. „Punkt vor Strich“)siehe Syntax-Diagramme !

Page 76: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Zuweisung und Ausdrücke (3)

� Ausdruck („expression“) (cont‘d)� Beispiele:

� 3.0 � 8.0 / 4.0 � 5.0 � ((3.0 � 8.0) / 4.0) � 5.0� 2 � 3 - 4 � 5 � (2 � 3) - (4 � 5) = -14� 80 / 5 / 3 � (80 / 5) / 3 = 5.333� SQRT(SQR(3) + 11�5) = 8.000� 4 = 0 � = FALSE

� Syntax einfacher Ausdrücke

Page 77: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Zuweisung und Ausdrücke (4)

�Ausdruck („expression“) (cont‘d)

� Rangfolge von Operatoren (ergibt sich aus Syntax)� Negation und unäres Minus NOT(~), –

(in Factor)� Multiplikationsoperatoren �, /, DIV, MOD, AND(&)

(in Term)� Additionsoperatoren +, – , OR

(in SimpleExpression)� Relationaloperatoren =, <>, >=, >, <=, <, IN

(in Expression)

Rangfolge

� Beispiel� – 3 – 4 DIV –2 < 7 + 3 � – 2

Page 78: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Leere Anweisungen und Anweisungsfolgen

�Leere Anweisung („empty statement“)� Anweisung ohne Wirkung für Programmstellen, an denen

syntaktisch eine Anweisung vorkommen muss, jedoch keine Aktion stattfinden soll

�Anweisungsfolgen� Aneinanderreihung von Anweisungen� Klammerung

� explizit: BEGIN ... END bei Moduln, Prozeduren� implizit: Auswahl, Wiederholung, ...

Das ; dient lediglich der Trennung von Anweisungen, nichtals deren Abschluss. ; ist nicht Teil der Anweisung

Page 79: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Verzweigungen - Fallunterscheidungen (1)

� IF - Anweisung� Struktur: Einfachauswahl

IF logische Bedingung THEN ... ELSE ... END� falls logische Bedingung = true � Abarbeitung der THEN-

Anweisungsfolge ...� falls logische Bedingung = false � Abarbeitung der ELSE-

Anweisungsfolge ...

� Beispiel: Schein oder nicht Schein

IF note <= 4.0THEN WriteString(“bestanden")ELSE WriteString("nicht bestanden")

END;

Page 80: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Verzweigungen - Fallunterscheidungen (2)� IF - Anweisung (Cont‘d)

� Struktur: Mehrfachauswahl IF ... THEN ...ELSIF ... THEN ...

ELSE ... END� Syntax

� Beispiel: Notenschlüssel

IF punkte >= 100 THEN WriteString("Note 1")ELSIF punkte >= 80 THEN WriteString("Note 2")ELSIF punkte >= 60 THEN WriteString("Note 3")ELSIF punkte >= 40 THEN WriteString("Note 4")ELSE WriteString("Note 5 (nicht bestanden!)")END;

Page 81: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Verzweigungen - Fallunterscheidungen (3)

�CASE - Anweisung� n unabhängige Ausgangssituationen (cases); jede ist mit einer

Aktion verbunden� Struktur

CASE Ausdruck zur Fallunterscheidung OF � : ... � Fall 1� : ... � Fall 2�

ELSE ... � Fall n oder der „Rest“END

� Syntax

Page 82: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Verzweigungen - Fallunterscheidungen (4)

�CASE - Anweisung (cont‘d)

� Beispiel: NotenschlüsselCASE punkte OF

0..39 : WriteString("Note 5 (nicht bestanden!)")|40..59 : WriteString("Note 4")|60..79 : WriteString("Note 3")|80..99 : WriteString("Note 2")

ELSE WriteString("Note 1")END;

besser:CASE punkte OF

0..39 : WriteString("Note 5 (nicht bestanden!)") |40..59 : WriteString("Note 4")|60..79 : WriteString("Note 3")|80..99 : WriteString("Note 2")|100..105 : WriteString("Note 1")

ELSE WriteString("unzulässige Punktezahl")END;

ELSE sollte (obwohl optional) in CASE nie fehlen, um unvorhergesehene Fälle aufzufangen

Page 83: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Verzweigungen - Fallunterscheidungen (5)

�CASE - Anweisung (cont‘d)

� Beispiel: Einfache Menüsteuerung

....VAR ch : CHAR;....(* einfache Menuesteuerung zur Bibliotheksverwaltung *)WriteString("Eingabezeichen (Kommando): ");Read(ch); WriteLn;

CASE ch OF"S", "s" : SucheTitel(Bliste)

| "N", "n" : NeuerTitel(Bliste)| "E", "e" : EntferneTitel(Bliste)| "A", "a" : Ausgabe(Bliste)| "W", "w" : (* leere Anweisung *)| "X", "x" : EXIT

ELSE WriteString("unzulässiges Kommando")END;.....

Aufrufe von Prozeduren

Page 84: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (1)�Motivation

� Wiederholte Durchführung von Berechnungsschritten

�Beispiel: Fakultätsfunktion� Definition: n! =def 1, falls n = 0 und 1 � 2 � ... � (n-1) � n sonst� Lösung:

MODULE Fakultät; (* Fakultät einer Zahl n *)FROM InOut IMPORT ReadCard, WriteCard,WriteString, WriteLn;

VAR n,i,x: CARD;

BEGINWriteString("Geben Sie n ein: ");ReadCard(n); WriteLn;i := 0; x : = 1;

WriteString("Die Fakultät von (");WriteCard(n, 0);WriteString(") ist : ");WriteCard(x, 0);WriteLn;

END Fakultät.

- Prinzip:Wiederholte Multiplikation mit Abbruch

-Verschiedene Realisierungen?

Page 85: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (2)

Verschiedene Realisierungen für

�WHILE ... DO ...... END� vorangestellte Bedingung (kopfgesteuerte Schleife)� solange Bedingung gilt, führe Anweisungsfolge aus

�REPEAT ...... UNTIL ...� nachgestellte Bedingung (fußgesteuerte Schleife)� führe Anweisungsfolge aus, bis (Abbruch-)Bedingung erfüllt ist

�FOR ... TO ... [BY ...] DO ...... END� feste Zählschleife (kopfgesteuerte Schleife)� führe Anweisungsfolge aus, solange der Index sequentiell verändert

wird.

�LOOP ...... END� einfache Schleife (loop)� führe Anweisungsfolge aus, solange bis Schleife per EXIT verlassen

wird.

Page 86: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (3)

fußgesteuert

Anweisung

Schleifen-bedingung

nichterfüllt

erfüllt

kopfgesteuert

Anweisung

Schleifen-bedingung

erfüllt

nichterfüllt

Zählschleife

Anweisung

Initialisierung

Endstanderreicht

Veränderung

nein

ja

LOOP

Anweisung

EXIT

Anweisung

Page 87: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (4)

�WHILE-Schleife� Struktur:

WHILE Bedingung DO� (*Anweisungsfolge*)END

� Beispiel: Fakultät (mit „?“ markierter Teil)WHILE i < n DOi := i+1; x := x*i

END

� Syntax:

Page 88: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (5)

�REPEAT-Schleife� Struktur:

REPEAT� (*Anweisungsfolge*)UNTIL Bedingung

� Beispiel: Fakultät (mit „?“ markierter Teil) REPEAT

i := i+1; x := x*iUNTIL i >= n

� Syntax:

Page 89: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (6)�FOR-Schleife

� Struktur:FOR index:=ausdruck1 TO ausdruck2 BY KonstAusdruck DO� (*Anweisungsfolge*)END

� Beispiel: Fakultät (mit „?“ markierter Teil) FOR k:= 1 TO n BY 1 DO

x := x*kEND

� Syntax:

Page 90: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (7)

�FOR-Schleife (cont‘d)

� Hinweise:� Die Anweisungsfolge wird mit fest vorgegebener Wertefolge durchlaufen� index = Zählvariable (Laufvariable); Ausdruck1 = Startwert von index� Ausdruck2 = Endwert der Iteration� KonstAusdruck = Schrittweite der Laufvariable (= 1 falls nichts angegeben)� Ausdruck1, Ausdruck2, KonstAusdruck dürfen in der Anweisungsfolge

nicht verändert werden (ggf. WHILE bzw. REPEAT verwenden)� index ist nach Abarbeitung der FOR-Anweisung undefiniert!

� Beispiel: Fakultät� Variable i ist nun überflüssig

Page 91: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Wiederholungsanweisungen (8)

�Loop-Anweisung� Struktur:

LOOP� (*Anweisungsfolge mit EXIT(s)*)END (*LOOP*)

� Beispiel: Fakultät (mit „?“ markierter Teil)LOOPi := i+1; IF i > n THEN EXIT ELSE x := x*i END

END (*LOOP*)

� Syntax:

� Verwendung:„gewollte Endlosschleife“ mit Ausstieg(en) an beliebiger(/n) Stelle(n) innerhalb der Schleife

Page 92: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel „WHILE“: ggT (1)

�größter gemeinsamer Teiler (ggT)� Der ggT(a,b) zweier ganzer Zahlen a und b ist die größte ganze

Zahl, durch die sowohl a als auch b teilbar ist.� Beispiel: ggT(16,36) = 4� Anwendung: optimales Kürzen� Es gilt:

ggT(a,a) = a falls b = aggT(a,b) = ggT(a-b,b) falls b < aggT(a,b) = ggT(a,b-a) falls b > a� iteratives Programm zur Berechnung des ggT

� effizienter: Euklid‘scher Algorithmus für a � b:ggT(a,b) = b falls a MOD b = 0ggT(a,b) = ggT(b, a MOD b) sonst

Page 93: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel „WHILE“: ggT (2)MODULE ggT;(* Berechnung des groessten gemeinsamen Teilers * zweier positiver ganzer Zahlen *)

FROM InOut IMPORT WriteString, WriteLn, WriteCard, ReadCard

VAR x, y : CARDINAL ;

BEGINWriteString("Bestimmung des GGT"); WriteLn;WriteString("=================="); WriteLn;WriteString("Erste positive Zahl eingeben: ");ReadCard(x); WriteLn;WriteString("Zweite positive Zahl eingeben: ");ReadCard(y); WriteLn;

IF (x > 0) AND (y > 0) THENWHILE (x <> y) DOIF (x > y ) THEN x := x - yELSE (* y < x *) y := y - xEND (* IF *)

END; (* WHILE *)WriteString("GGT = ");WriteCard(x,0)

ELSEWriteString("fehlerhafte Eingabe!")

END; (* IF *)END ggT.

ggT

Page 94: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Konvertierung: WHILE � REPEAT (1)

� ... im Prinzip durch Negierung der Schleifenbedingung� beachte bei logisch (mit und / oder) zusammengesetzten Bedingungen

die de Morgan‘schen Regeln!� Beispiel:

Bedingung: q OR (i = n)negierte Bedingung: (NOT q) AND (NOT(i=n))

also: (NOT q) AND (i<>n)

�Beispiel: WHILE � REPEAT (nicht zu empfehlen)WHILE bedingung DO anweisung END

konvertiert in:IF bedingung THEN

REPEAT anweisung UNTIL NOT bedingungEND

Page 95: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Konvertierung: WHILE � REPEAT (2)

�Beispiel: REPEAT � WHILE� mit Code-Verdopplung

REPEAT anweisung UNTIL abbruchbedingung

konvertiert in:anweisung;WHILE NOT abbruchbedingung DO anweisung END

� mit Schaltervariable schalterREPEAT anweisung UNTIL abbruchbedingung

konvertiert in:schalter := TRUE;WHILE schalter DO anweisung;schalter := NOT abbruchbedingung

END

Page 96: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel „FOR“: NormalverteilungswerteMODULE Normalverteilung;FROM RealInOut IMPORT ReadReal, WriteFloat;FROM InOut IMPORT WriteString, WriteLn, WriteInt;FROM MathLib IMPORT exp, sqrt;

CONSTpi = 3.141592653589793238462643383;Max = 10;

VARi : INTEGER;std scale, faktor, GaussWert : REAL;

BEGINWriteString("Berechnung der Normalverteilung ...);WriteLn;WriteString("Eingabe der Standardabweichung: ");ReadReal(std); WriteLn;

scale := 1.0 / (sqrt(2.0 * pi) * std);

FOR i := -max TO max DOfaktor := -(FLOAT(i) * FLOAT(i)) / (2.0 * std);GaussWert := scale * exp(faktor);

WriteInt(i, 5); WriteString(" : ");WriteFloat(GaussWert, 4, 8); WriteLn

ENDEND Normalverteilung.

Page 97: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel „LOOP“: Werbeseiten (aus Puchan et al.)

LOOP

END

EXIT

EXIT

Page 98: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Beispiel „LOOP“: Werbeseiten (aus Puchan et al.)

MODULE Werbung;

FROM STextIO IMPORT Write, WriteString, WriteLn;FROM NochzuSchreiben IMPORT eingabein30s,(*geeignete Warteroutine*) CLS; (*löscht den Bildschirm *)BEGIN

LOOP(* Ausgabe 1. Bildschirmseite mit Werbung *)CLS(); (* Bildschirm löschen *)WriteString("Schauen Sie sich diesen Rechner an.");WriteLn;WriteString("Es gibt nichts, was der nicht kann.");WriteLn;IF eingabein30s() THEN

EXITEND(*IF*);

(* Ausgabe z. Bildschirmseite mit Werbung *)CLS () ;WriteString("Drum sollten Sie ihn rasch erwerben,");WriteLn;WriteString("Dann freuen sich auch Ihre Erben!!");IF eingabein30s() THEN

EXITEND(* IF *);

END(* LOOP *)END Werbung.

Page 99: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

MODULE wcount;(* counts chars, words and lines from stdin *)

FROM InOut IMPORT Read, Done, WriteString, WriteLn, WriteCard;

CONSTnewline = 12C;blank = 40C;tab = 11C;

VARchars, words, lines : CARDINAL;ch : CHAR;inword : BOOLEAN;

BEGINchars := 0;words := 0;lines := 0;inword := FALSE;

Read(ch);WHILE Done DO

chars := chars + 1;

IF inword THEN CASE ch OF | blank, tab, newline : inword := FALSE;

words := words + 1 ELSE (* nichts *) END (* CASE *)

ELSE CASE ch OF | blank, tab, newline : (* nichts *) ELSE

inword := TRUE END (* CASE *) END; (* IF *)

IF ch = newline THEN lines := lines + 1

END; (* IF *)

Read(ch)

END; (* WHILE *)

WriteCard(chars,14); WriteString(" character(s)"); WriteLn;WriteCard(vords,14); WriteString(" vord(s)"); WriteLn;WriteCard(lines,14); WriteString(" line(s)"); WriteLn

END vcount.

Steuerzeichen im Text

Initialisierung der Zähler chars, words und lines, sowie des „Zustands“ „im Wort“ Einlesen des 1. Zeichens

Ausgabe des Ergebnisses

Schleife „arbeitet“ solange Zeichen eingelesen werden.Analyse aller eingelesenen Zeichen:

Zeichen im Wort?Wenn nein: neue Zeile, Tab, oder Blank

Einlesen des „nächsten“ Zeichens

Beispiel „WHILE“: Wordcount

Page 100: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

MODULE numlines;(* text files with line numbers *)

FROM InOut IMPORT Read, Done, Write, WriteString, WriteLn, WriteCard;

CONST newline = 12C;

VARnumber : CARDINAL;ch : CHAR;first : BOOLEAN;

BEGINnumber := 0;first := TRUE;

Read(ch);WHILE Done DOIF first THEN number := number + 1; WriteCard(number,4); WriteString(": "); first := FALSE

END; (* IF *)

IF ch <> newline THENWrite(ch)

ELSE WriteLn; first := TRUEEND; (* IF *)

Read(ch)END (* WHILE *)

END numlines.

Beispiel „WHILE“: Zeilennummerierung

Page 101: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Einfache selbstdefinierte Typen

jetzt:

bisher:

Einordnung Taxonomie der DatentypenDatentypen

Einfache Datentypen Strukurierte Datentypen Zeiger Datentypen

GleitkommazahlenREALLONGREALCOMPLEXLONGCOMPLEX

Ganzzahlen undOrdinaltypen

CARDINALINTEGERBOOLEANCHAR

Aufzählungstyp (enumeration)

Ausschnittstyp/Unterbereichstyp (subrange))

ARRAY RECORD SET,PACKEDSET

STRINGBITSET

POINTER

Page 102: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Syntax

Page 103: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Syntax (cont‘d)

Page 104: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (1)

�Allgemein: Ordinal-Datentypen (geordnet)� bisher: vordefinierte Datentypen mit interner Ordnung� jetzt: explizite Definition von Wertemengen durch

� Aufzählung (Reihenfolge = Ordnung) � Selektion von Teilmengen (Unterbereiche)

�Aufzählungstyp (“enumeration”)� eine geordnete Menge von Werten wird spezifiziert durch Aufzählung

(konstanter Identifikatoren)� Beispiele:

� mit VariablendeklarationVARTag : (Montag, Dienstag, Mittwoch, Donnerstag,

Freitag, Samstag, Sonntag);

Farbe : (Weiss, Rot, Blau, Gelb, Gruen, Schwarz);

Page 105: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (2)

�Aufzählungstyp (“enumeration”) (cont‘d)

� Beispiele:� mit TypdefinitionTYPE

Wochentag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag);

FarbPalette = (Weiss, Rot, Blau, Gelb, Gruen, Schwarz);

VARTag : Wochentag;Farbe : FarbPalette;

� wäre BOOLEAN nicht schon StandardTYPE

BOOLEAN = (FALSE, TRUE)

Page 106: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (3)

�Aufzählungstyp (“enumeration”) (cont‘d)� Bemerkungen

� Elemente müssen eindeutig definiert sein, dürfen also nicht in 2 Typen vorkommen

� Bezeichner dürfen nur in einer festgelegten Bedeutung vorkommennicht erlaubt:

Karte : (7, 8, 9, Bube, Dame, König, 10, As)Tag : (MO, DI, MI, DO, FR, SA, SO)

aber erlaubt:Tag : (Mo, Di, Mi, Do, Fr, Sa, So)

� die Elemente einer Aufzählung erhalten analog ihrer Position in der Aufzählung eine Ordnungszahl zugeordnet

� Operationen und Aktionen� Wertzuweisung wie gewohnt: Tag := Dienstag; Farbe := Blau;

� durch die Def. der Ordnung sind Vergleiche möglich {=,<>,<,<=,>,>=}� Funktionen

– Minimum, Maximum: MIN(T) = a0 , MAX(T) = an � Typ T = (a0,a1,...,an)– Ordnungszahl- und Wertfunktion: ORD(...), VAL(...) mit: ORD(x) =

VAL(CARDINAL,x)– Nachfolger und Vorgänger: INC(...), DEC(...)

Page 107: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (4)

�Aufzählungstyp (“enumeration”) (cont‘d)

� Bsp: MIN, MAX, ORD, INC, DEC bei einem AufzählungstypTYPESpielkarte : (Sieben, Acht, Neun, Bube, Dame,

Koenig, Zehn, As);VARKarte : Spielkarte;

BEGIN ...WriteCard(ORD(MIN(Spielkarte)), 2);WriteCard(ORD(MAX(Spielkarte)), 2);

Karte := Neun;WriteCard(ORD(Karte), 2);

INC(Karte);WriteCard(ORD(Karte), 2); WriteLn;

DEC(Karte, 2);WriteCard(ORD(Karte), 2); WriteLn;

END

= ORD(Sieben) = 1

= ORD(As) = 8

= ORD(Neun) = 3

Karte := Bube

= ORD(Bube) = 4

Karte := Acht

= ORD(Acht) = 2

Page 108: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (5)

�Unterbereichstyp (“subrange”)� Festlegung eines Unterbereichs des Definitionsbereichs eines ...

� vordefinierten Typs� eigens definierten (Ordinal-)Typs

� der Grundtyp ist der “Träger (host type)”� Syntax

Syntaxdiagramme aus Puchan et.al.

Page 109: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (6)�Unterbereichstyp (“subrange”) (cont‘d)

� Beispiele� TypdefinitionTYPE

Buchstabe = [“a” .. “z”];Ziffer = [0 .. 9]; (*Grundtyp CARDINAL*)ZahlInt = INTEGER[1 .. 10];Wochentag = (Mo, Di, Mi, Do, Fr, Sa, So);VL_Tag = [Mo .. Fr];BYTE = [0 .. 255];

� VariablendefinitionVAR

CAPITAL : [“A” .. “Z”]; OktZiffer : Ziffer[0 .. 7];

� Hinweise� der Trägerdatentyp bestimmt die Menge der erlaubten Operationen� bei Operationen auf Unterbereichstypen dürfen die Ergebnisse den

Wertebereich nicht verlassen� Unterbereiche auf REAL nicht erlaubt

Page 110: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (7)�Funktion VAL(T,x)

Vereinbarungen:TYPE Tage = (So, Mo, Di, Mi, Do, Fr, Sa);

Wochentage = [Mo .. Fr];

VAR i, j, z : INTEGER;r : REAL

Wertzuweisungen:i := 42; j := -1; z := 0; r := -2.7;

VAL liefert folgende Ergebnisse:VAL(CARDINAL, i) =VAL(CARDINAL, j) =VAL(CARDINAL, r) =VAL(INTEGER, i) =VAL(INTEGER, r) =VAL(REAL, i) =VAL(REAL, TRUE) =VAL(CHAR, z) =VAL(CHAR, r) =VAL(BOOLEAN, 0) =VAL(Tage, 5) =VAL(Wochentage, 5) =VAL(Wochentage, z) =

Beziehungen mit VALCHR(x) = VAL(CHAR, x) ORD(x) = VAL(CARDINAL, x) INT(x) = VAL(INTEGER, x) TRUNC(x) = VAL(CARDINAL, x) FLOAT(x) = VAL(REAL, x)

x vom Typ T:INC(x,n) � x:=VAL(T,VAL(INTEGER,x)+n)

42FehlerFehler42-242.0Fehler0CFehlerFALSEFrFrFehler

Page 111: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Aufzählungs- und Unterbereichstypen (8)

�Kompatibilität (auch für strukturierte Daten)

� Typkompatibilitätstrenge Regeln bzgl. der Verträglichkeit von verschiedenen Typen in Ausdrücken und Zuweisungen!� 2 Typen sind identisch, wenn sie in einer Typdefinition gleichgesetzt

werden� 2 Typen haben den gleichen Grundtyp, wenn sie Unterbereiche des

gleichen Typs sind.� Ausdruckskompatibilität

Alle Operanden in einem Ausdruck haben den gleichen Typ oder dengleichen Grundtyp

� ZuweisungskompatibilitätVariable W sei vom Typ V, Ausdruck A von Typ E; Zuweisung W := A ist möglich, falls (Auswahl):

� V und E sind gleich oder haben gleichen Grundtyp� V hat Grundtyp CARDINAL, E hat Grundtyp INTEGER oder umgekehrt� V hat Grundtyp CHAR und E ist einelem. oder leere Stringkonstante

Page 112: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

jetzt:bisher:DatenstrukturenStrukturierte Daten

Taxonomie der DatentypenDatentypen

Einfache Datentypen Strukurierte Datentypen Zeiger Datentypen

GleitkommazahlenREALLONGREALCOMPLEXLONGCOMPLEX

Ganzzahlen undOrdinaltypen

CARDINALINTEGERBOOLEANCHAR

Ausschnittstyp/Unterbereichstyp(subrange)

Aufzählungstyp(enumeration)

ARRAY RECORD SET,PACKEDSET

STRINGBITSET

POINTER

Page 113: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Unterscheidungsmerkmale� Typ der Komponenten

� alle Komponenten vom selben Typ (homogene Struktur)� Komponenten sind i.A. unterschiedlichen Typs (heterogene Struktur)� übrigens: Komponenten können selbst strukturierte Objekte sein

� Anzahl der Komponenten� fest vorgegeben, schon zur Übersetzungszeit bekannt,

bleibt während der Programmlaufzeit konstant� nicht fest vorgegeben; wird während der Programmlaufzeit einmal

bestimmt, bleibt für den Rest der Programmlaufzeit konstant� variabel, kann sich während der Programmlaufzeit beliebig ändern

(dynamische Liste)

� Zugriff auf die Komponenten� sequentiell, d.h. nur in bestimmter Reihenfolge (� Dateien)� direkt über Index (Zahl, Nummer) oder Komponenten-Bezeichner (Name)� Zugehörigkeitstest (m � M? � true/false); Komponenten nicht direkt

ansprechbar

Page 114: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (1)

�Allgemeines� Verwendung:

Gruppierungsmöglichkeit (Struktur!) einer fest definierten Anzahl von Variablen derselben Charakteristik (=(Daten-)Typ)

� DeklarationVARfeld : ARRAY[Typ 1] OF Typ 2;

� Typ 1: Indextyp, muss Ordnungstyp sein� Typ 2: jeder beliebige, auch selbstdefinierte Typ

� Komponenten von Feldern können selbst wieder strukturiert sein, also z.B. Felder� a : ARRAY[1..N] OF

ARRAY[1..N] OF REAL

kann abgekürzt werden zu:a : ARRAY[1..N],[1..N] OF REAL

Einrückung zeigt Hierarchie

Page 115: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (2)�Allgemeines (cont‘d)

� Beispiele zu den IndextypenTYPETAGE = (So, Mo, Di, Mi, Do, Fr. Sa);

VARtabelle : ARRAY[CHAR] OF CHAR;

speicher : ARRAY[0 .. 1000] OF INTEGER;

freierTag : ARRAY[TAGE] OF BOOLEAN;

matrix : ARRAY[1 .. 3],[1 .. 5] OF REAL;

Ordinaltyp

OrdinaltypUnterbereich aus CARDINAL/INTEGER

Ordinaltypoben definierter Typ Aufzählungstyp

OrdinaltypUnterbereich aus CARDINAL/INTEGER

Übersetzung eines Zeichensatzes in einen anderen

lineares Speichersegment

arbeitsfreie Wochentage

3 x 5 Matrix

Page 116: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (3)�Allgemeines (cont‘d)

� Beispiele zu gültigen Vereinbarungen von ARRAYsCONST

n = 8;TYPE

Wort = ARRAY[0..3] OF CHAR;Vektor = ARRAY[1..n] OF REAL;Letter = ARRAY["a".."z"] OF INTEGER;Farbe = (rot, gelb, blau);Fahne = ARRAY[1..3] OF Farbe;Muster = ARRAY Farbe OF BOOLEAN;Palettel = ARRAY[1..n] OF ARRAY Farbe OF BOOLEAN;Palette2 = ARRAY[1..n], Farbe OF BOOLEAN;Matrix = ARRAY[1..n],[1..n] OF REAL;Matrixl = ARRAY[1..n] OF Vektor;

VARname,vorname : Wort;feld : Matrix;feld1 : Matrixl;k1Buchst : Letter;muster : Muster;identity : Matrix;v : Vektor;z : ARRAY[1..n] OF Muster;

Zuweisungen an Feldelementename[1] := "w";klBuchst["f"] := 17;muster[blau] := TRUE;feld[1,3] := 2.7;feld[1][3] := 2.7;z[7, gelb] := TRUE;z[7][gelb] := TRUE;

nicht typkompatibeltrotz interner identischer Struktur

Page 117: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (4)

�Zuweisung, Kompatibilität� Elementweise Zuweisung kompatibler Typen (z.B. REAL)

m[i,j] := 5.0;A[i] := B[j];

FOR i : = 1 TO n DO FOR j := 1 TO n DO IF i = j THEN identity[i,j] := 1.0 ELSE identity[i,j] := 0.0 END (* IF *) END (* FOR j *)END; (* FOR i *)

� Sind die Elemente vom selben Typ und sind die Längen der beiden (Teil-)Felder identisch dann ist erlaubt:

A := B;

2 Felder können nur einander zugewiesen werden, wenn sie densel-ben oder einen durch Typumbenennung (Alias) entstandenen kompatiblen Typ haben!

Page 118: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (5)

�RepräsentationCONST

n = 5;m = 3;

VARvektor : ARRAY[1..n] OF CARDINAL;matrix : ARRAY[1..n],[1..m] OF CARDINAL;

Intuition:- 1. Index = Zeile- 2. Index = Spalte

1 2 3 4 5vektor(=Adresse)

1 2 3 4 5123

matrix(=Adresse)

matrix(=Adresse)

13 14 151 2 3 4 5 6 7 8 9 10 11 12

1,1 1,2 1,3 2,1 2,2 2,3 3,1 3,2 3,3 4,1 4,2 4,3 5,1 5,2 5,3

Page 119: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (6)

�Zugriff auf Feldelemente� mit Hilfe von Zählschleifen� Möglichkeiten (abhängig von Zugriffsreihenfolge)

� innere Schleife zu 2. Index

FOR i:=1 TO n DOFOR j:=1 TO m DO

matrix[i,j]:= j + (i-1)*mEND

END13 14 151 2 3 4 5 6 7 8 9 10 11 12

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

� innere Schleife zu 1. Index

FOR j:=1 TO m DOFOR i:=1 TO n DO

matrix[i,j]:= i + (j-1)*nEND

END13 14 151 2 3 4 5 6 7 8 9 10 11 12

1 6 11 2 7 12 3 8 13 4 9 14 5 10 151,1 1,2 1,3 2,1 2,2 2,3 3,1 3,2 3,3 4,1 4,2 4,3 5,1 5,2 5,3

1,1 1,2 1,3 2,1 2,2 2,3 3,1 3,2 3,3 4,1 4,2 4,3 5,1 5,2 5,3

Page 120: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

ARRAYs (Felder) (7)

�Strings (Zeichenketten)besonderer ARRAY-Typ für Komponenten vom Typ CHAR� Struktur

0C = CHR(0), NullbyteI f I n f o r m a T h e n U n i U l mt i k 0C

Obere FeldgrenzeUntere Feldgrenze

� DeklarationTYPESTRING = ARRAY[0..27] OF CHAR;

CONSTs = “string";leer = “"; (* Leer-String *)

� OperationenEin-/Ausgabe� Lesen: FROM InOut

IMPORT ReadString;

� Schreiben: FROM InOut IMPORT WriteString;

Page 121: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (1)

�Feste Verbunde ((Daten-)Verbunde, in anderen Sprachen: „structure“)� Verwendung

Zusammenfassung von Objekten verschiedener Datentypen unter einem Namen (ein Komplex)

� Syntax

Page 122: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (2)

�Feste Verbunde (cont‘d)

� Deklaration (in TYPE oder VAR)gegeben sei ein strukturiertes Objekt (artikel) mit seinen Attributen/Komponenten (nummer, bestand, preis, lager), wobei eine Komponente wiederum strukturiert sein kann (lager � gang, regal, ebene)

VARartikel: RECORD

nummer : CARDINAL;bestand : CARDINAL;preis : REAL;lager : RECORD

gang : [‘A‘..‘H'];regal : [1..7];ebene : [1..4]

ENDEND

Page 123: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (3)

�Feste Verbunde (cont‘d)

� KomponentenRECORD-Komponente besteht aus Selektor und Komponenten-Typ

preis : REAL

Selektor Komponententyp

RECORD- Komponente

� Zugriff auf individuelle Komponenten

<Bezeichner>.<Selektor>

KomponentennameRECORD-Name

Selektor- Punkt

Page 124: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (4)

�Feste Verbunde (cont‘d)

� Beispiel (1) für Zugriff und ZuweisungVARheute, morgen, datum : RECORD

tag : [1..31];monat : (Jan, Feb, Mar, Apr, Mai, Jun, Jul, Aug,

Sep, Okt, Nov, Dez); jahr : [1900..2100]

ENDBEGIN

...datum.tag := 10;datum.monat := Apr; datum.jahr := 2000;...heute.jahr := 2001;morgen.tag := heute.tag + 1; datum := heute; ...

END

Zuweisung eines ganzen RECORDs

Page 125: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (5)

�Zuweisung und WITH-Anweisung � Standard

� Zuweisung an einzelne Elemente eines RECORD� Zuweisung ganzer RECORDs

� Wiederholungs-Konstrukt (� WITH-Klausel)� bei ARRAYs: elementweise Verarbeitung

durch FOR-Anweisung� bei RECORDs:

einzelne Elemente i.A. unterschiedlichen Typs (� unterschiedliche Operationen)� Zusammenfassung einer Folge individueller Anweisungen, die

sich auf Komponenten desselben Verbundes beziehen� bessere Übersichtlichkeit und Effizienzsteigerung falls (intern!)

� Syntax

BeispielWITH datum DO

tag := 10;monat := Apr; jahr := 2000

END;

Page 126: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (6)

�Zuweisung (cont‘d)

� Beispiel (3) Zuweisung VARstudenten : ARRAY[0..199] OF PERSON;k : CARDINAL;...

BEGIN...

studenten[50].name := "Klaus Murmann";studenten[50].gebdatum.monat := Jan;

...

IF studenten[33].name[0] = “A“THEN tue_diesELSE Tue_das

...

END

RECORD im RECORD

Page 127: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (7)

Selektor

�RECORD mit Varianten (Verbunde mit Varianten)� Verwendung

Möglichkeit mehrere verwandte (nicht ganz identische) RECORDs unter einem Namen (ein Datentyp!) zu definieren

� SyntaxDas Diagramm Komponente wird durch die CASE-Klausel erweitert

Page 128: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (8) �RECORD mit Varianten (cont‘d)

� Deklaration (in TYPE oder VAR)Programm muss zwischen den verschiedenen Varianten unter-scheiden können (� CASE-Klausel)

� Beispiel: komplexe Zahlen (COMPLEX), die entweder kartesisch oder polar dargestellt werden:

TYPECOMPLEX = RECORD

CASE art : (kartesisch, polar) OF;kartesisch : re, im : REAL

| polar : r, phi : REALELSE

END

Selektor mit IndexTyp (muss Aufzählungstyp sein)

Auswahl: jeweils ein Wert des Selektors aus der Aufzählung. Damit wird die Variante bezeichnet Zu jeder Variante

müssen die zugehörigen Komponenten des Ver-bundes deklariert werden.

kann auch entfallen

Page 129: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (9)

�RECORD mit Varianten (cont‘d)

� Bemerkungen� Varianten können geschachtelt (in Hierarchien) auftreten� die Werte des Selektors implizieren verschiedene Arten und Anzahl der

Komponenten� der Compiler reserviert Speicherplatz für die Komponenten mit dem

größten Bedarf� aktuelle Wert des Selektors � aktuelle Variante

� Achtung:die Flexibilität durch die Möglichkeit Varianten deklarieren zu können/dürfen ist eine Quelle häufiger Fehler!���� sorgfältiger Umgang mit dieser Strukturierungsmög-

lichkeit is highly recommended

Page 130: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

RECORDs (Verbunde) (10)

fester RECORD im RECORDRECORD mit Varianten

�RECORD mit Varianten (cont‘d)� Beispiel „Personalverwaltung“

TYPESTRING30 = ARRAY[0..29] OF CHAR;STATUS = (verh, verw, gesch, ledig); DATUM = RECORD

tag : [1..31];monat : (Jan, Feb, Mar, Apr, Mai, Jun, Jul, Aug,

Sep, Okt, Nov, Dez); jahr : [1900..2100]END;

PERSON = RECORDname : RECORD

nachname,vorname : STRING30END;

groesse : [0..MaxInt]; (* in cm *)gebDatum : DATUM;CASE MS : STATUS OFverh, verw : Hdatum : DATUM

| gesch : Sdatum : DATUM;ersteS : BOOLEAN

| ledig : (* leer *)ENDEND;

Varianten im RECORD PERSON

fester RECORD

Page 131: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (1)

�Allgemeines� Verwendung: Zusammenfassung von Elementen desselben

Grundtyps und Behandlung der Werte als Mengen� In Modula-2 gibt es 2 Arten von Mengen (beide homogen, statisch)

� vordefinierte Mengen, Datentyp BITSET� benutzerdefinierte Mengen, Datentyp SET OF ...

� ZugriffKein direkter Zugriff auf die Elemente, nur Zugehörigkeitstests und Mengenoperationen

� Hinweise� als Element-Typen eines SETs sind erlaubt:

– Aufzählungstypen (incl. BOOLEAN)– Unterbereich der nicht-negativen ganzen Zahlen

� max. Anzahl der Elemente darf aus höchstens W Elementen bestehen(W maschinenabhängig � Wortlänge: W = 16, 32, ..., „Ulm“)

� BITSET = SET OF CARDINAL[0 .. W-1]� Bestimme W „rechtzeitig“

Page 132: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Allgemeines (cont‘d)� Syntax

SETs (Mengen) (2)

vordefiniert benutzerdefiniert

Syntaxdiagramme aus Puchan et.al.

Page 133: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (3) �Allgemeines (cont‘d)

� Mengenkonstanteexplizite Aufzählung der zur Menge gehörigen Elemente in { ... }(die leere Menge { } ist möglich)

}{

nicht notwendig bei BITSET

Dem Klammerpaar {...} muss der Grundtyp vorangestellt werden

Page 134: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (4) �Allgemeines (cont‘d)

� Beispiel „Personenbeschreibung“TYPEEigenschaften = (gross, klein, dick, normal, schlank,

fleissig, ordentlich, baertig); Personenbeschreibung = SET OF Eigenschaften;...

VARTaeter : Personenbeschreibung;...

� Beispiel „Farb-Palette“TYPEFARBE = (rot, gruen, blau);...

CONSTrg = FARBE{rot, gruen};alle = FARBE{rot .. blau}; ...

VARx : SET OF FARBE;...

Page 135: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (5) �Operationen auf Mengen (cont‘d)

� Mengenoperationen (Ergebnistyp = Operandentyp)� Vereinigung � � +� Durchschnitt � � •� Differenz \ � –

A \ B = A � ¬B Menge aller Elemente die A und nicht in B enthalten sind

� symmetrische Differenz � � /A � B = (A � B) \ (A � B)Menge aller Elemente die genau in einer der beiden Mengen A, B enthalten sind

� Vergleichsoperatoren (Ergebnistyp = BOOLEAN)� Gleichheit = � =� Ungleichheit � � <>, #� Inklusion � bzw. � � >= bzw. <=� Element von/aus � � IN

Page 136: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (6) �Operationen auf Mengen (cont‘d)

� Beispiel „Vereinigung“TYPECard = SET OF [1..4]; ...

VARm : Card;...m := Card{1..2};m := m + Card{2..4}; Ergebnis: m = {1, 2, 3, 4}

� Beispiel „Durchschnitt“(* Vereinbarungen wie oben *)...m := Card{1, 2, 3};m := m * Card{2..4}; Ergebnis: m = {2, 3}

� Beispiel „Differenz“(* Vereinbarungen wie oben *)...m := Card{1, 2, 3};m := m - Card{2..4}; Ergebnis: m = {1}

Page 137: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (7) �Operationen auf Mengen (cont‘d)

� Beispiel „ Symmetrische Differenz“TYPECard = SET OF [1..4]; ...

VARm : Card;...m := Card{1, 2, 3};m := m / Card{2..4}; Ergebnis: m = {1, 4}

� Beispiel „ Vergleiche“(* Vereinbarungen wie oben *)...Card{1, 2} = Card{3, 4} Ergebnis: FALSE1 IN Card{1..3, 4} Ergebnis: TRUECard{1, 2} <= Card{1..4} Ergebnis: TRUECard{1, 2} >= Card{1..4} Ergebnis: FALSECard{1, 2, 3, 4} <> Card{1..4} Ergebnis: FALSE

� Beispiel zur Verwendung von SETs(* Vereinbarungen *)...IF c IN CHAR{'a','e','i','o','u'} THEN ... END

� CASE c OF 'a','e','i','o','u' : ... END

Page 138: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

SETs (Mengen) (8) �Operationen auf Mengen

� Hinzufügen/Entfernen von Elementen� Hinzufügen: INCL(menge,element)

menge := menge + {Elementwert} (Vereinigung)

� Entfernen: EXCL(menge,element) menge := menge - {Elementwert} (Differenz)

� Implementierung� der Basistyp ist geordnet, das erste Element wird mit Index 0

gezählt� ein Objekt wird abgebildet auf ein oder mehrere Speicherworte� Zuordnung eines Elements zu einer Menge durch Setzen des Bits

an der entsprechenden (Bit-)PositionTYPEmenge = SET OF ['a' .. 'p'];...

VARx : menge;...

x := menge ['a','c','k','p'];

13 14 151 2 3 4 5 6 7 8 9 10 11 120

b c d e f g h i j k l m n o pa0 1 0 0 0 0 0 0 0 1 0 0 0 0 11

Page 139: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

4. Zahlendarstellung

• Zahlen und ihre Darstellung in Digitalrechnern• Gleitkommazahlen: Darstellung und Arithmetik

Page 140: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Zahlen und ihre Darstellung in DigitalrechnernGrundstrukturen: Speicherorganisation und Zahlenmengen�Linear organisierter Speicher

� zu einer Adresse gehört ein Speicher mit 32 Bit-Zellen (1 Wort „breit“)

MSB0781516232431

LSB

bit

byteHalbwort

Linearer Speicheradresse

Page 141: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Grundstrukturen: Speicherorganisation und Zahlenmengen

�Zahlenmengen (No � Z � Q � R � C)� natürliche Zahlen� ganze Zahlen = natürliche Zahlen und negative ganze Zahlen� rationale Zahlen = ganze Zahlen und gebrochene zahlen� reelle Zahlen = rationale Zahlen und irrationale Zahlen� komplexe Zahlen = reelle Zahlen und „echt imaginäre“ Zahlen

Page 142: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Ganzzahldarstellung (1)i

n

ii bazahl ���

�0

�Basis-Zahlendarstellung:

� die Basis b � 2 ist aus den natürlichen Zahlen� die Ziffer ai ist aus den natürlichen Zahlen 0 � ai � b-1� die Darstellung ist eindeutig� Schreibweise:

zahl = (an ... a0)b

Beispiel: (1024)10 = 1•103 + 0•102 + 2•101 + 4•100

� gebräuchliche Zahlenbasen:� 2 (Binär-System)� 8 (Oktal-System)� 10 (Dezimal-System)� 16 (Hexadezimal-System)

� Multiplikation/Division mit b: shift der Zahl-Ziffernfolge um 1 Stelle nach links/rechts

Beispiel 100011101

43528511D

Page 143: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Ganzzahldarstellung (2)�Konvertierung zwischen zwei Basen:

01

011

10

))(( abbabazahl

ababababazahl

nn

nn

nn

in

ii

������

�������

��

(� Horner-Schema)

� Basis b � Basis 10� Eingabe: b, Feld a[0..k]� Ausgabe: Dezimalzahl� „vorwärts: von links nach rechts“

zahl := 0;FOR i:=n TO 0 BY -1 DO;

zahl := zahl�b + a[i]END;

i := 0;a[i] := 0;WHILE zahl>0 DOa[i] := zahl MOD b;zahl := zahl DIV b;i := i+1

END;

� Basis 10 � Basis b� Eingabe: Dezimalzahl, neue Basis b � Ausgabe: Feld a[0..k] (neue Ziffernfolge)� „rückwärts: von rechts nach links “

Page 144: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Ganzzahldarstellung (3)�Konvertierung zwischen zwei Basen: (cont‘d)

� Beispiel: (236)8 � (?)3

� Schritt 1: (236)8 � Dezimalzahln = 2:(236)8 = ((0·8 + 2)·8 + 3 )·8 + 6 = 158 = (158)10

� Schritt 2: Dezimalzahl � (?)3b = 3(158)10 : 158 / 3 = 52 Rest 2

52 / 3 = 17 Rest 117 / 3 = 5 Rest 2

5 / 3 = 1 Rest 21 / 3 = 0 Rest 1

also: (158)10 = ((((0·3 + 1)·3 + 2)·3 + 2)·3 + 1)·3 + 2 = (12212)3

wobei: ( ... ) = 52, ( ... ) = 17, ( ... ) = 5, ( ... ) = 1,

Page 145: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Ganzzahldarstellung (4)�Spezialfall: Konvertierung zwischen Basen 2 � 2k

� von rechts nach links: Zusammenfassen von jeweils k benachbar-ten Ziffern

� Beispiel mit der Zahl (300)10 : Die Darstellung zur Basis b=2 soll in die zur Basis b=8 umgewandelt werden, d.h. k=3:

0123456782 202021212021202021)100101100( ������������������

001230126012 2)202021(2)212021(2)202021(100101100 ���������������������

8012 )454(848584100101100 �������

�Spezialfall: Konvertierung zwischen Basen 2k� 2

� selbst nachdenken!

Page 146: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Negative Zahlen im Binärsystem (1)�Allgemeines

� Die Anzahl der darstellbaren Zahlen ist beschränkt!(abhängig von der Wortlänge)� Wortlänge = 8bit � N = 28 = 256 versch. 0/1-Kombinationen

� 256 verschiedene Zahlen darstellbar, z.B. 0 ... 255 (= N - 1)

� Unser Rechner kann nur addieren, besitzt lediglich ein Addierwerk, kein Subtrahierwerk; letztlich heisst das, auch Multiplikationen und Divisionen muss das Addierwerk erledigen!

� Frage: Kann man sich im Bereich der Dezimalzahlen einen Algorithmus vorstellen, der mittels Addition eine Subtraktion durchführt?(unter der Nebenbedingung, dass die Anzahl der darstellbaren Zahlen beschränkt ist)� Idee: falls x > 0, dann nix: x � x

falls x < 0, dann: x � N - |x|

Page 147: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Negative Zahlen im Binärsystem (2)�4 Möglichkeiten der Darstellung

� Vorzeichen und Betrag („signed magnitude“)� Bit ganz links als Vorzeichen: 0 � + ; 1 � – ;

restliche Bits stellen den Betrag der Zahl dar� Beispiel: Wortlänge n = 4 Bit � N = 24 = 16 versch. 0/1-Kombinationen � 16 verschiedene Zahlen darstellbar, bisher (kardinal) 0 ... 15 (= N - 1), jetzt (integer) -7 ... +7, also -(2n-1 - 1) ... +(2n-1 - 1)

� Problem 1es gibt zwei Nullen: +0 � 0000; -0 � 1000also: Eine Zahl aber zwei unterscheidbare(!) Bitfolgen

� Problem 2Bei dieser Darstellung ist ein Addierwerk und ein Subtrahierwerknotwendig; es gibt keinen Algorithmus, der für diese Darstellung Subtraktion per Addition erledigt

� Problem 3Es ist eine Logik erforderlich zur Entscheidung, ob Addition oder Subtraktion auszuführen ist (4 Vorzeichenfälle)

Page 148: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�4 Möglichkeiten der Darstellung (cont‘d)� Einer-Komplement (One‘s Complement)

� gebildet durch stellenweises Invertieren der Originalzahl: 0 � 1, 1 � 0� addiert man zur Originalzahl ihr Einer-Komplement (= Invertierte) so

ergibt sich immer eine Folge von Einsen� Eine Folge von Einsen ist nichts anderes als (die Invertierte der) Null,

also -0 (+0 � Folge von Nullen), d.h. man hat zur Originalzahl deren „Negatives addiert“

� Beispiel: Wortlänge n = 4 Bit � N = 24 = 16 versch. 0/1-Kombinationen � 16 verschiedene Zahlen darstellbar, bisher (kardinal) 0 ... 15 (= N - 1), jetzt (integer) -7 ... +7, also -(2n-1 - 1) ... +(2n-1 - 1)

� Problem 1: besteht noches gibt zwei Nullen: +0 � 0000; -0 � 1111also: Eine Zahl aber zwei unterscheidbare(!) Bitfolgen

� Problem 2: ist gelöstBei dieser Darstellung genügt ein Addierwerk; Subtraktion bedeutet Addition des Negativen

� Problem 3 (Logik): stellt sich nicht mehr� Problem 4: 1011 = -4 oder +11 ?? durch beschränkten Zahlenbereich -7

.. .. +7 gelöst. Bit ganz links: 1 � negative Zahl, 0 � positive Zahl

Negative Zahlen im Binärsystem (3)

Page 149: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�4 Möglichkeiten der Darstellung (cont‘d)

� Zweier-Komplement (Two‘s Complement)� gebildet durch das Einer-Komplement mit nachfolgender Addition von 1� addiert man zur Originalzahl ihr Zweier-Komplement (= Invertierte + 1) so

ergibt sich immer eine 1 mit nachfolgenden Nullen; die Anzahl der Stellen ist um eine gewachsen

� Streicht man die führende 1, so sind die nachfolgenden Nullen nichts anderes als Null, man hat zur Originalzahl deren „Negatives addiert“

� Beispiel: Wortlänge n = 4 Bit � N = 24 = 16 versch. 0/1-Kombinationen � 16 verschiedene Zahlen darstellbar, bisher (kardinal) 0 ... 15 (= N - 1), jetzt (integer) -8 ... +7, also -(2n-1) ... +(2n-1 - 1)

� Problem 1: besteht nicht mehr: 0000 � 0; 1111 � -1� Problem 2 ist gelöst

Bei dieser Darstellung genügt ein Addierwerk; Subtraktion bedeutet Addition des Negativen

� Problem 3 (Logik): stellt sich nicht mehr� Problem 4: 1011 = -5 oder +11 ?? durch beschränkten Zahlenbereich -8

.. .. +7 gelöst. Bit ganz links: 1 � negative Zahl, 0 � positive Zahl

Negative Zahlen im Binärsystem (4)

Page 150: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�4 Möglichkeiten der Darstellung (cont‘d)

� Zweier-Komplement (cont‘d)

� übrigens: Im Zweier-Komplement stimmt die Dualdarstellung von -5 mit der von 24 - 5 = 16 - 5 = 11 überein:

(5)10 = (0101)2Zweier-Komplement von (5)10: (1010)2 + 1 = (1011)2 = (11)10

� Beispiel mit Dezimalzahlen (b = 10)– Es sei n = 2 � N = 102 = 100 verschiedene Dezimalzahlen, entweder kar-

dinal 0 ... 99 (= N - 1) oder (integer) -50 ... +49, also -5·10n-1 ... + 5·10n-1 -1– Originalzahl sei (z.B.): 23

Ihr Zehner-Komplement: 102 - 23 = 77 . 77 ist nicht im Zahlenbereich -50 ... +49; 77 ist die Darstellung von -23 im Zehner-Komplement (x<0: x � N - |x|)

– addiert man zur Originalzahl ihr Zehner-Komplement, so ergibt sich immer eine 1 mit nachfolgenden Nullen (hier 100); die Anzahl der Stellen ist um eine gewachsen

– Streicht man die führende 1, so sind die nachfolgenden Nullen nichts anderes als Null, man hat zur Originalzahl deren „Negatives addiert“, also eine Darstellung von -23

– � Statt (z.B) 36 - 23 = 13 kann man auch rechnen: 36 + 77 = 113� Statt (z.B) 14 - 23 = - 9 kann man auch rechnen: 14 + 77 = 91 =100 - 9

Negative Zahlen im Binärsystem (5)

Page 151: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�4 Möglichkeiten der Darstellung (cont‘d)

� Zweier-Komplement (cont‘d)

� häufigst genutzte rechnerinterne Darstellung negativer ganzer Zahlen

� Beispiel mit Dualzahlen (b = 2):– Dual zu berechnen: 85 - 103 = -18 (85)10 = (01010101)2– Es sei n = 8 � N = 28 = 256 verschiedene Dezimalzahlen: -128 ... +127– Aus der Subtraktion -103 soll eine Addition werden:

Originalzahl ist: (103)10 = (01100111)2Ihr Zweier-Komplement: 10011000 + 1 = 10011001

– Subtraktion � Addition: 01010101 + 10011001 = 11101110– Anzahl der Stellen nicht gewachsen

� Keine Streichung der führenden 1, die 1 ganz links zeigt ein negativesErgebnis, d.h. Ergebnis liegt als Zweier-Komplement vor

� Übersetzung = Bildung Zweier-Komplement: 11101110 � 00010001 +1 = 00010010 = (18)10

� Das negative Ergebnis lautet -18

Negative Zahlen im Binärsystem (6)

Page 152: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�4 Möglichkeiten der Darstellung (cont‘d)

� Exzess 2n-1

� der gesamte darstellbare Zahlenbereich (positive und negative Halbachse) wird auf die positive Halbachse abgebildet

exzess-zahl = zahl + 2n-1

� Beispiel mit n = 8, d.h. Exzess = „Shift“ = 28-1 = 27

(-3)10 � -3 + 128 = (125)10 = (01111101)2

� Die Darstellungen sind mit denjenigen der Zweier-Komplement-Darstellung bis auf das invertierte linke Bit („Vorzeichen“) identisch

Negative Zahlen im Binärsystem (7)

Page 153: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Vergleich der 4 Systeme (n=4) Negative Zahlen im Binärsystem (8)

Dual Vorz./Betrag Einer-Kompl. Zweier-Kompl. Exzess

0000 + 0 + 0 0 – 80001 + 1 + 1 + 1 – 70010 + 2 + 2 + 2 – 60011 + 3 + 3 + 3 – 50100 + 4 + 4 + 4 – 40101 + 5 + 5 + 5 – 30110 + 6 + 6 + 6 – 20111 + 7 + 7 + 7 – 11000 – 0 – 7 – 8 01001 – 1 – 6 – 7 + 11010 – 2 – 5 – 6 + 21011 – 3 – 4 – 5 + 31100 – 4 – 3 – 4 + 41101 – 5 – 2 – 3 + 51110 – 6 – 1 – 2 + 61111 – 7 – 0 – 1 + 7

Page 154: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Negative Zahlen im Binärsystem (9)�Zahlenring (n=8) für Dualzahlen und Zweier-Komplement

Page 155: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen: Darstellung und ArithmetikGleitkommazahlen�Zahlenmenge

� rationale Zahlen: r = a/b

Zahlenstrahla

b

1

1r=a/b

� reelle Zahlen: Hinzunahme von nicht-rationalen Zahlen: �, e, �2Die reellen Zahlen in ihrer mathematischen Bedeutung stellen einKontinuum dar (jedes beliebig große Intervall auf dem Zahlenstrahl enthält unendlich viele Werte)

Page 156: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen (1)

�Zahlenmenge (cont‘d)

� Wertebereich REAL (Gleitkommazahlen) im Rechner stellt eine endliche Menge von Repräsentanten von Intervallen des Kontinuums dar � Diskretisierung� numerische Darstellung � Verarbeitung von Daten des Typs REAL

nicht exakt (� numerische Mathematik)

Gleitkommazahlen � mathematisch reelle Zahlen� mathematisch rationale Zahlen

Page 157: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

�Zahlendarstellung (Konrad Zuse, 1937)

Gleitkommazahlen (2)

ebmzahl ��

0.1 = 1/10 = 1/b ist kleinstmög-licher Mantissenbetrag!Warum?Der nächstkleinere Zahlen-betrag wäre: 0.099 • 10-99

wegen normierter Darstellung: 0.099 • 10-99

� 0.99 • 10-100

Das ist unmöglich wegen zwei-ziffrigem Exponent! � m : Mantisse , -M < m < +M

Normalform: 1/b � |m| < 1 oder m = 0� b : Basis, z.B. 10, aber auch kleine Potenz von 2: 2, 4, 8, 16� e : Exponent, -E � e � +E, auch -E1 � e � +E2� alle Werte M, b, E sind rechnerabhängig� Aufbau:

zahl = ± 0.a1a2...aµ • be mit a1 � 0 (normalisierte Darstellung)und 0 � ai � b-1

� Beispiel: b = 10, Mantisse m: 3 Ziffern, Exponent e: 2 Ziffern� Mantisse: 1/10 � |m| < 1 oder 0� Exponent: -99 � e � +99� darstellbarer Bereich: – 0.999 • 1099 ... – 0.100 • 10-99

+0.100 • 10-99 ... +0.999 • 1099

� Multiplikation/Division mit b: shift der Zahl-Ziffernfolge um 1 Stelle nach links/rechts oder e � e+1 / e � e-1

Page 158: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Die Mantisse ist somit um 1Bit länger als gedacht, weil a1 nichtgespeichert werden muss!�Normalisierung

� Darstellung der Mantisse in Normalform: 1/b � |m| < 1� eine Mantisse mit gesetztem Führungsbit a1 heisst normalisiert

zahl = ± 0.a1a2...aµ • be mit a1 = 1 � durch die Normalisierung wird die Gleitpunktdarstellung eindeutig

�Rechnerinterne Repräsentation� der verfügbare Platz (hier 2 Byte) wird in Felder aufgeteilt

Gleitkommazahlen (3)

07815

MantisseExponentVorzeichen

� Für arithmetische Operationen muss bei hardwaremäßiger Realisierung hoher Aufwand betrieben werden, daher� Software-Realisierung� Spezialprozessoren� Leistungsdaten: MIPS, FLOPS

Page 159: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen (4)

�Beispiel einer 3 Byte breiten Zahlendarstellung (Basis b = 2)

MantisseExponentVorzeichen

1612 15130 0 0 0 0 0 0 0 0 0 1 1 0 1 100 1 0 1 0 1 0 0

� Vorzeichen: 0, also +� Exponent e: Breite: 7 Bit

Exzess 64(=27-1) - Darstellung(1010100)2 = (84)10 � 84 - 64 = 20be = 2 20 = 1048576

� Mantisse m: Breite: 16 BitDarstellung der Mantisse:

1615131216

1

212121212 �����

�����������j

jjam

160134 2)21212121( ����

���������

16227 �

��

� Zahl: zahl = + 27 • 2-16 • 220 = + 432

Page 160: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen (5)�Beispiel (cont‘d)

� Normalisierung:

)2121202121(2(2 543211120 ������

������������

)2121202121(2 543219 �����

�����������

)2121202121(2 161514131220 �����

�����������zahl

� Vorzeichen: bleibt 0, also +� Exponent e: Breite: 7 Bit

Exzess 64(=27-1) - Darstellung9 + 64 = 73 � (73)10 = (1001001)2Exponent e um 11 dekrementiert

� Mantisse m: Breite: 16 BitMantisse um 11 Bit nach links geschoben

MantisseExponentVorzeichen1 0 0 1 1 0 0 0 0 0 0 0 0 0 010 1 0 0 1 0 0 1

� Zahl bleibt erhalten: zahl = + 27 • 2-5 • 29 = + 432

Page 161: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen (6)

�REAL-Zahlen auf dem Zahlenstrahl� Beispiel: b = 10, Mantisse m: 3 Ziffern, Exponent e: 2 Ziffern

0-10100 - 0.100 • 10-99 +10100+0.100 • 10-99

negative overflow

positive overflow

negative underflow

positive underflow

NULLausdrückbarenegative Zahlen

ausdrückbarepositive Zahlen

-0.999 • 1099 -0.999 • 1099

� jede REAL-Zahlen repräsentiert ein Intervall der reellen Zahlen;das Intervall wächst mit zunehmendem Betrag der Zahl, d.h. die Dichte der Repräsentation nimmt mit zunehmendem Betrag der Zahl ab

� Eine Abschätzung des Einflusses der Ungleichverteilung der Repräsentanten auf die rechenoperationen ist nicht trivial

� Behandlung von overflow/underflow, Null, „undefiniert“? � IEEE Floating-Point Standard 754 (1985) (siehe A.S. Tanenbaum)

Page 162: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen (7)

�Probleme� Test: Assoziativgesetz (Beispiel mit 4-stelliger Arithmetik)

x = 9.900, y = 1.000, z = -0.999(x+y) + z = 10.90 + (-0.999) = 9.910x + (y+z) = 9.900 + 0.001 = 9.901

� Test: Distributivgesetz (Beispiel mit 4-stelliger Arithmetik)x = 1100., y = -5.000, z = 5.001(x•y) + (x•z) = (-5500) + 5501 = 1.000x • (y+z) = 1100. • 0.001 = 1.100

� AuslöschungBei der Subtraktion zweier fast gleich großer Werte heben sich die signifikanten Ziffern auf und die Differenz verliert dadurch an Signifikanz (z.B. Differenzenquotient)

� Überlaufgefahr... bei Division durch kleine Werte

Page 163: Teil III : Vom Algorithmus zur Programmiersprache€¦ · Teil III : Vom Algorithmus zur Programmiersprache 1. Algorithmen, Programme, Sprachen 2. Programm- und Sprachelemente 3.

Gleitkommazahlen (8)

�Rechnerarithmetikyx e

ye

x mymx 2,2 ����

� Addition

yxe

yee

x eefallsmmyx yyx������

� 2)2(� Subtraktion

eeeyxyx eefallsmmyx yyx

������� 2)2(

� Multiplikationee yx

yx mmyx �

���� 2)(� Division

ee yxyx mmyx �

���� 2)(