klausur-gra-2010-02-15 Aufgabe 7 (Achtung Lösung!)

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.

klausur-gra-2010-02-15 Aufgabe 7 (Achtung Lösung!)
Vereinfachen Sie das folgende Code-Stück für eine Zwei-Adress-CPU!
Benutzen Sie nur
• if-then-goto-Anweisungen mit einfachen Bedingungen
• goto-Anweisungen
• Funktionsaufrufe der Form result = function(param1, …, paramN);
• Zuweisungen der Form
var = operand;
var = var operand;
(binop ist Element von {+, -, *, /, <, >}, var ist eine Variable, operand kann eine Variable oder eine Konstante sein)

val = 0;
c = fgetc(fp);
while ('0' <= c && c <= '9') {
	val = val * 10 + c - '0';
	c = fgetc(fp);
}

val = 0;
c = fgetc(fp);
goto loop_condition

loop_body:
val = val * 10 + c - ‘0’;
c = fgetc(fp);
loop_condition:
if (!(‘0’ <= c)) goto if_out;
if (!(‘9’ >= c)) goto if_out;
goto loop_body;
if_out:

Stimmt des so?


Es ist von Zwei-Adress-Code die Rede, nicht von Fünf-Adress-Code! :smiley:

Die Negierungen solltest du in die Vergleichsoperatoren reinziehen. Also z. B. [m](‚0‘ > c)[/m] statt [m]!(‚0‘ <= c)[/m].


val = val * 10;
val = val + c;
val = val -‚0‘;

oder wie?

gut macht sinn^^


Genau so.


nice dank dir.


Die Aufgabe wurde schon besprochen ( : Suchen spart Zeit.


Bin ich etz bloed? Wo wurde sie besprochen? Find nix. Hab grad alle Threads durchsucht der letzten Tage!

Edit Also… DIESER aufgabe 9 thread also… jaajaja xD


val = 0;
loop:
c = fgetc(fp);
if(!('0' <= c) goto loop_out;
if(!(c<=9) goto loop_out;
val = val * 10;
val = val + c;
val = val - '0';
goto loop;
loop_out: 
end; 

habe ja ein bisschen umgestellt… was meint ihr? zulässig?


airhard hat schon gemeint, mann soll die negierung in die klammer ziehen (also das vergleichszeichen umdrehen).

Ich frage mich noch was das ‚val = val - 0;‘ nutzt! Hab das in meiner Loesung weggelassen, da Irgendwas minus 0 immernoch Irgendwas ist o0
Sonst hab ichs sehr aehnlich!


Es gibt ne Unterschied zwischen “val = val - 0;” und “val = val - ‘0’;” :wink: