You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

023 Berechenbarkeit.ipynb 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {
  6. "pycharm": {
  7. "name": "#%% md\n"
  8. },
  9. "slideshow": {
  10. "slide_type": "slide"
  11. }
  12. },
  13. "source": [
  14. "# Software Entwicklung \n",
  15. "\n",
  16. "## Kapitel 2: Kontrollfluss\n",
  17. "\n",
  18. "### 2.7 Algorithmus\n",
  19. "\n",
  20. "Ein Algorithmus ist\n",
  21. "\n",
  22. "- eine *endliche Folge* von Regeln (*Finitheit*),\n",
  23. "- nach denen sich nach *endlich vielen* (*Terminiertheit*),\n",
  24. "- *eindeutig festgelegten* Schritten (*Determiniertheit*)\n",
  25. "- die Lösung einer *Klasse von Problemen* ergibt (*Allgemeingültigkeit*)."
  26. ]
  27. },
  28. {
  29. "cell_type": "markdown",
  30. "metadata": {
  31. "pycharm": {
  32. "name": "#%% md\n"
  33. },
  34. "slideshow": {
  35. "slide_type": "slide"
  36. }
  37. },
  38. "source": [
  39. "Für die Darstellung eines Algorithmus kann können Visualisierungen verwendet werden. Nachfolgend \n",
  40. "ist der Euklid'sche Algorithmus zur Berechnung des größten gemeinsamen Teilers (ggT) zweier Zahlen\n",
  41. "als UML Aktivitätsdiagramm dargestellt: \n",
  42. "\n",
  43. "![Aktivitätsdiagramm GGT](../img/ggtuml.png \"GGT-Berechnung als Aktivitätsdiagramm\") "
  44. ]
  45. },
  46. {
  47. "cell_type": "markdown",
  48. "metadata": {
  49. "pycharm": {
  50. "name": "#%% md\n"
  51. },
  52. "slideshow": {
  53. "slide_type": "slide"
  54. }
  55. },
  56. "source": [
  57. "Der gleiche Algorithmus kann aber auch in Form eines Struktogramms visualisiert werden:\n",
  58. "\n",
  59. "![Aktivitätsdiagramm GGT](../img/ggtstruct.png \"GGT-Berechnung als Aktivitätsdiagramm\") "
  60. ]
  61. },
  62. {
  63. "cell_type": "markdown",
  64. "metadata": {
  65. "slideshow": {
  66. "slide_type": "slide"
  67. }
  68. },
  69. "source": [
  70. "Sehr gebräuchlich ist mittlerweile die Verwendung von Pseudocode. Es gibt viele Varianten für Pseudocode. Meist einigt man sich innerhalb einer Organisation auf eine einheitliche Syntax. Zudem gibt es in der Literatur viele Syntax-Vorschläge.\n",
  71. "\n",
  72. " Eingabe a, b\n",
  73. " Falls a=0\n",
  74. " Ausgabe a\n",
  75. " Sonst\n",
  76. " Solange b != 0\n",
  77. " Falls a > b\n",
  78. " a := a - b\n",
  79. " Sonst\n",
  80. " b := b - a\n",
  81. " Ausgabe a"
  82. ]
  83. },
  84. {
  85. "cell_type": "markdown",
  86. "metadata": {
  87. "pycharm": {
  88. "name": "#%% md\n"
  89. },
  90. "slideshow": {
  91. "slide_type": "slide"
  92. }
  93. },
  94. "source": [
  95. "Die Lösungsidee für ein Problem wird also unabhängig von einer Programmiersprache in\n",
  96. "Form eines Algorithmus entwickelt. Die anschließende Formulierung eines Algorithmus in einer \n",
  97. "Programmiersprache ist dann eine relativ einfache Übertragungsaufgabe."
  98. ]
  99. },
  100. {
  101. "cell_type": "code",
  102. "execution_count": null,
  103. "metadata": {
  104. "pycharm": {
  105. "name": "#%%\n"
  106. },
  107. "slideshow": {
  108. "slide_type": "-"
  109. }
  110. },
  111. "outputs": [],
  112. "source": [
  113. "a = int(input(\"a eingeben:\"))\n",
  114. "b = int(input(\"b eingeben:\"))\n",
  115. "\n",
  116. "if a==0:\n",
  117. " print(b)\n",
  118. "else:\n",
  119. " while b>0:\n",
  120. " if a>b:\n",
  121. " a=a-b\n",
  122. " else:\n",
  123. " b=b-a\n",
  124. " print(a)\n"
  125. ]
  126. },
  127. {
  128. "cell_type": "markdown",
  129. "metadata": {
  130. "pycharm": {
  131. "name": "#%% md\n"
  132. },
  133. "slideshow": {
  134. "slide_type": "slide"
  135. }
  136. },
  137. "source": [
  138. "### 2.8 Berechenbarkeit\n",
  139. "\n",
  140. "In der *theoretischen Informatik* wurden verschiedene \n",
  141. "Modelle für die Beschreibung von Rechenmaschinen entwickelt. Es wurde bewiesen,\n",
  142. "dass viele Modelle gleichwertig zur \n",
  143. "sog. __[Turing-Maschine](https://de.wikipedia.org/wiki/Turingmaschine)__ sind, \n",
  144. "d.h. mit diesen Modellen die gleichen Berechnungen ausgeführt werden können bzw. es keine \n",
  145. "Berechnungsvorschrift gibt, die nur mit einem Modell, nicht aber mit dem anderen ausführbar ist.\n",
  146. "\n",
  147. "Zudem geht man davon aus, dass alle relevanten Algorithmen zur Klasse der von Turing-Maschinen berechenbaren \n",
  148. "Algorithmen gehören (__[Churchsche These](https://de.wikipedia.org/wiki/Church-Turing-These)__).\n",
  149. "\n",
  150. "Mit den Bausteinen *Sequenz*, *Bedingte Anweisung* und *Schleife* sowie *Variablenzuweisung* liefert Python ein Modell, \n",
  151. "von dem bewiesen wurde, dass es äquivalent zur Turing-Maschine ist. Oder anders ausgedrückt: alle weiteren \n",
  152. "Sprachelemente dienen lediglich der besseren Verständlichkeit und leichteren Wartbarkeit von Python-Code,\n",
  153. "erweitern aber nicht die Möglichkeiten der Berechenbarkeit.\n",
  154. "\n",
  155. "\n",
  156. "\n",
  157. "\n",
  158. "\n",
  159. "\n",
  160. "\n"
  161. ]
  162. }
  163. ],
  164. "metadata": {
  165. "celltoolbar": "Slideshow",
  166. "kernelspec": {
  167. "display_name": "Python 3 (ipykernel)",
  168. "language": "python",
  169. "name": "python3"
  170. },
  171. "language_info": {
  172. "codemirror_mode": {
  173. "name": "ipython",
  174. "version": 3
  175. },
  176. "file_extension": ".py",
  177. "mimetype": "text/x-python",
  178. "name": "python",
  179. "nbconvert_exporter": "python",
  180. "pygments_lexer": "ipython3",
  181. "version": "3.9.9"
  182. },
  183. "pycharm": {
  184. "stem_cell": {
  185. "cell_type": "raw",
  186. "metadata": {
  187. "collapsed": false
  188. },
  189. "source": []
  190. }
  191. }
  192. },
  193. "nbformat": 4,
  194. "nbformat_minor": 1
  195. }