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:
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!