Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Assembler Programme, Lösung
Druckversion
Druckversion
Autor
Universität/Hochschule J Assembler Programme, Lösung
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-10-16


Hallo,

es geht um die Folgende Aufgabe:

Aufgabe 3: Assembler Programme
Nutzen Sie für die folgende Aufgabe den Assembler Code auf der Folie 21 des Foliensatz "Boolesche Logik und Schaltungen". Zusätzlich sei ein Befehl zur Multiplikation wie folgt definiert:



Schreiben Sie folgende Assembler Programme:

a) Berechnung der Multiplikation zweier Zahlen
b) Berechnung der Fakultät einer Zahl
Hinweis: Die Fakulät ist wie folgt definiert: n! := 1 · 2 · 3 · . . . · (n − 1) · n Beachten Sie, dass 0! = 1! = 1 gilt.

Folie 21:



Lösung:


Kann mir jemand die Lösungen erklären? Ich verstehe nicht wie das gemeint ist.

LG, Kajam



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Senior Letzter Besuch: im letzten Monat
Dabei seit: 23.11.2012
Mitteilungen: 228
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-10-16


Hallo Kajam,

kannst du genauer beschreiben welchen Teil der Aufgaben du verstehst und welchen Teil nicht. Ist dir der Unterschied zwischen dem gespeicherten Wert und der Adresse einer Speicherzelle klar?
Die Lösung zu Aufgabe a) geht davon aus, dass der erste Multiplikand in der Speicherzelle mit Adresse 4 und der zweite bei Adresse 5 steht und das Ergebnis wird in der Speicherzelle 3 abgelegt. Wie man die Multiplikanden abspeichert und das Ergebnis ausgibt ist nicht Teil der Lösung.
02: JMP 02 ist eine Endlosschleife nach Ausführung des Multiplikationsbefehls.

Wenn man die Befehle in der Tabelle versteht, sollte b) auch klar sein.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2020-10-16


Bleiben wir noch bei Aufgabe a).
Ich weiß nicht, ob mir der Unterschied zwischen dem gespeicherten Wert und der Adresse der Speicherzelle klar ist. M[x] ist der Wert der Speicherzelle und x die Adresse. Die Adressen 03, 04, 05 sind erfunden und sind frei wählbar?

Das mit JMP ist mir immer noch nicht klar leider. Ich muss nochmal nachfragen. Definition ist ja JMP x = Sprung zu x. Da steht JMP 02. Heißt das jetzt, dass das neue x in Speicheradresse 02 abgespeichert wird? Die neue Summe wäre dann mit den Miltiplikanden der Adresse 03 und 04?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Senior Letzter Besuch: im letzten Monat
Dabei seit: 23.11.2012
Mitteilungen: 228
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2020-10-16


Hallo Kajam,

die Adresse gibt an an welcher Stelle im Speicher der Wert gespeichert wird. Ähnlich wie die Nummer eines Postfachs. Wichtig ist das bei (Von Neumann) Rechnern Daten oder Programmbefehle im (gleichen) Speicher liegen können.
Bei der Lösung zu a) steht an der Adresse 01 der Befehl MUL 03, 04, 05, an der Adresse 02 steht der Befehl JMP 02, also "Springe zum Befehl in Adresse 02. Da steht der Programmzähler aber sowieso schon, d.h. er springt in einer Endlosschleife ständig an die gleiche Stelle. Das ist bei Programmen auf Mikrocontrollern durchaus üblich, aber für die Aufgabe weniger wichtig.
An Adresse 03 steht das Ergebnis der Multiplikation und an den Adressen 04 und 05 stehen die beiden Faktoren.y und z sind nur symbolisch gemeint, im Prozessorspeicher stehen da Zahlenwerte drin. Die muss man vor der Multiplikation natürlich einlesen und dort abspeichern. Das ist in der gezeigten Lösung aber nicht enthalten. Es wird angenommen, dass das vorher gemacht worden ist.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2020-10-17


Danke.

Nach der Multiplikation bei a) heißt jetzt 02: JMP 02, dass hier das Programm für immer und ewig zu 02 springt und für immer bleibt?

Nun können wir uns mit b) beschäftigen.

Am Anfang steht JNZ 3, 10. Das heißt, ich springe zu 3 falls m[y]=m[10] ungleich 0 ist? Woher weiß ich, dass m[10] ungleich 0 ist?  

Ist hier die 3 als Adresse 03 gemeint, oder wie? Dann steht an der Adresse 3/03(?) der Befehl MUL 11, 11, 10.
10: x // Eingabe und Zähler
11: 1 // Ergebnis (Fakultät von x)

In Adresse 10 speichere ich den Wert "x"? Sagen wir, es ist z.B. 5.
Dann ist 11: 1, das Ergebnis. Wie kann das sein? Das Ergebnis von 5!=1?
Für MUL 11, 11, 10 habe ich dann 1=1*5! ?  

Das macht hier keinen Sinn. deswegen mache ich nicht weiter. Bitte klär mich auf...



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1659
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2020-10-17


2020-10-17 10:48 - Kajam in Beitrag No. 4 schreibt:
Dann ist 11: 1, das Ergebnis. Wie kann das sein?

Die Speicherzelle 11 wird vor der Rechnung auf den Wert 1 gesetzt; nach der Rechnung enthält sie dann das Ergebnis.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2020-10-17


2020-10-17 11:13 - zippy in Beitrag No. 5 schreibt:
2020-10-17 10:48 - Kajam in Beitrag No. 4 schreibt:
Dann ist 11: 1, das Ergebnis. Wie kann das sein?

Die Speicherzelle 11 wird vor der Rechnung auf den Wert 1 gesetzt; nach der Rechnung enthält sie dann das Ergebnis.

Dann geht es mit 04 weiter.
04: ADD 10, 10, 12
04:     5! = 5!+5!

Weil 12 = -1 = 11 = 5!
und 10: x

Alles sinnlos. Kannst du das normal erklären?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1659
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2020-10-17


2020-10-17 12:04 - Kajam in Beitrag No. 6 schreibt:
Alles sinnlos. Kannst du das normal erklären?

Nein, du musst einfach nur nachvollziehen, was das Programm macht, und dabei sorgfältiger arbeiten. Im Augenblick scheinst du z.B. die Speicherzellen 10 und 11 durcheinanderzubringen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, vom Themenstarter, eingetragen 2020-10-17


2020-10-17 12:10 - zippy in Beitrag No. 7 schreibt:
2020-10-17 12:04 - Kajam in Beitrag No. 6 schreibt:
Alles sinnlos. Kannst du das normal erklären?

Nein, du musst einfach nur nachvollziehen, was das Programm macht, und dabei sorgfältiger arbeiten. Im Augenblick scheinst du z.B. die Speicherzellen 10 und 11 durcheinanderzubringen.

Ich kann es aber nicht nachvollziehen und hellsehen kann ich auch noch nicht.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1659
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, eingetragen 2020-10-17


2020-10-17 12:23 - Kajam in Beitrag No. 8 schreibt:
und hellsehen kann ich auch noch nicht.

Das wird in dieser Aufgabe auch noch nicht verlangt.

Was sind denn die Inhalte der Speicherzellen 10 und 11, nachdem der MUL-Befehl in Zelle 03 und der ADD-Befehl in Zelle 04 zum ersten Mal ausgeführt wurden?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2020-10-17


2020-10-17 13:38 - zippy in Beitrag No. 9 schreibt:
2020-10-17 12:23 - Kajam in Beitrag No. 8 schreibt:
und hellsehen kann ich auch noch nicht.

Das wird in dieser Aufgabe auch noch nicht verlangt.

Irgendwie schon, wenn ich es nicht nachvollziehen kann, muss ich solange nach einer plausiblen Erklärung finden, bis es zur Lösung passt.

