kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Informatik -- Lehrveranstaltung vom 18.03.2024

(EN google-translate)

(PL google-translate)

Motivation: Anwendungsbeispiele zum Programmieren im technischen und künstlerischen Bereich

Linienverfolgung mit Videoübertragung.
Ein richtiges autonomes Vehikel entwickeln.
Einen Smiley plotten.
Ein auf einer Achse balancierendes Fahrzeug realisieren.
Eine Animation programmieren, die nach bestimmten Regeln Partikel bewegt und Klänge erzeugt.
Verklanglichung von Partikelbewegungen im dreidimensionalen Raum.
Schachspiel, das Klänge gemäß der Bedrohungssituation erzeugt.
Beschleunigungssensoren eines Smartphones nutzen, um einen Boxkampf zu verklanglichen.
Eine USB-Kamera verwenden, um in einem beleuchteten Feld die Lage von Spielchips zu erfassen und im Sinne einer Musikpartitur zu interpretieren.
10_Informatik1/06_Anwendungsgebiete

Was bedeutet es, zu programmieren? -- Ein komplexes Beispiel

Daten mittels UDP vom Smartphone an den PC senden.
Daten mittels UDP vom Smartphone an den PC senden.

Bild 0-1: Daten mittels UDP vom Smartphone an den PC senden.

  • Durch Drehungen meines Smartphones, soll ein "Ball" auf dem PC-Bildschirm bewegt werden.
  • Notwendige Kenntnisse in Stichworten: Programmiersprache Java, Android-Betriebssystem, W-LAN-Hotspot, User Datagram Protocol (UDP), Sensorik, Lineare Algebra, Grafische Benutzeroberfläche (GUI), Objekt Orientierte Programmierung (OOP), Verwendung von Bibliotheken.
Programmieren verlangt mehr, als nur eine Sprachsyntax zu beherrschen:

In dem konkreten Beispiel musste ich wissen, dass Programme auf meinem Smartphone als so genannte Apps zur Verfügung gestellt werden müssen. Ich musste wissen, wie ich ein Programm für das Smartphone an meinem PC schreibe, wie ich das Programm dann in eine App transformiere und wie ich diese dann auf das Smartphone übertragen kann. Die App alleine repräsentiert aber nicht die gezeigte Anwendung: Gleichzeitig muss es auf dem PC ein zweites Programm geben, das die Sensordaten vom Smartphone empfängt und interpretiert. Damit wiederum das gelingt, muss eine W-LAN-Verbindung zwischen Smartphone und PC bestehen und ich muss wissen, wie ich im jeweiligen Programm dafür sorge, dass diese auch richtig benutzt wird.

Um eine lauffähige Software entwickeln zu können, braucht es also einiges an Wissen und Hintergrundwissen, das über ein Verständnis eines bestimmten Programmcodes weit hinaus geht.

Ziel dieser Lehrveranstaltung ist es, parallel mit dem Vergrößern der Fertigkeiten im Erstellen von Programmquelltexten, auch dieses Hintergrundwissen nach und nach zu erarbeiten und zu nutzen. Denn daraus, genau zu wissen, was man tut kann man das notwendige Interesse, den notwendigen Mut und das notwendige Selbstbewusstsein beziehen, damit man es dann auch gerne tut.

Die vorgestellte Anwendung könnte die Grundlage bieten, um...

  • ein Vehikel fernzusteuern,
  • um die Parameter einer Computersimulation über ein Tablet einstellen zu können,
  • um Überwachungssysteme aufzubauen, die Sensordaten per Funk übertragen,
  • um mehrere mobile Geräte miteinander zu vernetzen und vieles mehr.

Hintergrundwissen

  • Computer besitzen eine CPU, eine Central Process Unit, in der gemäß einer Abfolge von so genannter Maschinenbefehle Datenwörter aus einem Speicher gelesen, miteinander verknüpft und wieder in einen Speicher abgelegt werden.
  • Die Grundidee dazu hatte Alan Turing:
