PI1-AB3

Werbung
4. Aufgabe
G=
[A,M,s,R]
A=
{a,b,…,z,A,B,…Z,0,1,…,9,>,<,=, ; , + , * , - , \ , ( , ) ,MOD, DIV, BEGIN, END, FOR, IF, ENDIF,
THEN, ELSE TO, DO, WHILE, ENDWHILE, REPEAT, UNTIL, WRITE, READ}
M=
{S, Anweisung, Zuweisung, Test, Schleife, Eingabe, Ausgabe, Variable, Zahl, ArithOperator, Funktion,
Vergleich, VergOperator, Ziffer, Buchstabe}
s=S
R:
S::=
“BEGIN“ {Anweisung} “END“
Anweisung::=
( Zuweisung; | Ausdruck; | Test; | Schleife; | Eingabe; | Ausgabe; )
Zuweisung::=
Variable ’’:=’’ Ausdruck
Ausdruck::=
( “(“ Ausdruck “)“ | Variable | Zahl | Ausdruck ArithOperator Ausdruck |
Funktion(Ausdruck) )
ArithOperator::=
( + | - | * | \ | MOD | DIV )
Test::=
“IF“ Vergleich “THEN“ Anweisung {Anweisung}[ “ELSE“ Anweisung {Anweisung} ]
“ENDIF“
Vergleich::=
( Ausdruck VergOperator Ausdruck | “NOT“ Ausdruck )
VergOperator::=
( < | > | = | >= | <= | <>)
Schleife::=
( “FOR“ Zuweisung “TO“ Ausdruck “DO“ Anweisung {Anweisung} “ENDFOR“ |
“WHILE“ Vergleich “DO“ Anweisung {Anweisung} “ENDWHILE“ |
“REPEAT“ Anweisung {Anweisung} “UNTIL“ Vergleich )
Eingabe::=
“READ(“ Variable “)“
Ausgabe::=
“WRITE(“ Variable “)“
Zahl::=
Ziffer { Ziffer } [ “.“ Ziffer { Ziffer } ]
Ziffer::=
(0 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 )
Funktion::=
Buchstabe { ( Buchstabe | Ziffer ) }
Variable::=
Buchstabe { ( Buchstabe | Ziffer ) }
Buchstabe::=
(a|b|c|…|x|y|z|A|B|C|…|X|Y|Z)
2. Aufgabe
G=
A=
s=
M=
[A,M,s,R]
{=,\,*,M,(,),∩,Ø,U}
G
{G,T,O,V,S}
R=
{ (G, T=T),
(T, (VO)O), (T, VO),
(V, Ø), (V, MS), (V, ),
(S, *S), (S, ),
(O, ∩T), (O, UT), (O, \T), (O, ) }
3. Aufgabe
Als WHILE-Schleife:
BEGIN
READ(m);
n := 0;
WHILE n <= 0 DO
WRITE(n);
n := n+ 1;
ENDWHILE;
END
Als REPEAT-Schleife:
BEGIN
READ(m);
n := 1;
REPEAT
WRITE(n);
n := n + 1;
UNTIL n := ( m – 1);
END
Aufgabe 1
a)
BEGIN
m := 101;
n := 1;
REPEAT
f:= ROUND( (m - n) / 2 ) + n ;
IF ( m – n ) > 1 THEN
antwort = FRAGE(f);
IF antwort = wahr THEN
m := f;
ELSE
n := f;
ELSE
ende := 1;
ENDIF;
UNTIL ende=1;
WRITE(f);
END
Die Funktion ROUND(x) rundet den übergebenen Wert:
BEGIN
xN:= x DIV 1;
Tmp := x –xN;
Tmp := Tmp * 10;
Tmp := Tmp DIV 1;
IF tmp > 5 THEN
ROUND := xN +1;
ELSE
ROUND := xN;
ENDIF;
END
b)
ungünstigster Fall: 7
günstigster Fall: 6
Kommentar: Das Programm aus Aufgabe 1 ist als Pascal-Programm unter: http://www.informatik.huberlin.de/~hachenbe/Dateien/ zu finden! (Zahlenraten.pas, Zahlenraten.exe)
Zugehörige Unterlagen
Herunterladen