Registermaschine programmiern?
// Berechnung von n!! Fakultät,
//
// Registerbelegung
// Eingabe:
// R1 = n
// Verarbeitung:
// R2 = Zwischenergebnis
// Ausgabe:
// R0 = n!
// Sonderfälle 0! = 1, 1! = 1
LOAD 1
SUB #1
JNZERO Init
LOAD #1
STORE 2
GOTO ZweiterDurchlaufEnde
Init: LOAD 1
STORE 2
Anfang: LOAD 1
SUB #1
JZERO ZweiterDurchlaufEnde
STORE 1
MUL 2
STORE 2
GOTO Anfang
ZweiterDurchlaufEnde: LOAD 2 /////Mehrfach Fak
STORE 1
SUB #1
JNZERO Init2
LOAD #1
GOTO Ende
Init2: LOAD 1
Anfang2: LOAD 1
SUB #1
JZERO Ende
STORE 1
MUL 2
STORE 2
GOTO Anfang2
Ende: LOAD 2
END
![](https://images.gutefrage.net/media/user/Skippy2002/1645812797757_nmmslarge__0_0_847_847_f3b5d8a7aeefdf29ae33adb8e0ac8977.jpg?v=1645812798000)
Es war eine ernst gemeinte Frage, ob du auch schon an Google Gemini & Microsoft Copilot gedacht hast. Mit ChatGPT hab' ich sonst sehr gute Erfahrungen gemacht! (Antwort gelöscht)!!
Jaa hab schon alle Kis probiert ,war ja auch ne ernstgemeinte antwort
1 Antwort
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Na für die Mehrfachfakultät musst du ja nur den Code für die Fakultät mit dem Ergebnis noch einmal laufen lassen.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Klar kannst du das. Du musst nur die register passend belegen und an die passende Stelle springen. Und natürlich schauen, dass du nach dem zweitem Durchlauf das Programm beendest.
willst du mir dafür die müsterlösung geben ? Bitte ich brauch nur die Lösung
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Das hilft dir nicht wieter. Außerdem ist die Lösung echt sehr einfach.
glaub mir das wird mir weiterhelfen . Mein lösungsansatz wäre einfach den code zu kopieren und dann bei R1 halt das ergbnis aus dem ersten durchlauf da reinzu setzen ,natürlich müsste das end ergbnis beim ersten wo anderes zwischen gespeichert werden ,nur klappt das net.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Zeig mal deinen Ansatz. Der würde ja an sich auch funktionieren.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Das sollte ja eigentlich klappen. Vorausgestezt natürlich du machst das END des ersten durchlaufs weg, denn sonst kommst du ja nicht zum zweiten Teil.
Wobei du das noch vereinfachen kannst:
- Den Check für 1 brauchst du im zweitem Durchlauf nicht, stattdessen kannst du direkt beim ersten Check ans Ende des zweiten Durchlaufs springen.
- Du kannst Register 2 in Register 1 kopieren, und das dann genauso verwendne wie im ersten Durchlauf, dann brauchst du kein extra Register.
danke hat geklappt ,ist jetzt in der frage . Wie krieg ich es jetzt hin wenn ich z.b jetzt die k fache fakultät haben will?
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Mit einer Schleife und einem Zähler.
Du speicherst dir k in Register 3.
Dann führst du die fakultätsfunktion aus solange k größer als 0 ist und verringerst k danach um 1.
Sprich:
k = ...
jump if k lower equal 0 to end
fak ...
put values in correct registers, so that fak can be called again (result in first register)
decrement k ( k = k - 1)
jump to begin of loop (second line)
end
jaa um ehrlich zu sein ,so langsam kom ich an die grenzen ,ich finde es so schlimm auf diese art zu programmierne
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Auf welche Art? Wo hapert es denn? Hast du Erfahrung mit anderen Sprachen?
ja vielleicht bin auch einfach zu faul mich damit auseinander zu setzen ich brauch das nur für eine Aufgabe . Ich werde es danach nie wieder brauchen ,wirklich nie wieder ,deswegen hätte ich einfach gern die lösung
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Na wenn es nur die eine Aufgabe ist und du das danach nie wieder brauchst, dann wäre es ja auch egal, wenn du die Aufgabe falsch hättest denke ich?
Oder musst du es für eine Klausur können? Dann solltest du das schon auch verstehen.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Wenn du abschreiben möchtest, dann solltest du diene Klasenkameraden fragen. Von mir wirst du nur Hilfestellung zur Selbstlösung bekommen.
kann ich das nicht im code intigrieren?