Was sind denn die Inhalte der Speicherzellen 10 und 11, nachdem der MUL-Befehl in Zelle 03 und der ADD-Befehl in Zelle 04 zum ersten Mal ausgeführt wurden?

Wie du schon in Beitrag 5 geschrieben hast, dass nach der Rechnung des MUL-Befehls die Speicherzelle 11 das Ergebnis enthält? Nun, was ist das Ergebnis (Fakultät von x) ... vielleicht die 5! als mein letzter Beispiel?

Der Inhalt der Speicherzelle 10 ist dann wohl "x"? Steht ja da "10: x". Hmm, nur, was ist denn mein "x"? Das ist die Eingabe und Zähler. Nur jetzt frage ich mich, was zählt er wohl? Ich würde sagen, das ist x=5! wieder.

Zum Befehl ADD:
04: ADD 10, 10, 12

Ist hier vielleicht auch so, dass vor der Rechnung die Speicherzelle 10 auf 1 gesetzt wird; und nach der Rechnung das Ergebnis erhält?
Hier haben wir ja 2 Stück von diesen Speicherzellen. Und eine Speicherzelle 12.

Nach Ausführen der Rechnung...Was ist nun die Rechnung?
Ich glaube: Speicherzelle 10 = Speicherzelle 10 + Speicherzelle 12

Das ist vor der Rechnung:
                          1  = 1 + 12

Nach der Rechnung:        5! = 5! + 12

???

Jetzt haben wir es, oder?





Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1659
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2020-10-17


2020-10-17 14:44 - Kajam in Beitrag No. 10 schreibt:
Wie du schon in Beitrag 5 geschrieben hast, dass nach der Rechnung MUL-Befehl die Speicherzelle 11 das Ergebnis enthält?

Du setzt "nach der Rechnung" (also wenn das Programm fertig ist) mit "nachdem der MUL-Befehl in Zelle 03 zum ersten Mal ausgeführt wurde" gleich. Das sind aber verschiedene Dinge, denn das Programm führt diesen Befehl mehrmals aus.

2020-10-17 14:44 - Kajam in Beitrag No. 10 schreibt:
Der Inhalt der Speicherzelle 10 ist dann wohl "x"?

Nein. Wenn der Inhalt beim Start des Programms $x$ war, ist er nach der Ausführung des ADD-Befehls nicht mehr $x$.

2020-10-17 14:44 - Kajam in Beitrag No. 10 schreibt:
Zum Befehl ADD:
Ich glaube: Speicherzelle 10 = Speicherzelle 10 + Speicherzelle 12

Richtig.

Und da vor dem ADD-Befehl in den Speicherzellen 10 und 12 die Werte $x$ und $-1$ standen, stehen da nach dem ADD-Befehl die Werte $x-1$ und $-1$. Das bedeutet, dass der Zähler in Speicherzelle 10 um 1 heruntergezählt wird und dass die Konstante in Speicherzelle 12 unverändert bleibt.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2020-10-17


2020-10-17 15:03 - zippy in Beitrag No. 11 schreibt:
2020-10-17 14:44 - Kajam in Beitrag No. 10 schreibt:
Wie du schon in Beitrag 5 geschrieben hast, dass nach der Rechnung MUL-Befehl die Speicherzelle 11 das Ergebnis enthält?

Du setzt "nach der Rechnung" (also wenn das Programm fertig ist) mit "nachdem der MUL-Befehl in Zelle 03 zum ersten Mal ausgeführt wurde" gleich. Das sind aber verschiedene Dinge, denn das Programm führt diesen Befehl mehrmals aus.

Wann endet denn das Programm? In welcher Zeile? Nach 06 sind da Drei Punkte (...), wie geht es denn weiter? Heißt "nach der Rechnung" jetzt, wenn das Programm bis ans Ende ganz am unten angekommen ist und fertig ist?

