Rechnerstrukturen I

Werbung
Rechnerstrukturen
I
4. Termin
Stand : 1.3.06
Ziele:
Parameterübergabetechniken
Techniken der Stapelverwaltung
Implementierung rekursiver Routinen und Koroutinen
Einführung in die Aufgaben des Praktikum-Testats 4
Rekursive Programme und Koroutinen erfordern eine sorgfältige Handhabung der Parameter.
Durch die intensive Nutzung des Stapels entsteht allerdings ein größerer Verwaltungsaufwand
und damit ein höherer Zeitverlust als bei iterativen Verfahren. Die Bequemlichkeit, die rekursive
Programmierung bei höheren Programmiersprachen bietet, überdeckt diesen Effekt, der bei
maschinennaher Programmierung aber augenfällig wird.
Die Aufgaben sind wie gewohnt den Nummern der Praktikumsgruppe zugeordnet Zu jeder Lösung gehört die formale Beschreibung Ihres Ansatzes sowie eine anschauliche Verdeutlichung
Ihrer Lösung. Die Aufgaben sollen unter Verwendung der rekursiven bzw. Koroutinen
Technik gelöst werden. Die Entwicklung zusätzlicher Programme basierend auf iterativen
Verfahren ist durchaus zur Diskussion der Vor- und Nachteile der unterschiedlichen Techniken
nützlich.
Geben Sie gegebenenfalls bis zu 15 Beispielwerte in Form einer Tabelle an, die Sie nachindiziert indirekt ansprechen. Der Index lässt sich bequem über die Kippschalter variieren.
AUFGABEN :
I. HORNER-Schema zur Berechnung einer Potenzreihe
Berechnet werden soll der Wert eines Polynoms n-ten Grades mit den Koeffizienten ai an
der Stelle x :
P( x) 
n
a
i 0
i
 x i  a 0  a1  x  a 2  x 2  ....  a n  x n
Entwickeln Sie hierzu mit Hilfe zweier Koroutinen MULT und ADD ein Programm, das auf
dem Horner-Schema basiert. Es seien n<6 (variabel) und ai natürliche Zahlen im ByteFormat. Beides kann elegant in einem h-Feld abgelegt werden. Um den Arbeitsaufwand zu
reduzieren soll x auf den Bereich der ganzen dezimalen Zahlen von -10 bis +10 beschränkt
werden. Das Ergebnis ist in einem darauf angepassten Format zu speichern.
II. UPN-Rechner (Umgekehrt Polnische Notation) :
Entwickeln Sie einen einfachen UPN-Rechner, der eine ähnliche Arbeitsweise hhat wie ein
HP-Taschenrechner für Ganzzahlen (negative Werte im $10000-Komplement) für die Operationen +,-,*, /, mod und neg . Ziel ist hier, die Koroutinentechnik optimal einzusetzen;
Hierbei werden Sie vermutlich nicht einen HP-Rechner 1.1 umsetzen können.
Es gelte folgende einfache Syntax:
Programm
 UPN-Ausdruck!
UPN-Ausdruck  Term Term Operator
Term
 Ganzzahl | UPN-Ausdruck
Operator

 |  |  |  | mod | neg
