"Um LOOP-Programme zu erweitern führen wir eine WHILE-Schleife ein und erhalten damit die WHILE-Programme.\n",
"Die Syntax solcher WHILE-Programme ist definiert durch:\n",
"* Jedes LOOP-Programm ist ein WHILE-Programm\n",
"* Falls $P_1$ und $P_2$ WHILE-Programme sind ist $P_1; P_2$ ein WHILE-Programm\n",
"* Falls $P$ ein WHILE-Programm ist, so ist auch $WHILE\\ x_i\\neq 0\\ DO\\ P\\ END$ ein WHILE-Programm."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Die Semantik von WHILE-Programmen ist analog zu der von LOOP-Programmen zu verstehen.\n",
"Der einzige Unterschied sind die WHILE-Schleifen.\n",
"Das Programm P in einer WHILE-Schleife wird solange wiederholt, wie $x_i \\neq 0$ ist.\n",
"Dabei ist zu beachten, dass $x_i$ in P vorkommen sollte, da es sonst nicht verändert wird.\n",
"Dies ist ein Unterschied zu LOOP-Programmen, da $x_i$ in dem entsprechenden LOOP nicht verwendet werden darf."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Eine Funktion heißt WHILE-berechenbar, falls es ein WHILE-Programm gibt, das mit $n_1,...,n_k$ in den Variablen $x_1,...,x_k$ gestartet wird und mit $f(n_1,n_2,...,n_k)$ in der Variablen $x_0$ endet, falls $f(n_1,n_2,...,n_k)$ definiert ist. Andernfalls stoppt das WHILE-Programm nicht.\n",
"Ein Beispiel dafür ist die 2er-Potenz $f(n) = n^2$:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"%run Interpreter/whileinterpreter.py"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1024"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"interpret('''\n",
"x1:=10;\n",
"x0:=1;\n",
"WHILE x1 /= 0 DO\n",
" x2:=x0+0;\n",
" LOOP x2 DO\n",
" x0:=x0+1\n",
" END;\n",
" x1:=x1-1\n",
"END''')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ein weiteres Beispiel ist die Funktion f(n) = n mod 2"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"interpret('''\n",
"x1:=16;\n",
"x2:=x1-1;\n",
"WHILE x2!=0 DO\n",
" x1:=x1-2;\n",
" x2:=x2-2\n",
"END;\n",
"x0:=x1+0\n",
"''')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
%% Cell type:markdown id: tags:
# WHILE-Programme
Um LOOP-Programme zu erweitern führen wir eine WHILE-Schleife ein und erhalten damit die WHILE-Programme.
Die Syntax solcher WHILE-Programme ist definiert durch:
* Jedes LOOP-Programm ist ein WHILE-Programm
* Falls $P_1$ und $P_2$ WHILE-Programme sind ist $P_1; P_2$ ein WHILE-Programm
* Falls $P$ ein WHILE-Programm ist, so ist auch $WHILE\ x_i\neq 0\ DO\ P\ END$ ein WHILE-Programm.
%% Cell type:markdown id: tags:
Die Semantik von WHILE-Programmen ist analog zu der von LOOP-Programmen zu verstehen.
Der einzige Unterschied sind die WHILE-Schleifen.
Das Programm P in einer WHILE-Schleife wird solange wiederholt, wie $x_i \neq 0$ ist.
Dabei ist zu beachten, dass $x_i$ in P vorkommen sollte, da es sonst nicht verändert wird.
Dies ist ein Unterschied zu LOOP-Programmen, da $x_i$ in dem entsprechenden LOOP nicht verwendet werden darf.
%% Cell type:markdown id: tags:
Eine Funktion heißt WHILE-berechenbar, falls es ein WHILE-Programm gibt, das mit $n_1,...,n_k$ in den Variablen $x_1,...,x_k$ gestartet wird und mit $f(n_1,n_2,...,n_k)$ in der Variablen $x_0$ endet, falls $f(n_1,n_2,...,n_k)$ definiert ist. Andernfalls stoppt das WHILE-Programm nicht.
Ein Beispiel dafür ist die 2er-Potenz $f(n) = n^2$:
%% Cell type:code id: tags:
``` python
%runInterpreter/whileinterpreter.py
```
%% Cell type:code id: tags:
``` python
interpret('''
x1:=10;
x0:=1;
WHILE x1 /= 0 DO
x2:=x0+0;
LOOP x2 DO
x0:=x0+1
END;
x1:=x1-1
END''')
```
%% Output
1024
%% Cell type:markdown id: tags:
Ein weiteres Beispiel ist die Funktion f(n) = n mod 2