Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Blatt 1 - Aufgabe 4
Im Code fehlt ein:
}
Sehe 4: {
Aber nur 3:}
Joa… is richtig. Aber dank der Einrückung kann man ja sofort erkennen, wo die Klammer fehlt
Wenn man eine If-Anweisung der folgenden Form hat:
a: if(bedingung){
Anweisung a;
Anweisung b;
Anweisung c;
…
goto a;
}
Anweisung d
…
… ist es OK, ein goto am Ende im if zu verwenden, damit die Bedingung wieder geprüft wird?
Oder muss das andersrum sein, etwa so:
if(!Bedingung)
goto a;
Anweisung a;
Anweisung b;
Anweisung c;
...
a: Anweisung d;
…
In C würde ja beides wirkungstechnisch gleich sein.
Die obere Darstellung hilft dir ja nicht für Assembler - da hast du dann ja keine {}-Blöcke mehr, sondern musst das selbst mit (evtl. bedingten) jumps umsetzen.
Du hast aber wohl irgendwas verdreht / kaputteditiert, denn äquivalent sind die beiden Codeabschnitte nicht, das oben entspricht einer while-Schleife.
Parameter der Methode
Hallöchen
In der Übung hatten wir ja eine ähnliche Aufgabe nur ohne Parameter. Diese müssen doch hier auch beachtet werden oder? Kann man das dann einfach mit einer Variablendeklaration machen, oder muss man das anders machen/behandeln ?
Liebe Grüße
Eigelb
Nachdem es bei der Aufgabe ja nicht darum geht, Assembler-Code zu generieren, sondern lediglich darum, den Hochsprachen-Code in eine if-goto-Darstellung umzuwandeln, bleiben die Parameter und die Funktions-Definition so, wie sie sind. Im Wesentlichen geht es bei der Aufgabe darum, (imperative) Hochsprachen-Konstrukte wie Verzweigungen und Schleifen “plattzuklopfen”, d.h. auf eine Folge von einfachen Anweisungen und (un)bedingten Spruengen + Labels abzubilden.
Aus dem hier:
int foo(int a) {
if (a > 0) {
// do something
} else {
// do something else
}
}
wuerde also das hier werden:
int foo(int a) {
if (a > 0) goto THEN
ELSE:
// do something else
goto END
THEN:
// do something
END:
}
“Einfache Arrayzugriffe in der Form A[ i ] können direkt verwendet werden.
Arithmetische Ausdrücke in Vergleichsoperationen und Arrayzugriffen müssen vorher berechnet werden.”
1.Frage: bezeith sich das auf zB. if( A[ i ] > A[ i +1] )
2. wenn nein auf was dann? wenn ja, hab ich auch keine Ahnung wie ich das machen sollte.
A[ i ] darfst du verwenden A[i+1] nicht. Genauso i > j ist ok i+1 > j nicht.