2020-10-17 14:44 - Kajam in Beitrag No. 10 schreibt:
Der Inhalt der Speicherzelle 10 ist dann wohl "x"?

Nein. Wenn der Inhalt beim Start des Programms $x$ war, ist er nach der Ausführung des ADD-Befehls nicht mehr $x$.

Soweit war ich nicht. Hier bin ich noch vor der Ausführung des ADD-Befehls. Also ist das "x" hier doch noch richtig?

2020-10-17 14:44 - Kajam in Beitrag No. 10 schreibt:
Zum Befehl ADD:
Ich glaube: Speicherzelle 10 = Speicherzelle 10 + Speicherzelle 12

Richtig.

Und da vor dem ADD-Befehl in den Speicherzellen 10 und 12 die Werte $x$ und $-1$ standen, stehen da nach dem ADD-Befehl die Werte $x-1$ und $-1$. Das bedeutet, dass der Zähler in Speicherzelle 10 um 1 heruntergezählt wird und dass die Konstante in Speicherzelle 12 unverändert bleibt.

Ich sehe immer doch den Sinn des Ganzen nicht. Was hat das mit der Berechnung von Fakultät zutun? Wo ist da die Fakultät und wo wird das berechnet? x-1 oder -1 hin oder her, was bringt das?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1659
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2020-10-17


2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:
Ich sehe immer doch den Sinn des Ganzen nicht. Was hat das mit der Berechnung von Fakultät zutun?

Diese Frage kannst du dir selbst beantworten, indem du in die Speicherzelle 10 für $x$ einen Wert, sagen wir 5, einsetzt und dann das Programm bis zum Ende (also bis es in der Endlosschleife in Zelle 06 hängen bleibt) auf dem Papier nachvollziehst.

2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:
Wo ist da die Fakultät und wo wird das berechnet?

Wenn du gemacht hast, was ich oben beschrieben habe, steht die Fakultät von $x$ in Speicherzelle 11.

2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:
x-1 oder -1 hin oder her, was bringt das?

Ich weiß nicht, ob du jemals selbst eine Fakultät berechnet hast. Falls ja, wirst du dich erinnern, dass man dabei mehrmals multiplizieren muss. Und die Speicherzelle 10 ist (unter anderem) der Zähler für dieses "mehrmals".



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, vom Themenstarter, eingetragen 2020-10-17


2020-10-17 17:55 - zippy in Beitrag No. 13 schreibt:
2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:
Ich sehe immer doch den Sinn des Ganzen nicht. Was hat das mit der Berechnung von Fakultät zutun?

Diese Frage kannst du dir selbst beantworten, indem du in die Speicherzelle 10 für $x$ einen Wert, sagen wir 5, einsetzt und dann das Programm bis zum Ende (also bis es in der Endlosschleife in Zelle 06 hängen bleibt) auf dem Papier nachvollziehst.

2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:
Wo ist da die Fakultät und wo wird das berechnet?

Wenn du gemacht hast, was ich oben beschrieben habe, steht die Fakultät von $x$ in Speicherzelle 11.

2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:
x-1 oder -1 hin oder her, was bringt das?

Ich weiß nicht, ob du jemals selbst eine Fakultät berechnet hast. Falls ja, wirst du dich erinnern, dass man dabei mehrmals multiplizieren muss. Und die Speicherzelle 10 ist (unter anderem) der Zähler für dieses "mehrmals".

Das würde ich gerne, wenn ich es nur verstanden hätte. Da du es verstehst, kannst du ja einen Anfang machen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2514
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, eingetragen 2020-10-17


Nimm an, du willst 4! berechnen.

Die drei relevanten Speicheraddressen sind dann:

10: Wert 4
11: Wert 1
12: Wert -1


