diff --git a/info4/kapitel-8/WHILE-Programme.ipynb b/info4/kapitel-8/WHILE-Programme.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..9ed6f8db8afaa77cc505dea7f55992a8ef9b6d8c --- /dev/null +++ b/info4/kapitel-8/WHILE-Programme.ipynb @@ -0,0 +1,130 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# WHILE-Programme\n", + "\n", + "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 +}