Pseudocode in anderen Sprachen - auf Matthias-Draeger.info
Pseudocode in anderen Sprachen - auf Matthias-Draeger.info
Pseudocode in anderen Sprachen - auf Matthias-Draeger.info
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Technische Informatik II<br />
Rechnerarchitektur<br />
Hilfe für Übungsblatt 3, Aufgabe 6<br />
<strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong><br />
<strong>Matthias</strong> Dräger<br />
E-Mail:<br />
www:<br />
mdraeger@mi.fu-berl<strong>in</strong>.de<br />
www.matthias-draeger.<strong>in</strong>fo/lehre/sose2010ti2/<br />
t<strong>in</strong>yurl.com/sose2010ti2<br />
Zuletzt bearbeitet: 20.05.2010<br />
Technische Informatik II - Rechnerarchitektur, <strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong>, 20.05.2010<br />
1
Übungsblatt 3, Aufgabe 6<br />
Aufgabe 6: MMIX – Unterprogramme (5+5=10)<br />
Informieren Sie sich über die Erstellung von Unterprogrammen <strong>in</strong> MMIX.<br />
a) Implementieren Sie e<strong>in</strong> Unterprogramm für die Berechnung der Fakultätsfunktion n! = 1∙ 2 ∙ . . . ∙ n und geben<br />
Sie e<strong>in</strong> Hauptprogramm an, vom dem das Unterprogramm <strong>auf</strong>gerufen wird.<br />
b) Die rekursive Berechnung des B<strong>in</strong>omialkoeffizienten kann mittels folgender Funktion durchgeführt<br />
werden:<br />
// rekursive Berechnung des B<strong>in</strong>omialkoeffizienten (<strong>Pseudocode</strong>)<br />
function b<strong>in</strong>om (n,k : <strong>in</strong>teger) : <strong>in</strong>teger;<br />
beg<strong>in</strong><br />
if(k = 0 OR k = n) then b<strong>in</strong>om := 1<br />
else if k = 1 then b<strong>in</strong>om := n<br />
else b<strong>in</strong>om := b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1)<br />
end;<br />
Schreiben Sie e<strong>in</strong> vollständiges MMIX Assemblerprogramm, welches mittels e<strong>in</strong>es rekursiven Unterprogramms<br />
den B<strong>in</strong>omialkoeffizient berechnet.<br />
H<strong>in</strong>weis: Benutzen Sie PUSHJ und POP.<br />
Technische Informatik II - Rechnerarchitektur, <strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong>, 20.05.2010<br />
2
<strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong> (1)<br />
<strong>Pseudocode</strong><br />
// rekursive Berechnung des B<strong>in</strong>omialkoeffizienten<br />
function b<strong>in</strong>om (n,k : <strong>in</strong>teger) : <strong>in</strong>teger;<br />
beg<strong>in</strong><br />
if(k = 0 OR k = n) then b<strong>in</strong>om := 1<br />
else if k = 1 then b<strong>in</strong>om := n<br />
else b<strong>in</strong>om := b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1)<br />
end;<br />
Haskell<br />
-- Berechnung des B<strong>in</strong>omialkoeffizienten (rekursiv)<br />
b<strong>in</strong>om :: Integer -> Integer -> Integer<br />
b<strong>in</strong>om n k<br />
| (n < 0 || k < 0) = error ("Fehler: Parameter muessen positiv se<strong>in</strong>!")<br />
| (k == 0 || k == n) = 1<br />
| (k == 1) = n<br />
| otherwise = (b<strong>in</strong>om (n-1) k) + (b<strong>in</strong>om (n-1) (k-1))<br />
Technische Informatik II - Rechnerarchitektur, <strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong>, 20.05.2010<br />
3
<strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong> (2)<br />
<strong>Pseudocode</strong><br />
// rekursive Berechnung des<br />
B<strong>in</strong>omialkoeffizienten<br />
function b<strong>in</strong>om (n,k : <strong>in</strong>teger) : <strong>in</strong>teger;<br />
beg<strong>in</strong><br />
if(k = 0 OR k = n) then b<strong>in</strong>om := 1<br />
else if k = 1 then b<strong>in</strong>om := n<br />
else b<strong>in</strong>om := b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1)<br />
end;<br />
Python<br />
import os<br />
#B<strong>in</strong>omialkoeffizient<br />
def b<strong>in</strong>om(n,k):<br />
if(k == 0 or k == n): return 1<br />
elif(k == 1): return n<br />
else: return b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1)<br />
#Testfunktion, die b<strong>in</strong>om(n,k) <strong>auf</strong>ruft<br />
def test():<br />
n,k = 49,6<br />
pr<strong>in</strong>t '(49 ueber 6) = ',<br />
pr<strong>in</strong>t b<strong>in</strong>om(n,k)<br />
os.system('pause')<br />
#Ausfuehrung von Test<br />
test()<br />
Technische Informatik II - Rechnerarchitektur, <strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong>, 20.05.2010<br />
4
<strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong> (3)<br />
<strong>Pseudocode</strong><br />
// rekursive Berechnung des<br />
B<strong>in</strong>omialkoeffizienten<br />
function b<strong>in</strong>om (n,k : <strong>in</strong>teger) : <strong>in</strong>teger;<br />
beg<strong>in</strong><br />
if(k = 0 OR k = n) then b<strong>in</strong>om := 1<br />
else if k = 1 then b<strong>in</strong>om := n<br />
else b<strong>in</strong>om := b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1)<br />
end;<br />
PHP<br />
<br />
Technische Informatik II - Rechnerarchitektur, <strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong>, 20.05.2010<br />
5
<strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong> (4)<br />
<strong>Pseudocode</strong><br />
// rekursive Berechnung des<br />
B<strong>in</strong>omialkoeffizienten<br />
function b<strong>in</strong>om (n,k : <strong>in</strong>teger) : <strong>in</strong>teger;<br />
beg<strong>in</strong><br />
if(k = 0 OR k = n) then b<strong>in</strong>om := 1<br />
else if k = 1 then b<strong>in</strong>om := n<br />
else b<strong>in</strong>om := b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1)<br />
end;<br />
Java<br />
public class Ueb3_Aufg6 {<br />
public static void ma<strong>in</strong>(Str<strong>in</strong>g[] args) {<br />
System.out.pr<strong>in</strong>tln("(49 über 6) = " + b<strong>in</strong>om(49, 6));<br />
}<br />
/**<br />
* Rekursive Berechnung des B<strong>in</strong>omialkoeffizienten (n über k)<br />
*/<br />
public static <strong>in</strong>t b<strong>in</strong>om(<strong>in</strong>t n, <strong>in</strong>t k){<br />
// 1.Rekursionsanker<br />
if(k == 0 || k == n) return 1;<br />
// 2.Rekursionsanker<br />
else if(k == 1) return n;<br />
// Rekursionsschritt<br />
else return b<strong>in</strong>om(n-1,k) + b<strong>in</strong>om(n-1,k-1);<br />
}<br />
}<br />
Technische Informatik II - Rechnerarchitektur, <strong>Pseudocode</strong> <strong>in</strong> <strong>anderen</strong> <strong>Sprachen</strong>, 20.05.2010<br />
6