Das Programm startet:
Zeile 1: In 10 steht keine 0, also Sprung zu 3
Zeile 3: Setze 11 auf das Ergebnis der Multiplikation von 10 und 11, also 4*1 = 4
Zeile 4: Addiere die Werte in 10 und 12 und speichere das Ergebnis in 10, also 4 + (-1) = 3
Zeile 5: In 10 steht keine 0, also Sprung zu 3

....

Nächste Iteration mit
10: Wert 3
11: Wert 4
12: Wert -1

...

Falls du es richtig machst, landest du am Ende in Zeile 6 mit

10: Wert 0
11: Wert 24
12: Wert -1



-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
AlphaSigma
Senior Letzter Besuch: im letzten Monat
Dabei seit: 23.11.2012
Mitteilungen: 228
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, eingetragen 2020-10-17


2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:

Ich sehe immer doch den Sinn des Ganzen nicht. Was hat das mit der Berechnung von Fakultät zutun? Wo ist da die Fakultät und wo wird das berechnet? x-1 oder -1 hin oder her, was bringt das?

Hallo Kajam,

wie zippy bereits geschrieben hat, sollte das aus der Definition der Fakultät klar sein. Zum Berechnen der Fakultät von n musst du alle Zahlen von 1 bis n miteinander multiplizieren. Dabei kannst Du in beide Richtungen, aufsteigend von 1 bis n oder absteigend von n bis 1, vorgehen.
Im ersten Fall nimmst du die Zahl 1 aus Speicher A, merkst sie dir im Speicher B, addierst 1 zur 1 in Speicher A und erhälst 2 im Speicher A. Das multiplizierst du mit der 1 in Speicher B  und erhälst  1 * 2 = 2 in B. Dann addierst du wieder 1 zur 2 in A und erhälst 2 + 1 = 3 in A und multiplizierst das mit der 2 in B, d.h. danach steht 2 * 3 in B usw.
Im zweiten Fall (absteigend) startest du mit n in A und subtrahierst solange 1 und multiplizierst mit dem Inhalt von B bis du in A bei 1 angekommen bist.

Falls du eine Programmiersprache wie C oder Pascal kennst, kannst du das auch als while-Schleife formulieren.
C
n = 5;
fak = 1;
while (n > 0) {
  fak = fak * n;
  n = n - 1;
}

Das gibt für  fak   n
   1           5
   5           4
   5*4         3
   5*4*3       2
   5*4*3*2     1
   5*4*3*2*1   0

Ich habe den Eindruck, du versuchst hpts. nur aus Aufgaben und den Lösungen zu lernen. Korrigiere mich bitte, falls ich da falsch liege. Das kann man machen, aber der bewährte Weg ist es erst den Stoff im Unterricht oder in der Vorlesung zu hören, ihn dann, ggf. mit Hilfe von Büchern, zu vertiefen und anschliessend durch das selbständige Lösen von Aufgaben. Die Lösungen schaut man sich erst ganz am Ende an, um eine Kontrolle zu erhalten und um zu sehen, ob es auch anders geht.

