Grundlagen der Informatik

Werbung
Hans Delfs
Helmut Knebl
Christian Schiedermeier
Grundlagen der Informatik
nhtw – Nürnberger Hochschulskripten für Technik und Wirtschaft
Prof. Dr. Hans Delfs
Prof. Dr. Helmut Knebl
Prof. Dr. Christian Schiedermeier
Georg–Simon–Ohm Fachhochschule Nürnberg
Fachbereich Informatik
Alle Recht vorbehalten.
c
2001 bei den Autoren
Copyright
Nürnberger Hochschulskripten für Technik und Wirtschaft
Nano–Verlag, Nürnberg
22
1.4 Aufgaben
1.4
1.4.1
Aufgaben
Testaufgaben
Ganze Zahlen ohne Vorzeichen.
1. Wandeln Sie die folgenden Dezimalzahlen ohne Vorzeichen in das Dual-,
Hexadezimal- und 8er-System um: 37, 236, 255, 1997.
2. Wandeln Sie die folgenden Dual- bzw. Hexadezimalzahlen ohne Vorzeichen in das Dezimalzahlsystem um: 100001, 101100, 011111, 100000,
111111, F F F F , F E00, E021, 7F F F F , 8F F F F , F F F F 2A.
3. Welcher Wochentag ist in 312321 Tagen nach dem heutigen Tag?
4. Wandeln Sie folgenden Zahlen ins Dezimalsystem um und führen Sie die
Rechnung im Ausgangssystem durch: (120102)3 , (120102)5
5. Addieren Sie wie ein Computer, der im Dualsystem mit 8 Stellen bzw.
im Hexadezimalsystem mit 3 Stellen rechnet:
37 + 45, 236 + 37, 1997 + 1998, 3995 + 320.
Sind die Ergebnisse korrekt ?
6. Multiplizieren Sie im Dualsystem 37 · 31.
7. Führen Sie für b = 3 und b = 5 aus: (120102)b ∗ (211101)b .
8. Subtrahieren Sie wie ein Computer, der im Dualsystem mit 8 Stellen und
Einer- bzw. Zweier-Komplement rechnet: 255 − 236, 236 − 255.
Sind die Ergebnisse korrekt ?
Ganze Zahlen mit Vorzeichen.
1. Wandeln Sie die folgenden Dezimalzahlen in das Dual- (12 Stellen),
Hexadezimal- (4 Stellen) und 8er-System (5 Stellen) um, jeweils mit Darstellung im b- und (b − 1)-Komplement:
−37, −236, −255, −1997.
2. Wandeln Sie die folgenden Dual- bzw. Hexadezimalzahlen in Dezimalzahlen (Darstellung mit Vorzeichen und Betrag) um. Nehmen Sie dabei
an, daß die Dual-/Hexadezimalzahlen im b- bzw. (b − 1)- Komplement
vorliegen: 100001, 101100, 011111, 100000, 111111, F F F F F , F F E00,
9E021, 7F F F F , 8F F F F .
1 ARITHMETIK
23
3. Ganze Zahlen sollen binär mit einer Exzeß-Darstellung abgelegt werden.10
Bits stehen zur Verfügung. Es sollen nach Möglichkeit gleich viele positive
und negative Zahlen darstellbar sein. Wählen Sie eine geeignete ExzeßDarstellung für −48, +237, −534, +511 und geben Sie die Bitmuster an.
4. Welche Zahlen würden Sie im Dezimalsystem (Hexadezimalsystem) zu
negativen Zahlen erklären, falls die Darstellung im b bzw. b − 1 Komplement erfolgt.
5. Führen Sie die Berechnung von 1992 − 2222 durch Addition bei der Darstellung im Neuner- bzw. Zehner-Komplement durch.
6. Wie viele Stellen benötigen Sie in einem Rechner, der dual mit Zweierbzw. Einer-Komplement-Arithmetik arbeitet, um folgende Rechnungen
auszuführen: 236 − 37, 255 − 236, 236 − 256? Führen Sie die Rechnungen
durch.
Reelle Zahlen.
1. Geben Sie die 2-adische Entwicklung von
81
7
, 1536, 8192
2048
an.
2. Konvertieren Sie
(a) Vom Dual- ins Dezimal- bzw. Hexadezimalsystem:
10110.110010, 1000.0000011, 0.111001.
(b) Vom Hexadezimal- ins Dual- bzw. Dezimalsystem :
175.2213, 0.2059, 0.001, F 2E.F F F, B00F.0030.
3. Geben Sie für die folgenden Gleitkommazahlen die normalisierte Darstellung an:
(a) Dualsystem, Exponentenbasis 2: 0.001011 · 212 ,
(b) Dualsystem, Exponentenbasis 23 = 8:
0.001011 · 84 , 0.00011001 · 8−12 .
0.11001 · 2−39 .
4. Für die Darstellung z = m · 2e von binären normalisierten Gleitkommazahlen stehen insgesamt 24 Stellen zur Verfügung, davon 1 Bit für das
Vorzeichen und 8 Bit für den Exponenten. Die Exponenten seien codiert
in
(a) Zweier-Komplement-Darstellung,
(b) Einer-Komplement-Darstellung,
24
1.4 Aufgaben
(c) Exzeß 128 - Darstellung.
Lösen Sie für alle 3 Fälle folgende Aufgaben:
(a) Was ist der Unter- und Überlaufbereich der Darstellung ?
(b) Welche Zahl wird durch die Bitmuster e = 10111010 und m =
10011010 . . . 0 dargestellt?
(c) Wie groß ist der Abstand zwischen zwei benachbarten darstellbaren
Zahlen z in den Bereichen 2−30 ≤ z < 2−29 , 2−15 ≤ z < 2−14 ,
1 ≤ z < 2, 221 ≤ z < 222 .
17
darstellbar ? Welche darstellbaren Zahlen
(d) Ist die Zahl z = 256 + 256
haben minimalen Abstand von z ? Geben Sie deren Bitmuster und
den Abstand an.
5. Lösen Sie für das IEEE-Standard-Format (single- und double precision)
die (für das IEEE-Format sinnvoll interpretierbaren) Teile der vorangegangenen Aufgabe und zusätzlich:
37
Sind die Zahlen 8192 + 1024
und (1 − 2−13 ) · 2−137 darstellbar ? Geben Sie
die Bitmuster an.
1.4.2
Übungsaufgaben
Ganze Zahlen ohne Vorzeichen.
1. Sei a2 a1 a0 eine dreistellige Zahl im Dezimalsystem. Dann ist a2 a1 a0 a2 a1 a0
durch 7, 11 und 13 teilbar. Warum gilt dies?
2. Diskutieren Sie die Konvertierung von einem b–adischen System in ein Badisches System für B = bk und umgekehrt. Speziell: b = 2, b = 24 = 16.
3. (a) Zeigen Sie, daß für den Übertrag üi bei der Multiplikation gilt:
0 ≤ üi ≤ b − 2.
(b) Zeigen Sie, daß bei der Multiplikation einer N -stelligen Zahl mit
einer M -stelligen Zahl eine (M + N )-stellige Zahl entsteht.
4. (a) Zeigen Sie: Eine Zahl im Dezimalsystem ist genau dann durch 3
teilbar, wenn ihre Quersumme durch 3 teilbar ist.
(b) Gibt es weitere Zahlen, für die das gilt ?
5. Entwickeln Sie ausgehend von der Addition, die ein Rechner ausführen
kann einen Algorithmus zur Addition von großen Zahlen.
1 ARITHMETIK
25
6. Multiplikation nach Karatsuba, Ofman: Seien x0 , x1 , y0 und y1 n-stellige
Zahlen in einem b–adischen Zahlensystem. x = x0 + bn x1 , y = y0 + bn y1 .
xy = x1 y1 b2n + (x1 y0 + x0 y1 )bn + x0 y0 .
Setze u := (x1 + x0 )(y1 + y0 ). Dann ist
(x1 y0 + x0 y1 ) = u − x1 y1 − x0 y0 (drei statt vier Multiplikationen).
Wenden Sie dieses Verfahren zur Multiplikation von 32-Bit Zahlen an.
Ganze Zahlen mit Vorzeichen.
1. Ganze Zahlen mit Vorzeichen seien mit N Stellen im Zweier-Komplement
dargestellt.
6 −2N −1 gilt:
Zeigen Sie, daß für so dargestellte Zahlen A, B mit B =
Die Bedingung A < B ist genau dann erfüllt, falls bei der Berechnung
von A − B (= A + B̄) gilt: SF 6= OF .
2. (Überlauferkennung durch Vorzeichenverdoppelung) Seien a = (aN −1 , . . . , a0 )
und b = (bN −1 , . . . , b0 ) Darstellungen im zweier Komplement.
α = (aN , a), aN = aN −1 , β = (bN , b), bN = bN −1 ,  = (eN , e) die formal
gebildete Summe e = (eN −1 , . . . , e0 ).
Zeigen Sie: es = as + bs ⇐⇒ eN −1 = eN .
Reelle Zahlen.
1. Führen Sie folgende Gleitkommazahlen in eine normalisierte Darstellung
über:
0.0000666 · 15−2 , 0.0666 · 153 .
(a) Mantisse und Exponent im 10er-System
(b) Mantisse und Exponent (und Exponentenbasis) im 8er-System
2. Diskutieren Sie Vor– und Nachteile einer Exponentenbasis 2N in der normierten Darstellung von Gleitkommazahlen bei zugrunde liegendem Dualsystem im Vergleich zur Exponentenbasis 2.
3. Entwickeln Sie einen Algorithmus zum Vergeich von Gleitkommazahlen
nach dem IEEE Standard.
4. Entwickeln Sie einen Algorithmus zur Addition von Gleitkommazahlen
nach dem IEEE Standard.
54
2.3 Aufgaben
2.3
2.3.1
Aufgaben
Testaufgaben
1. Stellen Sie folgende Funktionen dar (Tabelle, KNF, DNF):
š
1 i gerade
0 sonst
š
1 i<j
2
2
(b) g : B × B −→ B, g(i, j) =
0 sonst
4
(a) g : B −→ B, g(i) =
2. Führen Sie die Vereinfachung der in der vorherigen Aufgabe definierten
Schaltabbildungen durch und stellen Sie die Schaltnetze mit Hilfe von
NAND– und NOR–Gattern dar.
3. Stellen Sie die Schaltfunktionen für die Addition bzw. Multiplikation von
zweistelligen Dualzahlen auf. Vereinfachen Sie die Schaltfunktionen und
zeichnen Sie die dazugehörigen Schaltnetze.
4. (Demultiplexer)
n
Dmux : B n × Bš−→ B 2 , (c, i) 7−→ (Dmux0 (c, i) . . . Dmux2n −1 (c, i)).
i j = c,
Dmuxj (c, i) =
0 sonst.
Der Baustein schaltet aufgrund der Steuerleitungen c = (c0 , . . . , cn−1 )
den Eingang auf einen der Ausgänge.
Geben Sie für n = 4 die Schaltfunktionen an.
5. Entwickeln Sie einen Multiplexer aus einem Decodierer, einem ODER–
Gatter (das mehr als 2 Eingänge haben darf) und m UND-Gattern.
6. Zeigen Sie, daß jedes Schaltnetz aus 2 zu 1 – Multiplexern aufgebaut
werden kann.
7. Ein Schaltnetz soll bei Eingabe der Zahlen z : −3 ≤ z ≤ 2 die Eingabe
in Abhängigkeit einer Steuerleitung s um 1 erhöhen (s = 0) bzw. um 1
erniedrigen (s = 1). Die Codierung der Zahlen erfolgt im Zweierkomplement.
(a) Geben Sie die Schaltfunktionen an.
(b) Vereinfachen Sie die Schaltfunktionen mit Hilfe von KV-Diagrammen.
2 SCHALTUNGEN
55
8. Ein Flüssigkeitsbehälter habe zur Anzeige von drei Pegelständen drei
Anzeigeleitungen x1 , x2 , x3 . Es gelte:
x1 = 1 falls 13 ≤ Pegel
x2 = 1 falls 23 ≤ Pegel
x3 = 1 falls Behälter voll.
Zwei Pumpen füllen den Behälter. Dabei gilt:
P1 und P2 an, falls Pegel < 13
P2 an, falls 13 ≤ Pegel < 32
P1 an, falls 23 ≤ Pegel < voll.
Bestimmen Sie die Schaltfunktionen zur Steuerung der Pumpen P1 und
P2 , vereinfachen Sie die Schaltfunktionen und zeichnen Sie das dazugehörige Schaltnetz.
9. Gegeben sei ein Schaltwerk mit zwei Flipflops Q0 , Q1 und zwei externen
Eingängen e0 , e1 . Entwerfen Sie das Schaltnetz für folgende Funktionstabelle:
e0 e1 Q0 Q1
0 0 Q0 Q1
1
0 .
0 1
1 0
1
1
1 1 Q̄0 Q̄1
10. Konstruieren Sie einen dreistelligen Dualzähler modulo 8, dessen Inhalt
bei jedem Zählimpuls um 3 vergrößert wird.
2.3.2
Übungsaufgaben
1. Ein Schaltnetz hat 3 Eingänge (x1 , x2 , x3 ), 3 Steuerleitungen (c1 , c2 , c3 )
und 3 Ausgänge (y1 , y2 , y3 ). In Abhängigkeit der Steuerleitungen (c1 , c2 , c3 )
soll den Ausgängen eine Permutation der Eingänge zugewiesen werden:
(y1 , y2 , y3 ) = (xπ(1) , xπ(2) , xπ(3) ) und π = π(c1 , c2 , c3 ). Geben Sie die Schaltfunktionen in möglichst einfacher Form an.
2. Seien x = xn−1 . . . x0 und y = yn−1 . . . y0 vorzeichenlose ganze Zahlen.
Cm−1 := Cm−2 (xm−1 · ym−1 + xm−1 · ym−1 ) + xm−1 ym−1 , m ≥ 1, C−1 = 0.
(a) Zeigen Sie: y < x ⇐⇒ Cn−1 = 1.
(b) Wenden Sie das Verfahren für n = 4 an und geben Sie das Schaltnetz
an.
56
2.3 Aufgaben
3. (Gray–Code) Sei k ∈ N, n = 2k+1 − 1. Ein Gray–Code für die Menge
{0, 1, . . . , n} ist eine bijektive Abbildung gck : {0, 1, . . . , n} → B k+1 ,
mit (gck (i) und gck (i + 1)) unterscheiden sich an genau einer Stelle, i =
0, . . . , n.
(a) Zeigen Sie: Durch Gk : B k+1 → B k+1 , Gk (x0 , . . . , xk ) := (g0 , . . . , gk ),
wobei gk := xk und gi := xi x̄i+1 + x̄i xi+1 , i = 0, . . . , k − 1 wird ein
Graycode auf {0, 1, . . . , n} definiert, falls (x0 , . . . , xk ) als Darstellung einer Zahl im Dualsystem aufgefaßt wird.
Hinweis: Dk : B k+1 → B k+1 , Dk (x0 , . . . , xk ) := (d0 , . . . , dk ), wobei
dk := xk und di := xi d¯i+1 + x̄i di+1 , i = k − 1, . . . , 0 definiert eine
Umkehrabbildung zu Gk .
(b) Realisieren Sie Gk und Dk durch Schaltnetze.
4. Entwickeln Sie ein rekursives Verfahren zur Konstuktion von Gray–Codes.
5. Entwickeln Sie einen Zähler, der im Gray–Code mod 8 zählt.
6. Konstruieren Sie einen rückwärtszählenden Dualzähler modulo 2n .
7. (von Neumann’scher Additionsalgorithmus) Seien
a = xn−1 . . . x0 , b = yn−1 . . . y0 Binärdarstellungen von ganzen Zahlen
(ohne Vorzeichen).
a1 := (xn−1 ⊕ yn−1 ) . . . (x0 ⊕ y0 ), b1 := (xn−1 ∧ yn−1 ) . . . (x0 ∧ y0 )0.
(x ⊕ y := (x + y) mod 2.)
(a) Zeigen Sie: a + b = a1 + b1 .
(b) Iteriert man das Verfahren, so gilt: a + b = a1 + b1 = a2 + b2 = . . ..
Zeigen Sie: bi = bi,n . . . bi,i 0 . . . 0.
(c) Nach n + 1 Schritten gilt: a + b = an+1 (bn+1 = 0).
(d) Entwickeln Sie ein Schaltwerk für die von Neumann’sche Addition
für n = 4. Modellieren Sie das Schaltwerk als endlichen Automaten.
8. Ein Fußgängerüberweg über eine Straße wird mit einer Ampel geregelt.
Die Ampel schaltet auf Anfrage eines Fußgängers für Fußgänger grün“
”
und Autos rot“. Der Umschaltvorgang erfolgt in folgenden Phasen: Die
”
Ampel zeigt für Autos 1 Zeiteinheit Gelb“ (für Fußgänger rot“), 4
”
”
Zeiteinheiten rot“ (für Fußgänger grün“) und 1 Zeiteinheit rot-gelb“
”
”
”
(für Fußgänger rot“) und dann wieder grün“ (für Fußgänger rot“).
”
”
”
Entwickeln Sie ein Schaltwerk, welches die Ampel steuert. Modellieren
Sie die Problemstellung zunächst durch einen endlichen Automaten und
setzen Sie dann den Entwurf in ein Schaltwerk um.
98
5.5 Aufgaben
5.5
Aufgaben
5.5.1
Testaufgaben
1. Decodieren Sie:
(a) 1000 1111 1110 1111 1100 0000 0000 0000.
(b) 0000 0000 0000 0000 0001 0000 0000 0000.
Geben Sie jeweils die Decodierregel an, die Sie verwendet haben.
2. Übersetzen Sie in Maschinenbefehle:
1
2
3
lw
$t0 400($t1)
add $t0 $s2 $t0
sw $t0 400($t1)
3. Setzen Sie in Assemblercode um:
a = b + 100
4. Konvertieren Sie in eine 32–Bit Zahl ohne Veränderung des Wertes:
(a) 1100 0000 0000 0000.
(b) 0001 0000 0000 0000.
5. Schreiben Sie ein Assemblerprogramm, das eine 16–Bit Zahl im 2’er Komplement in eine 32–Bit Zahl ohne Veränderung des Wertes umwandelt.
6. Geben Sie Assemblercode an, der das Einer– und Zweierkomplement einer vorzeichenlosen ganzen Zahl berechnet.
7. Seien a und b ganze Zahlen, dargestellt im Zweierkomplement. Mit welcher Folge von Assemblerbefehlen überprüfen Sie auf verschiedene Vorzeichen.
8. Setzen Sie in Assemblercode um:
x[10] = x[11] + 5
5 DIE MASCHINENPROGRAMMEBENE EINES RECHNERS
99
9. a und b seien Arrays und c der Inhalt von Register $s0. Setzen Sie in
Assemblercode um:
for i = 0 to 100 do
a[i] = b[i] + c
10. Schreiben Sie ein Assemblerprogramm, welches ein Receiver–Bit–Feld
mit Daten füllt.
11. Welche Methoden kennen Sie, um ein Register mit einer 32–Bit Konstanten zu laden?
12. Schreiben Sie ein Programm, das den Inhalt eines Registers in Binärdarstellung bzw. Oktaldarstellung ausgibt.
13. Setzen Sie in Assemblercode um:
while (save[i] == k) do
i=i+j
Sie sollen dabei nur eine Jump– oder Branch–Anweisung benutzen.
14. Setzen Sie die aus der Programmiersprache C bekannten Funktionen in
Assemblercode um:
char ∗strcpy(char ∗dst, const char ∗src), int strlen(const char ∗s).
15. Schreiben Sie ein Unterprogramm, das in einem gegebenen String Kleinbuchstaben in Großbuchstaben umwandelt.
16. Beschreiben Sie mit einem Satz, was das folgende Programm tut:
1 begin: addi $t0 $zero 0
2
addi $t1 $zero 1
3 loop: slt
$t2 $a0
$t1
4
bne $t2 $zero finish
$t1
5
add $t0 $t0
6
addi $t1 $t1
2
7
loop
j
8 finish: add $v0 $t0
$zero
100
5.5 Aufgaben
17. Beschreiben Sie, was das folgende Programm tut:
1
2
3
4
5
6
sll
srl
sll
srl
or
or
$t0
$s0
$t1
$s1
$s1
$s0
$s0
$s0
$s1
$s1
$s1
$s0
31
1
31
1
$t0
$t1
18. Geben Sie eine Assemblerbefehlsfolge an, die einen zusammenhängenden
Bereich (mit constanten Grenzen) von $s0 an die niederwertigen Stellen
von $s1 kopiert.
19. Optimieren Sie das Sortierbeispiel.
20. Geben Sie Implementierungen für die folgenden Pseudobefehle:
(a) Branch on greater (less) than equal
(b) Branch on greater (less) than equal unsigned
(c) Branch on greater (less) than
(d) Branch on greater (less) than unsigned
5.5.2
Übungsaufgaben
1. Mit welcher Folge von Assemblerbefehlen können Sie ohne zusätzlichen
Speicher die Inhalte von zwei Registern vertauschen.
2. Seien a und b vorzeichenlose ganze Zahlen.
Bei der Addition von a und b tritt ein Überlauf auf falls gilt:
232 − 1 < a + b (⇐⇒ 232 − a − 1 < b).
Setzen Sie dieses Kriterium zur Überlauferkennung in Assemblercode um
und überlegen Sie dabei, wie Sie 232 − a − 1 effizient berechnen können.
3. Seien a und b ganze Zahlen, dargestellt im Zweierkomplement. Sie kennen folgendes Kriterium zur Überlauferkennung:
Es tritt bei der Addition c = a + b genau dann ein Überlauf auf, falls
gilt: sign(a) = sign(b) =
6 sign(c).
Setzen Sie dieses Kriterium in Assemblercode um. Benutzen Sie dabei
die vozeichenlose Addition und überlegen Sie, wie Sie effizient auf verschiedene Vorzeichen überprüfen.
5 DIE MASCHINENPROGRAMMEBENE EINES RECHNERS
101
4. Schreiben Sie ein Unterprogramm, das den Inhalt eines Registers auf eine
Potenz von zwei testet.
5. Schreiben Sie ein Unterprogramm, das den Inhalt eines Registers in Hexadezimaldarstellung ausgibt. Sie sollen dabei ohne Übersetzungstabel”
le“ auskommen. Vergleichen Sie Ihre Lösung mit der in der Vorlesung
besprochenen Lösung.
6. Schreiben Sie ein Unterprogramm, das einen arithmetischen Ausdrucks
in Infix–Notation in umgekehrte polnische Notation umwandelt. Jeder
arithmetische Ausdruck ist dabei als Zeichenkette im ASCII–Code gegeben. Die Zahlen seien im Dezimalsystem codiert.
7. Schreiben Sie ein Unterprogramm, das den Wert eines arithmetischen
Ausdrucks in umgekehrter polnischer Notation ausrechnet. Der arithmetische Ausdruck in umgekehrter polnischer Notation soll dabei als
Zeichenkette im ASCII–Code übergeben werden. Die Zahlen seien im
Dezimalsystem codiert.
8. Schreiben Sie ein Unterprogramm, das den größten gemeinsammen Teiler
von zwei Zahlen berechnet.
9. Setzen Sie die aus der Programmiersprache C bekannte Funktion
int strcmp(const char ∗s1, const char ∗s2)
in Assemblercode um.
10. Schreiben Sie ein Unterprogramm, das 64–Bit Zahlen addiert.
11. Schreiben Sie ein Unterprogramm, das zwei Matrizen multipliziert.
12. Setzen Sie die folgende Funktion in Assemblercode (Rekursion/Iteration)
um:
Algorithmus 5.1.
int Fac(n)
1 if n > 0
2
then return nFac(n − 1)
3
else return 1
13. Setzen Sie die folgende Funktion in Assemblercode (Iteration) um:
102
5.5 Aufgaben
Algorithmus 5.2.
int Fib(n)
1 if n > 1
2
then return (Fib(n − 1) + Fib(n − 2))
3
else if n == 1
4
then return 1
5
else return 0
14. ( Die Türme von Hanoi“– puzzle)
”
A
B
C
Abbildung 48: Die Türme von Hanoi
Arbeitsschritt: Bewege eine Scheibe von einem Stab zu einem anderen,
wobei eine Scheibe nie auf einer kleineren abgelegt werden darf.
Ziel: Bewege den Turm von A nach B.
Die folgende Funktion gibt eine Folge von Arbeitsschritten aus, die zum
Ziel führen.
Algorithmus 5.3.
hanoi(n, A, B, C)
1 if n > 0
then hanoi(n − 1, A, C, B)
2
3
Bewege Scheibe n von A nach B
hanoi(n − 1, C, B, A)
4
Setzen Sie den Algorithmus in Assemblercode um. Können Sie die Rekursion in eine Iteration umwandeln?
Herunterladen