H3/3
-
- BASIC-Programmierer
- Beiträge: 107
- Registriert: 8. Okt 2010 20:31
H3/3
Hallo
Ich schaffe es nicht mit der Formel auf die Elemente im pascalschen Dreieck zu kommen.
Ich wähle das Element 2,2 (Siehe Bild)
p(2,2) = p(1,1) + p(1,2) = 1 + 1 = 2 != 1
Was habe ich falsch gemacht? Wie geht es richtig?
Gruß
Ich schaffe es nicht mit der Formel auf die Elemente im pascalschen Dreieck zu kommen.
Ich wähle das Element 2,2 (Siehe Bild)
p(2,2) = p(1,1) + p(1,2) = 1 + 1 = 2 != 1
Was habe ich falsch gemacht? Wie geht es richtig?
Gruß
- Dateianhänge
-
- Screenshot.png (1.75 KiB) 1265 mal betrachtet
-
- BASIC-Programmierer
- Beiträge: 107
- Registriert: 8. Okt 2010 20:31
Re: H3/3
ahh
danke
ich hatte s und z gegen eins geprüft...
danke
ich hatte s und z gegen eins geprüft...
-
- Windoof-User
- Beiträge: 25
- Registriert: 31. Okt 2011 13:56
Re: H3/3
Generell habe ich die Rekursion in Assembler verstanden, aber ich komme mit der der Aufgabe nicht zurecht.
Ich muss ja hier zwei Rekursionsaufrufe in einem Schritt machen. Jedoch stehen in meinen Registern nachdem der erste Aufruf (mit seinen restlichen Schritten) ausgeführt wurde natürlich die zuletzt genutzten Werte, unabhänging davon welche Register ich benutze!
Kann mir jemand weiterhelfen?
Ich muss ja hier zwei Rekursionsaufrufe in einem Schritt machen. Jedoch stehen in meinen Registern nachdem der erste Aufruf (mit seinen restlichen Schritten) ausgeführt wurde natürlich die zuletzt genutzten Werte, unabhänging davon welche Register ich benutze!
Kann mir jemand weiterhelfen?
-
- Windoof-User
- Beiträge: 25
- Registriert: 31. Okt 2011 13:56
Re: H3/3
Und woher weiß ich wie tief ich dann im Stack bin, also wo das Zwischenergebnis liegt?
Das muss ich ja alles mit dokumentieren! Auch das ausrechnen mit Stack wird somit komplizierter!
Das muss ich ja alles mit dokumentieren! Auch das ausrechnen mit Stack wird somit komplizierter!
Re: H3/3
Das ist nunmal so, dass auch die einfachsten kleinen Programme in Assembler eklig sind. Deswegen gibt's ja auch höhere Programmiersprachen.studentabc hat geschrieben:Und woher weiß ich wie tief ich dann im Stack bin, also wo das Zwischenergebnis liegt?
Das muss ich ja alles mit dokumentieren! Auch das ausrechnen mit Stack wird somit komplizierter!
Es ist aber nicht so schwer, wie du denkst, wenn du strukturiert vorgehst: Jeder rekursive Aufruf kann sein Ergebnis in einem Register zurückgeben (immer demselben natürlich), dann ist auch klar, wo das liegt. Außerdem muss einfach direkt nach jedem rekursiven Aufruf alles, was dafür auf den Stack gelegt wurde, wieder gelöscht werden. Da du weißt, was du pro Aufruf drauflegst, weißt du auch, was wieder runter muss. Weil dann jeder Aufruf nur noch eine Rekursionebene des Stacks betrachtet, ist auch die konkrete Tiefe egal.
Wie man rekursiv programmiert muss aber doch in der Vorlesung erwähnt sein worden...
Re: H3/3
Genau, wenn du wie in der Vorlesung erwähnt wurde immer %ebp benutzt um quasi auf der aktuellen stack frame zu zeigen und dann mit esp die lokalen variablen referenziert
dann weisst du immer genau wo die Zwischenergebnisse zu finden sind, schau dir nochmal die Folien genau an
Gruß
dann weisst du immer genau wo die Zwischenergebnisse zu finden sind, schau dir nochmal die Folien genau an

Gruß
Re: H3/3
Hi,
wir haben wirkliche Probleme mit der Aufgabe. Das Beispiel in der Vorlesung mit der Fakultät haben wir verstanden. Bisher wurden feste Werte auf dem Stack zwischengespeichert und am Ende, wenn die Rekursionstiefe erreicht wurde, verrechnet.
Dieses mal müssen wir ja aber einen Punkt an der Stelle Zeile/Spalte speichern, obwohl wir dessen Wert noch nicht kennen. Wir wissen ja eigentlich das wir Zwischenergebnisse brauchen, die sich aus den vorherigen Berechnungen ergeben, aber uns geht es nicht in den Kopf wie man diese denn zwischenspeichert, herbekommt und sonstwie errechnet.
Wir sind ziemlich verwirrt.
wir haben wirkliche Probleme mit der Aufgabe. Das Beispiel in der Vorlesung mit der Fakultät haben wir verstanden. Bisher wurden feste Werte auf dem Stack zwischengespeichert und am Ende, wenn die Rekursionstiefe erreicht wurde, verrechnet.
Dieses mal müssen wir ja aber einen Punkt an der Stelle Zeile/Spalte speichern, obwohl wir dessen Wert noch nicht kennen. Wir wissen ja eigentlich das wir Zwischenergebnisse brauchen, die sich aus den vorherigen Berechnungen ergeben, aber uns geht es nicht in den Kopf wie man diese denn zwischenspeichert, herbekommt und sonstwie errechnet.
Wir sind ziemlich verwirrt.

Re: H3/3
Ja, das ist richtig.majias hat geschrieben:Sehen wir das richtig, dass man die Unterfunktion zweimal aufrufen muss, um den Wert von einem Punkt zu berechnen? Einmal für den Punkt (z-1,s-1) und einmal für den Punkt (z-1,s) ?
Re: H3/3
Sollen s und z eigentlich per Eingabe an das Programm gegeben werden oder einfach nur als Variablen direkt im Code?
Und soll das Programm auch auf ungültige Eingaben reagieren, also falls s und z am Anfang kleiner 1 sind oder s > z?
Und soll das Programm auch auf ungültige Eingaben reagieren, also falls s und z am Anfang kleiner 1 sind oder s > z?
Re: H3/3
JulM hat geschrieben:Sollen s und z eigentlich per Eingabe an das Programm gegeben werden oder einfach nur als Variablen direkt im Code?
Und soll das Programm auch auf ungültige Eingaben reagieren, also falls s und z am Anfang kleiner 1 sind oder s > z?
Schreiben Sie ein Assemblerprogramm, das zu Beginn in den Variablen z und s die Zeile und die Spalte eines Elements enthält und mit Hilfe der obigen Formel rekursiv den Wert p(z, s) berechnet.
-
- Mausschubser
- Beiträge: 95
- Registriert: 28. Mär 2011 22:58
Re: H3/3
Es wird einem doch nicht negativ angerechnet, wenn man es doch per EIngabe auf der Konsole gemacht hat ?(ist immerhin beim Testen komfortabler )