[Die Antwort wurde nach Beitrag No.13 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.17, vom Themenstarter, eingetragen 2020-10-22


Guten Nachmittag,

ich habe die Vorgehensweise des Programms und damit die Lösung verstanden.
Ich habe für 10, 11, 12 auch die richtigen Ergebnisse für 4! raus:





Was ich mich aber noch frage ist, wozu gibt es den Schritt 02? Hier lande ich doch gar nicht im Programm.

Und wozu die drei Punkte nach Schritt 06, da geht es doch nicht weiter?


2020-10-17 18:38 - AlphaSigma in Beitrag No. 16 schreibt:
2020-10-17 17:35 - Kajam in Beitrag No. 12 schreibt:

Ich sehe immer doch den Sinn des Ganzen nicht. Was hat das mit der Berechnung von Fakultät zutun? Wo ist da die Fakultät und wo wird das berechnet? x-1 oder -1 hin oder her, was bringt das?

Hallo Kajam,

wie zippy bereits geschrieben hat, sollte das aus der Definition der Fakultät klar sein. Zum Berechnen der Fakultät von n musst du alle Zahlen von 1 bis n miteinander multiplizieren. Dabei kannst Du in beide Richtungen, aufsteigend von 1 bis n oder absteigend von n bis 1, vorgehen.
Im ersten Fall nimmst du die Zahl 1 aus Speicher A, merkst sie dir im Speicher B, addierst 1 zur 1 in Speicher A und erhälst 2 im Speicher A. Das multiplizierst du mit der 1 in Speicher B  und erhälst  1 * 2 = 2 in B. Dann addierst du wieder 1 zur 2 in A und erhälst 2 + 1 = 3 in A und multiplizierst das mit der 2 in B, d.h. danach steht 2 * 3 in B usw.
Im zweiten Fall (absteigend) startest du mit n in A und subtrahierst solange 1 und multiplizierst mit dem Inhalt von B bis du in A bei 1 angekommen bist.

Falls du eine Programmiersprache wie C oder Pascal kennst, kannst du das auch als while-Schleife formulieren.
C
n = 5;
fak = 1;
while (n > 0) {
  fak = fak * n;
  n = n - 1;
}

Das gibt für  fak   n
   1           5
   5           4
   5*4         3
   5*4*3       2
   5*4*3*2     1
   5*4*3*2*1   0

Ich habe den Eindruck, du versuchst hpts. nur aus Aufgaben und den Lösungen zu lernen. Korrigiere mich bitte, falls ich da falsch liege. Das kann man machen, aber der bewährte Weg ist es erst den Stoff im Unterricht oder in der Vorlesung zu hören, ihn dann, ggf. mit Hilfe von Büchern, zu vertiefen und anschliessend durch das selbständige Lösen von Aufgaben. Die Lösungen schaut man sich erst ganz am Ende an, um eine Kontrolle zu erhalten und um zu sehen, ob es auch anders geht.

[Die Antwort wurde nach Beitrag No.13 begonnen.]

Genau so mache ich das. Ich habe gerade nur Schwierigkeiten, den Professor zu folgen, weil er das alles schnell durchgeht. Ich besuche alle Veranstaltungen und habe viele Bücher dazu. Leider nichts, was mir bei der Aufgabe helfen konnte. Als letzten Ausweg frage ich dann im Forum nach.

Könntet ihr mir auch bei dieser Frage helfen: "Tiefe einer Schaltung angeben, Lösung" , ihr scheint ja geprüftes Wissen zu haben :P







Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1659
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.18, eingetragen 2020-10-22


2020-10-22 16:31 - Kajam in Beitrag No. 17 schreibt:
Was ich mich aber noch frage ist, wozu gibt es den Schritt 02? Hier lande ich doch gar nicht im Programm.

Der JMP-Befehl in Speicherzelle 02 springt direkt zum Ende des Programms.

Ausgeführt wird dieser JMP-Befehl, wenn nicht zuvor der JNZ-Befehl in Speicherzelle 01 gleich zur Speicherzelle 03 springt, und das ist genau dann der Fall, wenn $x=0$ ist.

Ohne den Sprung ans Ende des Programms für $x=0$ würde fälschlicherweise $0!=0$ statt $0!=1$ berechnet werden. (Außerdem würde das Programm nicht in einer Endlossschleife in Speicherzelle 06, sondern in einer über die Speicherzellen 03, 04 und 05 hängen bleiben.)



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2020
Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.19, vom Themenstarter, eingetragen 2020-10-23


Und was kommt jetzt noch nach den drei Punkten nach Schritt 06 in b)? In Aufgabe a) gibt es nach den letzten Schritt keine solchen Punkte...



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 5238
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.20, eingetragen 2020-10-23


Hallo Kajam,

die Punkte stehen für die nicht verwendeten Speicherzellen 07 bis 09.


Gruß, Diophant



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam hat die Antworten auf ihre/seine Frage gesehen.
Kajam hat selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]