{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Was ist Programmieren?\n", "\n", "Nach diesem Streifzug durch einige einführende Beispiele stellt sich die Frage,\n", "was \"Programmieren\" überhaupt sein soll?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Die einfachste Antwort ist, dass es die \n", "\n", "> Übersetzung eines Algorithmus in eine für die Maschine (aka \"Computer\") verständliche Form ist.\n", "\n", "Was ist dann ein **Algorithmus**?\n", "\n", "> Das ist eine Vorschrift, wie ein ein gegebenes Problem mittels klar definierter Anweisungen gelöst werden kann.\n", "\n", "Wichtig ist, dass jeder Schritt explizit und direkt abläuft,\n", "und sie jeweils auf eindeutigen und klaren Definitionen basieren.\n", "Jede Ausführung des Algorithmus basiert auf Eingabedaten,\n", "welche die jeweilige Instanz des zu lösenden Problems bestimmen.\n", "Nur auf Basis dieser Daten kann das Ergebnis berechnet werden.\n", "Abschließend sollte die Ausgabe des Ergebnisses wieder in einer für den Menschen lesbaren Form geschehen (Textdatei, Grafik, ...)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Eine **Programmiersprache** ist das Zwischenstück,\n", "um einem Computer so einen Algorithmus beizubringen.\n", "Es handelt sich damit um das Kernelement,\n", "warum Computer überhaupt für den Menschen nutzbar wurden\n", "und warum sie so eine hohe Flexibilität aufweisen.\n", "\n", "Mittels der Programmiersprache muss es möglich sein,\n", "sowohl die Eingeabedaten als auch den Ablauf des Algorithmuses repräsentieren zu können.\n", "Intern verarbeitet ein Computer ausschließlich binär codierte Daten und Befehle,\n", "welche für den Menschen nicht aussagekräftig sind.\n", "Dies sind die sogenannten \"Bits\", welche `True`/`False` bzw. `1`/`0` Werte annehmen können.\n", "8er Gruppen von Bits sind Bytes und Gruppen von Bytes werden zum Repräsentieren von Text, Zahlen und Rechenoperationen verwendet.\n", "\n", "Daher ist es wichtig zu verstehen,\n", "dass der Zweck einer Programmiersprache darin besteht,\n", "eine für den Menschen lesbare Form des Programmes anzugeben,\n", "welche dann in eine für die Maschine verständliche Form übersetzt oder interpretiert wird." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kontrollstrukturen und Funktionen\n", "\n", "Um den Ablauf des Algorithmus im Detail programmieren zu können,\n", "muss eine *imperative* Programmiersprache **Kontrollstrukturen** (engl. \"control structures\") bereitstellen.\n", "Der lineare Ablauf einer Liste von Befehlen wird dabei zu einem komplexeren Ablauf,\n", "welcher aus \n", "\n", "* bedingten Verzweigungen (Entscheidungen),\n", "* Wiederholungen (Schleifen, Iterationen, ...)\n", "* aufrufbaren Codeblöcken (Funktionen, Methoden)\n", "* und anderem (Coroutinen, Threads, ...), etc.\n", "\n", "besteht.\n", "\n", "Da sich während des gesamten Ablaufs Teilstrukturen wiederholen können,\n", "gibt es für *prozedurale* Programmiersprachen die Möglichkeit,\n", "den gesamten Code in kleinere Blöcke zu separieren und nach Bedarf aufzurufen.\n", "Das wird \"**Funktion**\" genannt.\n", "\n", "Die Kunst besteht darin,\n", "diese Basiselemente geschickt zu kombinieren,\n", "damit das Programm für alle zulässigen Eingabewerte das richtige und gewünschte Ergebnis ausgibt." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Daten und Datenstrukturen\n", "\n", "Daten in einem Programm bestehen aus elementaren Basistypen und daraus zusammengestellten Datenstrukturen.\n", "\n", "In Python sind die wichtigsten Basistypen:\n", "\n", "* Wahrheitswert (bool): entweder `True` oder `False`.\n", "* Nichts: `None` ist der Wert, der für nichts/leer steht.\n", "* Integer (int/long): eine Ganzzahl beliebiger Größe, z.B. `231425232`\n", "* Fließkommazahl (float): eine beschränkte Fließkommazahl, z.B. `3.1415`, mit Basis und Exponenten, also `3e9` steht für $3 \\times 10^9$.\n", "\n", "Darüber hinaus gibt es auch noch komplexe Zahlen, z.B. `2+3j` (`j` ist die Wurzel aus -1)\n", "\n", "Eine gute Repräsentation der Daten ist die zweite elementare Zutat für ein Programm.\n", "Im elementarsten bestehen Daten aus binären Datenblöcken,\n", "welche durch eine Namensgebung für den Programmierer eine Bedeutung bekommen (Variablenwert und Variablenname).\n", "Diese Datenblöcke können zu komplexeren Strukturen zusammengesetzt werden:\n", "\n", "* Listen: eine lineare, geordnete Struktur (Vektor)\n", "* Assoziative Listen: Jeder Eintrag erhält einen eindeutigen Namen, unter dem er abgerufen werden kann (surjektiv)\n", "* Verschachtelungen: ein Eintrag einer assoziativen Liste kann eine Liste sein, etc.\n", "* Mengen: jedes Element kommt nur einmal vor\n", "* ... und viele Spezialstrukturen: typisierte Vektoren, Matritzen; Graphen, Bäume; kreisförmige Strukturen, etc.\n", "\n", "Werden bestimmte Datenstrukturen immer wieder verwendet,\n", "so bietet die Programmiersprache Python sogenannte \"Klassen\" (engl. `class`) an,\n", "um diese Strukturen einen Namen zu geben und auf Abruf immer wieder verwenden zu können.\n", "Dies sind benannte Strukturen, welche neben den Daten auch darauf abstimmte Funktionen beinhalten können - diese Funktionen nennt man dann \"Methoden\".\n", "So eine benannte Datenstruktur ist dann ein **Datentyp**,\n", "welcher erlaubt komplexere Konzepte in einem für den Menschen verständliche Art zu implementieren --\n", "wobei gleichzeitig die darunterliegende Binärstruktur für den Computer verständlich bleibt." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Beispiel: Datenstruktur eines Bruchs.\n", "\n", "Ein Bruch besteht aus einem Nenner und einem Zähler,\n", "welche jeweils Ganzzahlen sein sollen.\n", "Ein Datentyp \"`Bruch`\" fasst nun diese beiden Ganzzahlen zusammen.\n", "Eine mit diesem Datentyp assoziierte Funktion \"`add`\" würde es erlauben,\n", "zwei Brüche korrekt miteinander zu addieren,\n", "indem `add` als Argument einen anderen Bruch erhält und die Rückgabe dieser Methode ein neuer `Bruch` -- eben die Summe -- ist." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Links\n", "\n", "* [What Is Programming?](http://interactivepython.org/courselib/static/pythonds/Introduction/WhatIsProgramming.html)\n", "* [Wikipedia: Algorithm](http://en.wikipedia.org/wiki/Algorithm)\n", "* [Wikipedia: Computer Program](http://en.wikipedia.org/wiki/Computer_program)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }