Teil II: Vom Algorithmus zur Programmiersprache

Teil II: Vom Algorithmus zur Programmiersprache
Teil II: Vom Algorithmus zur Programmiersprache
1. Algorithmen, Programme, Sprachen
2. Programm- & Sprachelemente
3. Modula-2
Organisation der Vorlesungsunterlagen
Strukturierung
Zwecks weiterer Strukturierung werden verschiedene Symbole und Zeichen
verwendet, die als „Highlighter“ dienen sollen
Merker:
Warnung:
Kommentierung und Hervorhebung bestimmter Inhalte
Hinweis auf häufige Probleme,
Fehlerquellen
Achtung – Hinweis:
Zusammenfassung:
Hinweiszeichen für verschiedene wichtige Inhalte
und Zusammenhänge
Resumee – Darstellung von
Inhalten des besprochenen
Abschnitts
Vertiefung:
Literatur:
Betrachtung von Details
(Hintergrund, Theorie, etc.)
Hinweise auf besondere oder
wichtige Literaturquellen
1
.)14+6*/'0
41)4#//'
24#%*'0
Der Algorithmusbegriff
Definition:
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 heisst,
es werden Verarbeitungsvorschriften als digitale Nachrichten formuliert,
die interpretiert werden müssen.
Randbedingungen:
verschiedene Formalismen sind möglich
gemeinsames Sprachverständnis ist Voraussetzung
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
2
Beispiel 1: Rezept für Marmorkuchen
Zutaten: mehr oder minder eindeutige Eingabeparameter
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
1
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
2 Den hellen Teig in eine gefettete, mit
den Kakao mischen.
Mehl ausgestreute Form 3
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º)4backen. Backzeit ca. 50 min.
Beispiel 2: Anleitung Münzfernsprecher
Elementare Eigenschaften eines Algorithmus:
h
h
h
Ausführbarkeit und Reproduzierbarkeit
Prozessor und Prozess
schrittweise Ausführung elementarer Operationen
was heisst „elementar“;
Abstraktionsniveau (minimaler Grad an Detaillierung)
h
h
h
Endlichkeit der Beschreibung
Termination (Ausführungszeit endlich)
unabhängig von Programmiersprache und Computer
3
weitere Merkmale von Algorithmen:
h
h
h
h
h
h
h
h
Ausführung von Algorithmus-Teilen sequentiell/parallell
Operationen auf benannten Objekten
Eingabe-Objekte zur Ausführung des Algorithmus
Ausgabe-Objekte nach Ausführung des Algorithmus
Algorithmen und Objekte können elementar aber auch
zusammengesetzt sein.
nicht-elementare Unteralgorithmen, die durch ihren
„Namen“ aufgerufen werden. → Prozedurkonzept
Wiederholungsanweisungen → Mehrfachausführungen
bedingte Ausführung von Verarbeitungsschritten
Einige Begriffe:
i
Sequentialität
Parallelität
Kollateralität (sequentiell & parallel)
k
Termination
i
i
•
k
Determinismus
•
k
terminierender Algorithmus kommt in endlich vielen Schritten zum
Ende
derterministischer Algorithmus besitzt eindeutig vorgeschriebenen
Verlauf
Determiniertheit
•
•
•
derterminierter Algorithmus führt zu eindeutigem Ergebnis
derterministischer Algorithmus ist immer determiniert (verkörpert
also eine Abbildung)
nicht-derterministischer Algorithmus ist bisweilen determiniert
4
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
➘ Termination
•
•
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?
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?
5
Form und Interpretation von Nachrichten
Die Form einer Nachricht wird durch eine Sprache festgelegt.
Zeichen → Folgen von Zeichen
Wörter → Folgen von Wörtern
Sätze → Folgen von Sätzen
Sprache
Aufbau von Strukturen - Sprache:
➘ Grundelement „Zeichen“
•
•
bildet die kleinste Einheit (bzgl. best. Abstraktionsebene)
Pragmatik
➘ Zeichen ∈ Alphabet
•
•
Zeichenfolgen werden durch Verkettung gebildet
Regeln für erlaubte/gültige Verkettungen → Syntax
➘ Interpretation der Inhalte
•
Feststellung der Bedeutung der Inhalte → Semantik
6
Definition algorithmischer Sprachen:
➘ Syntax
•
•
regelhafte Beschreibung (Festlegung) der äusseren Form einer
Zeichen- oder Wortfolge, die ein legales Konstrukt der algorithmischen Sprache ergibt.
Regeln abhängig oder unabhängig von der Interpretation formulierbar.
➘ Semantik
•
•
regelhafte Bedeutungszuweisung zu bestimmten Kombinationen
von Wörtern.
Voraussetzung: „höhere“ Sprache (Metasprache) zur Erläuterung
der Bedeutung der Programmiersprachenkonstrukte.
➘ Pragmatik
•
Zurückführung der in der Sprache als primitiv anzusehenden
Operationen auf einzelne Textersetzungsschritte.
Beispiel 1: Katz und Maus
Pragmatik:
Semantik:
Maus ist Beutetier von Katzen
Katze jagt Vögel, Mäuse
Syntax:
Katze frisst Maus
Maus frisst Katze
7
Beispiel 2: Multiplikation
a:= 5
b:= 6
c:= 5 • 6
→
c = 30
Syntax:
lt. Konstruktionsregeln ein gültiger Ausdruck
Semantik:
Bedeutung: Multiplikation zweier Zahlen a, b
mit bestimmtem Typ (und Wertebereich)
Pragmatik:
Abbildung:
Multiplikation → Anzahl von Additions- und
Shiftbefehlen
Prinzipielle Fragestellungen zu:
Formale Sprachen und Compiler ←→ Spezifikation und
Analyse von Computersprachen
? Wie kann/muss eine Grammatik für eine (Programmier)sprache aussehen?
? Wie kann die Zugehörigkeit eines „Textes“ (Satz, Wort, ...) zu
der durch die Grammatik definierten Sprache überprüft
werden?
? Wie kann ein Programm analysiert werden (→ Parsing), um die
strukturelle Analyse durch den Compiler zu ermöglichen?
? Wie können Mehrdeutigkeiten bestimmt werden mit dem Ziel
einer eindeutigen Analyse (eindeutige Semantik), deren
Ergebnis (ausführbarer Code) dann auf einem Rechner
ausgeführt werden kann?
8
➘ Die Konstruktion von Kunstsprachen und die Analyse ihrer
Sprachelemente ist wegen der Sprachform von Algorithmen für die Informatik von zentraler Bedeutung!
➘ Es geht vornehmlich darum, eine sehr umfangreiche
(meist nicht endliche) Menge von Worten in möglichst
einfacher Form zu beschreiben und die (in der Wortmenge unterstellte) syntaktische Struktur auszudrücken
Rechner als programmierbare Maschine
➘ Formulierung maschineller Verfahren zur operativen
Nachrichtenverarbeitung (Informationsverarbeitung)
⇒ Algorithmen
➘ Eindeutigkeit von
α
N
I
→
Formulierung von „Handlungsanweisungen“ in eindeutiger
Art und Weise
⇒ Aufbau von Strukturen, Sprachen
9
Formale Sprachen
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 Grammatik
→ Formale Sprachen)
festgelegten Regeln (→
Semantik (Bedeutungslehre): Beschreibung der Wirkung eines Programms
auf 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.
Grammatiken und (Formale) Sprachen:
➘ Zeichen, Zeichenfolgen, Sprachen
•
Zeichenmengen
S: endliche Menge von Symbolen (Alphabet)
S ≠ { }, card(S) = |S| = n < ∞
•
Worte (Symbol-, Zeichenketten, strings)
mithilfe der Elemente si∈S werden Zeichenketten „über dem
Alphabet S“ gebildet:
S1 = S
S2 = S x S
Sn = S x S x ... X S (n-fach)
Sn: Menge aller Zeichenketten der Länge n über S
S∗: Menge aller Zeichenketten endlicher Länge über S incl.
leerem Wort λ (S∗ ist freie Sprache über S)
10
•
Sprache über S
Wort: w = s1s2...sn
L ∈ S∗
(∀w ∈ L): |w| = n < ∞ ≠ { }, |λ| = 0, w ∈ S|w|
S∗ enthält alle, durch beliebige Anordnung von si∈S konstruierbaren Worte.
Beschränkung auf
„legale“ Konstrukte
L = R(S) Regelsprache aus S∗
➘ Grammatik
•
Generierung („Produktion“) einer Sprache mittels einer Grammatik
•
Semi - Thue System
GST = (SN,ST,P,wS) mit:
SN: Menge der Nichtterminalzeichen
ST: Menge der Terminalzeichen
SN ∩ ST = ∅
P = {pi}, |P| = n < ∞: Produktionen (Ersetzungsregeln)
P⊆ (SN∪ ST)∗ x (SN∪ ST)∗
pi : α → β, wenn (α,β) ∈ P
wS : 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.
11
➘ Ableitung einer Symbolfolge (Wort)
•
Problem: Es liegt eine Symbolfolge w vor; gehört w zur Sprache,
ist also w ∈ R(S)
•
Strategien:
Top-Down: ausgehend vom Startsymbol wird mittels der
Produktionen (Ersetzungsregeln) abgeleitet, bis die gegebene
Folge produziert ist.
Bottom-Up: umgekehrt
•
Beispiel:
G = (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)
➘ Beispiel: Syntax für einfache deutsche Sätze
•
•
Nicht-Terminalzeichen:
SN= {Satz, Subjekt, Prädikat, Objekt, Nomen, Artikel, Substantiv,
← Variable der Sprache
Verb}
Terminalzeichen:
← Symbole, Darstellungen!
ST= {die, Katze, Maus, frisst}
(schriftlich, bildlich, ...)
•
Startsymbol: wS = Satz
•
Ableitungsregeln (Produktionen P = {pi}):
→
Satz
Subjekt Prädikat Objekt
→
Subjekt
Nomen
→
Nomen
Artikel Substantiv
→
Artikel
die
→
Substantiv
Katze
→
Substantiv
Maus
→
Prädikat
Verb
→
Verb
frisst
→
Objekt
Nomen
12
➘ Beispiel: Syntax für einfache deutsche Sätze (cont‘d)
•
Startsymbol: wS = Satz
•
Ableitungsregeln (Produktionen P = {pi}):
→
Satz
Subjekt Prädikat Objekt
→
Subjekt
Nomen
→
Nomen
Artikel Substantiv
→
Artikel
die
→
Substantiv
Katze
→
Substantiv
Maus
→
Prädikat
Verb
→
Verb
frisst
→
Objekt
Nomen
•
die Katze frisst die Maus (>)
die Katze jagt die Maus (x, es gibt keine Regel: Verb → jagt)
Katze die Maus frisst (x, ...)
die Maus frisst die Katze (>, obwohl semantisch unsinnig!)
41)4#//g
24#%*'.'/'06'
Programmieren und Sprachen
Entwurf und Notation von Programmen
Aufgabe ist es,
einen (abstrakten) Algorithmus in einer maschinell erfassbaren Form zu
formulieren.
Hauptaufgabe ist es allerdings,
Programmiersprache mit ...
einen (abstrakten) Algorithmus zu Aufbauregeln
konzipieren und
verifizieren;
(Syntax)
Programmieren ist somit eine konstruktive
Tätigkeit,
mehr(Semantik)
als nur
Standardinterpretation
Codierung.
→ Spezifikation, Entwurf, Modularisierung, ...
13
Programmierzyklus (aus Puchan et al., 1994)
Problem
Spezifikation des
Problems
Entwicklung eines
Algorithmus
Kodierung mittels
Programmiersprache
am Rechner:
Editieren
Compilieren
richtig kodiert?
Ausführen
(Syntax)
... das
Programm
dem
Algorithmus
entspricht?
... der
Algorithmus
das
Problem
löst?
Testen, d.h. prüfen ob ...
falls o.k.
Programm ist fertig und „wahrscheinlich“ korrekt
reale Phänomene
Testen & beweisbare Korrektheit
Modellbildung
Abstraktion
Algorithmen &
Datenstrukturen
→ Spezifikation
Objekte
Codierung
Daten
Strukturierung
Datenstrukturen
Algorithmen
Formulierung
→ Syntax
Entwurf
Programme
Realisierung am Rechner
14
Programmiersprachen - Programmierstile
➘ imperativ (algorithmisch, prozedural)
•
PASCAL, MODULA-2, BASIC, ALGOL, COBOL, C, FORTRAN
➘ funktional
•
LISP
➘ objektorientiert
•
Smalltalk, C++
➘ prädikativ (logisch)
•
PROLOG
Erste Schritte in MODULA-2
Grundlegender Aufbau von MODULA-2 Programmen
➘ Komponenten eines Programms
• Beschreibung von Aktionen
∗ Anweisungen („statements“)
∗ Kontrollkonstrukte
∗ Abstraktion durch Prozeduren
• Bechreibung von Daten
∗ Deklarationen und Definitionen
∗ Manipulationen auf einfachen und komplexen Daten
➘ Programmschema
MODULE Name [Priorität]
IMPORT
Deklarationen von Konstanten, Typen, Variablen, ...
BEGIN
Initialisierungsteil
Verarbeitungsteil
Ausgabeteil
Rumpf
END Name.
15
Syntaxdiagramme
Konstruktionsmittel
Graphische Notation zur Festlegung einer kontextfreien Grammatik (Typ 2)
Grundbausteine der Diagramme :
1.
Nicht-terminale Zeichen (Variablen) A
Platzhalter für ein weiteres Diagramm)
(
A
2.
Terminalzeichen s
(
3.
s
Zeichen der formalen Sprache)
Konkatenationen (Wortkonstruktionen)
(
Übergang von einem Knoten
(
) zum folgenden)
Konstruktionsmittel (EBNF – Syntaxdiagramm) :
1.
Alternative
A → a | B.
a
A
B
2.
Verkettung
A → aB .
3.
A
a
B
Wiederholungen
0- oder 1-mal α
A → [α ].
0-, 1- oder n-mal α
A → {α }.
α
α
16
Operatoren und Begrenzer für Modula-2
Reservierte Begriffe für Modula-2
17
Syntaxdiagramme
für Modula-2 (1)
Syntaxdiagramme
für Modula-2 (2)
18
Syntaxdiagramme
für Modula-2 (3)
Syntaxdiagramme
für Modula-2 (4)
19
Syntaxdiagramme
für Modula-2 (5)
Syntaxdiagramme
für Modula-2 (6)
20
Syntaxdiagramme
für Modula-2 (7)
Syntaxdiagramme
für Modula-2 (8)
21
Syntaxdiagramme
für Modula-2 (9)
Syntaxdiagramme
für Modula-2 (10)
22
Ein erstes Programm
2 Bibliotheken (explizite Nennung)
alternativ: globaler Import: IMPORT RealInOut
MODULE Mehrwertsteuer;
FROM RealInOut IMPORT ReadReal, WriteReal, WriteFloat;
FROM InOut
IMPORT WriteString, WriteLn;
CONST
VAR
MWStSatz = 0.16;
Preis, MWSt : REAL;
BEGIN
WriteString("Geben Sie den Preis ein: ");
ReadReal(Preis);
MWSt := Preis • MWStSatz;
8 Stellen vor, 2 hinter Dez.pkt.
WriteLn;
WriteString("Die Mehrwertsteuer beträgt (Float): ");
WriteFloat(MWSt, 8, 2);
WriteLn;
WriteString("Die Mehrwertsteuer beträgt (Real): ");
WriteReal(MWSt, 10);
WriteLn;
Länge der Ausgabe
END Mehrwertsteuer.
Kommunikation: Programm - Betriebssystem
Modula-2 Programm
IMPORTs
Bibliotheks-Modul
Bibliotheks-Modul
Bibliotheks-Modul
Bibliotheks-Modul
Anforderungen
Dienste
Betriebssystem
(hier: UNIX)
23
➘ 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/
Gestaltung von Programmen (Grundsätzliches)
¾
Grundsätzliches
• Quelltext eines Programms (= Nachricht)
⇒ Arbeitsergebnis, Doku, Unterlage
→ Wartung, Programmerweiterung ...)
(→
¾
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
• sinnvolle Verwendung von Kommentaren (* ... *)
24
Gestaltung von Programmen (Grundsätzliches)
¾
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
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.
pfui
25
Übersetzung von Programmen („Compilation“)
Modula-2
Programm
Modula-2
Compiler
Fehlermeldungen
(Syntaxfehler)
ausführbarer Code
a.out
<name>.m2
UNIX
input
a.out
output
UNIX
Ü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>
26
Einfache Datentypen
Eigenschaften eines „Typs“
¾
Grundsätzliches
• Der (Daten-)Typ kennzeichnet die aktuelle Wertemenge
eines Objekts (Konstante, Variable, Ausdruck, Funktion, ...)
• Typ-Zuweisung 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
Datentyp
Menge von Operationen,
die auf die Daten angewendet werden können
Menge von Werten,
die eine Variable, ...
annehmen kann
27
Taxonomie der Datentypen
Datentypen
Einfache Datentypen
Strukurierte Datentypen
Zeiger Datentypen
Gleitkommazahlen
POINTER
REAL
LONGREAL
COMPLEX
LONGCOMPLEX
ARRAY
RECORD
STRING
SET,
PACKEDSET
BITSET
Ganzzahlen und
Ordinaltypen
CARDINAL
INTEGER
BOOLEAN
CHAR
Ausschnittstyp/
Unterbereichstyp
(subrange)
Aufzählungstyp
(enumeration)
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
Vergleiche
+
nur beschränkter
–
Wertebereich verfügbar !!
*
DIV, MOD
=,<>,>=,>,<=,<
28
¾
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
Vergleiche
Vorzeichenumkehrung
+
nur beschränkter
–
Wertebereich verfügbar !!
*
DIV, MOD
=,<>,>=,>,<=,<
–
• Konvertierung ↔ Cardinal
VAR
i,int
: INTEGER;
c,card
: CARDINAL;
i:= INTEGER(card);
c:= CARDINAL(int)
¾
Definition von DIV und MOD
• (x,y) → (q,r)
mit x,y,q,r ∈ N
wobei x DIV y → q
(„Quotient“)
x MOD y → r („Rest“)
• x DIV y = trunc(x/y) =: q
wobei q > 0, if sgn(x)=sgn(y)
q = 0, if abs(x)<abs(y)
≠sgn(y)
q < 0, if sgn(x)≠
• x MOD y =: r
wobei r = x - (xDIVy) y, if r ≥ 0
r = x - (xDIVy) y + y, if r < 0
• „DIV-MOD“ - Identität
(xDIVy) y + (xMODy) = x
Logisch:
abgeschnittener Quotient • Nenner + Rest = Zähler
29
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement