29.06.2015 Aufrufe

Pseudocode in anderen Sprachen - auf Matthias-Draeger.info

Pseudocode in anderen Sprachen - auf Matthias-Draeger.info

Pseudocode in anderen Sprachen - auf Matthias-Draeger.info

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!