10_Informatik1/04_Informationstheorie/01_EDV
  • Computer stellen die Infrastruktur für diese Art der Datenverarbeitung zur Verfügung.
  • Zwischen diesen so genannten Computerarchitekturen gibt es Unterschiede:
10_Informatik1/03_Hardware/01_Rechnerarchitektur
  • Höhere Programmiersprachen, wie C/C++, wurden erfunden, damit ein Programmierer nicht auf der Ebene von Maschinenbefehlen arbeiten muss.
  • Jedoch müssen fertig geschriebene Quelltexte durch einen Übersetzer, den Compiler, in Maschinensprache übersetzt werden, damit sie auf einem Computer laufen können.

Unser erstes Programm

#include <iostream>
using namespace std;
int main(void)
{
    cout<<endl<<"Hello world!"<<endl<<endl;
    return 0;
}

Code 0-1: Das erste C/C++ - Programm.

Der gleiche Quelltext im mousepad-Editor geöffnet mit Context-Highlighting.

Bild 0-2: Der gleiche Quelltext im mousepad-Editor geöffnet mit Context-Highlighting.

Screenshot vom Terminal: Notwendige Compiler-Befehle, um das Programm in Maschinensprache zu übersetzen und es anschließend laufen zu lassen.

Bild 0-3: Screenshot vom Terminal: Notwendige Compiler-Befehle, um das Programm in Maschinensprache zu übersetzen und es anschließend laufen zu lassen.

Sicht auf die Datei hello.cpp mit dem Quelltext und dem ausführbaren Programm hello mit Hilfe des Dateimanagers.

Bild 0-4: Sicht auf die Datei hello.cpp mit dem Quelltext und dem ausführbaren Programm hello mit Hilfe des Dateimanagers.

  • Syntaktische Analyse von hello.cpp:
10_Informatik1/07_Sprachen/01_C_Syntax

Was steckt hinter alldem?

  • Computerprogramme laufen auf einem darunter liegenden Betriebssystem.
  • Vom Betriebssystem hängt u.a. ab, wie Dateien gespeichert und benutzt werden, ob mehrere Programm gleichzeitig laufen können, ob es eine Benutzerschnittstelle gibt.
  • Das Betriebssystem stellt ferner für die Programme die darauf laufen die Ressourcen des Computers auf möglichst einfache Weise bereit.
  • Das Betriebssystem stellt sicher, dass es zu keinen fehlerhaften Zugriffen auf diese Ressourcen kommt.
  • Das Betriebssystem regelt also u.a., wie Programme auf den flüchtigen (RAM), auf den peristenten Speicher (i.d.R. Festplatte), ggf. auf Bildschirm, Tastatur, Maus und auf LAN und W-LAN zugreifen können.
Übung
Aufgabe 1 -- hello.cpp auf Xubuntu zum Laufen bringen
  • Die folgenden 12 Schritte werden Ihnen sowohl in der Vorlesung, als auch in der Übung am Beamer vorgeführt.
  • Erüben und merken Sie sich dieses Vorgehen sehr gut.
  • Sie brauchen es in jeder Lehrveranstaltung in Informatik.
  1. Starten Sie Ihren PC.
  2. Gehen Sie mit der passenden Funktionstaste in das Bootmenü.
  3. Wählen Sie die Linux-Festplatte aus.
  4. Melden Sie sich als thbstud an.
  5. Melden Sie sich dann mit Ihrem eigenen Account an.
  6. Öffnen Sie den Dateimanager und erzeugen einen Ordner im Home-Verzeichnis, unter dem Sie zukünftig Ihre Übungsprogramme abspeichern werden.
  7. Erzeugen Sie in Ihrem Ordner eine Textdatei mit dem Namen hello.cpp und öffnen diese mit Mousepad oder Leafpad.
  8. Schreiben Sie den Quelltext in die Datei und speichern sie ihn.
  9. Öffnen Sie ein Terminal.
  10. Navigieren Sie mit dem Befehl cp in das Verzeichnis, wo Ihr Quelltext liegt.
  11. Kompilieren Sie Ihren Quelltext durch Ausführen von "g++ -o hello hello.cpp".
  12. Starten Sie im Terminal Ihr Programm durch Ausführen von "./hello".