Machen Sie sich zunächst klar, wie der UPN-Ausdruck für einen aritmetrischen Ausdruck
aussehen muss, z.B. für
(a+b) • [(a+c) • d+b] • e + f
Achtung : Der Unterschied zum HP-Rechner wird sein, dass dort erst die Zahlen eingegeben werden und dann die Operation eingegeben wird. Hier werden Sie, um die Koroutinentechnik anwenden zu können, zuerst die Information der durchzuführenden Operation benötigen und dann die Zahlen eingeben.
Überlegen Sie, wie Sie den UPN-Ausdruck, der in Form einer Tabelle eingegeben wird,
abarbeiten und wie Sie den Stack aufbauen müssen.
Um den Arbeitsaufwand zu reduzieren können Sie sich auf eines der beiden Trippel
(+ , * , mod) oder (- , / ,neg) beschränken.
III. Gleitende Mittelwert-Bildung
Entwickeln Sie eine Rekursionsformel zur Bildung des arithmetischen Mittelwertes <x> von
n Meßwerten x0 … xn-1 in der Form <x>k+1 = f(xk+1,<x>k). Hieraus ableitbar ist eine gleitende Mittelwertberechnung, d.h. nach jedem Schritt ist der aktuelle Mittelwert von k Werten
bekannt. Für die Meßwerte sind ganze Zahlen im Wortformat anzunehmen, und es sei
n<256.
IV. Ausgabe der kodierten Dezimalziffern einer Dualzahl
Gegeben sei eine natürliche Zahl im Wort-Format. Geben Sie die dazugehörigen Dezimalziffern im gewichteten 8421-Kode byteweise aus. Sie sollten bei der Ausgabe mit der
höchsten 10-er potenz beginnen. Daher sollten Sie die rekursive Programmtechnik benutzen. Die Divisionen durch 10-er Potenzen kann durch fortgesetzte Subtraktion durchgeführt
werden.
Neben des Ausdrucks des Speicherinhalts können Sie die Dezimalziffern auch hintereinander auf der 7-Segmentanzeige ausgeben.
V. Ackermann-Funktion
Die n-te Ackermann-Funktion sei wie folgt definiert :
A(n, k )










kx
,
falls
n0
,
k 0
x
,
falls
k 0
,
n0
A(n  1, A(n, k  1))
,
falls
k, n  0
In der Literatur und im Netz finden unzterschiedliche Definitionen, insbesondere den Wert
von x betreffend. Wählen Sie für x zunächst 1 und dann den sinnvolleren Wert 2. (Warum
ist 2 sinnvoller ?) Implementieren Sie diese Funktion rekursiv bis einschließlich n=2 und legen Sie für k natürliche Zahlen im byte-Format zugrunde. Alle Rechnungen erfolgen mod
$100 .
VI. Umrechnung des Gray-Kodes in den Dualkode
Der Gray-Kode zählt nicht zu den gewichteten Kodes, es gibt aber einen recht einfachen
Algorithmus, den Wert der kodierten natürlichen Zahl zu berechnen. Er ist nicht nur als
Blockkode auf 4 Bits beschränkt, sondern lässt sich auf eine beliebig lange Bitfolge anwenden. Neben der Bitweisen Umrechnung, die wahrscheinlich in Aufgabe 3 verwendet wurde,
gibt es auch einen anderen Umrechnungsalgorithmus, der mit Hilfe der rekursiven Programmtechnik implementiert werden kann. Dieser Algorithmus entspricht im übrigen der
oben erwähnten bitweisen Umwandlungsvorschriften aus der Literatur. Sei n die Anzahl
der noch zu verarbeitenden Bits und x der dezimale Wert dieser noch zu verarbeitenden
Bitfolge. Dann lautet die rekursive Definition :
f ( x, n )
Anmerkung :








,
falls
n 1
f ( x, n  1)
,
falls
x  2 n 1
2 n  1  f ( x  2 n 1 , n  1)
,
falls
x  2 n 1
x
Für n=1 kann x nur die Werte 1 und 0 annehmen. Gilt x=0 schon für
größere n, so wird die mittlere Formel n-1 mal angewandt bis schließlich n=1.
Zur Verdeutlichung ein Beispiel auf 4 Bits (Block-Kode) bezogen : Das Graywort 1011
(Pseudodekade) bedeutet 13 ; da
f(11,4) = 15 - f(3,3) = 15 - f(3,2) = 15 – (3 – f(1,1)) = 15-3+1 = 13
Gegeben sei ein Graywort im Wortformat, für das die kodierte Zahl ausgegeben werden
soll.
Herunterladen