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
+}