Aufgabe 2 -- Variationen
  • Speichern Sie den Quelltext unter einem anderen Namen ab, wie beispielsweise hell2.cpp.
  • Öffnen Sie die Kopie im Editor und verändern Sie den Quelltext so, dass wieder ein lauffähiges Programm entsteht, jedoch mit anderer Ausgabe.
Hinweise
  • Jede Befehlszeile in C/C++ endet mit einem Semikolon.
  • Im Hauptprogramm können beliebig viele Befehlszeilen untereinander stehen.
  • Will man Auskunft darüber geben, was die Befehlszeilen bedeuten, so kann man einen Zeilenkommentar benutzen mit //.
  • Auch die neuen Programme müssen wieder kompiliert werden, bevor man sie starten kann.
  • Hier folgt eine solche Variation als Beispiel:
#include <iostream>
using namespace std;
int main(void)
{
    //Die nachfolgenden Zeilen geben untereinander die Wörter Hello, 
    //WORLD und das Zeichen ! aus.
    cout<<endl<<"Hello"<<endl;
    cout<<"WORLD"<<endl;
    cout<<"!"<<endl;
    return 0;
}

Code 0-2: hello2.cpp

Aufgabe 3 -- Verwendung von cin

Wir haben gesehen, dass Programme im Wesentlichen Eingaben verarbeiten und dann Ausgaben produzieren.

  • Das nachfolgende Programm berechnet die Quadratzahl der eingegebenen Integer-Zahl.
  • Dazu ist es notwendig, die Eingabe in einer Variablen, hier x, zwischenzuspeichern.
  • Das Ergebnis wird berechnet und in einer zweiten Variable, hier y, gemerkt.
  • Schließlich wird das Ergebnis in der Konsole mit Hilfe von cout ausgegeben.
  • Beachten Sie dass bei cout << steht und bei cin >>.
  • Beachten Sie, dass Variablen vor ihrer Benutzung deklariert werden müssen, hier mit: int x,y;
  • Das Schlüssenwort "int" bezeichnet dabei den Datentyp der verwendeten Variable, hier ist das eine ganze (Integer-)Zahl.
#include <iostream>
using namespace std;
int main(void)
{
    int x,y;
    cout<<endl<<"Geben Sie eine ganze Zahl an:"<<endl<<"x=";
    cin>>x; //Input
    y=x*x;  //Verarbeitung
    cout<<"Das Quadrat von "<<x<<" ist: "<<y<<endl; //Output
    return 0;
}

Code 0-3: quadrat.cpp

Screenshot von Terminaleingaben zur Übersetzung und Nutzung von quadrat.cpp.

Bild 0-5: Screenshot von Terminaleingaben zur Übersetzung und Nutzung von quadrat.cpp.

  • Bringen Sie dieses Programm zum laufen.
  • Setzen Sie eine Variation des Programms um, bei der zwei Zahlen x und y addiert und das Ergebnis z ausgegeben wird.
#include <iostream>
using namespace std;
int main(void)
{
    int x,y,z;
    cout<<endl<<"Geben Sie eine ganze Zahl an:"<<endl<<"x=";
    cin>>x;
    cout<<endl<<"Geben Sie eine ganze Zahl an:"<<endl<<"y=";
    cin>>y;
    z=x+y;  //Verarbeitung
    cout<<"Die Summe von "<<x<<" und "<<y<<" ist: "<<z<<endl; //Output
    return 0;
}

Code 0-4: Musterlösung zu Aufgabe 3.