Liebe Studentinnen und Studenten,

unten meine Notizen zur gestrigen Vorlesung einschlielich der
Termine fr die Tutorien.

Viele Gre

    Peter Gerwinski
-- 
Prof. Dr. Peter Gerwinski - Hardwarenahe IT-Systeme
embedded systems - microcontrollers - device drivers
Hochschule Bochum - Bochum University of Applied Sciences
Campus Velbert/Heiligenhaus - http://www.hs-bochum.de/cvh/

8< ---------------------------------------------------------------------

Angewandte Informatik
~~~~~~~~~~~~~~~~~~~~~
1 Einfhrung
  1.1 Was ist angewandte Informatik?
  1.2 Programmierung in C
2 Einfhrung in C
  2.1 Hello, world!
  2.2 Programme compilieren und ausfhren
  2.3 Zahlenwerte ausgeben
  2.4 Elementares Rechnen
  2.5 Verzweigungen
  2.6 Schleifen
  2.7 Seiteneffekte
  2.8 Strukturierte Programmierung
  2.9 Funktionen
  2.10 Zeiger
  2.11 Arrays und Strings
  2.12 Strukturen
3 Bibliotheken
  3.1 Der Prprozessor
  3.2 Bibliotheken einbinden
  3.3 Bibliothek verwenden (Beispiel: OpenGL)
  3.4 Projekt organisieren: make
4 Hardwarenahe Programmierung
  4.1 Bit-Operationen
  4.2 I/O-Ports
  4.3 Interrupts
  4.4 volatile-Variable
  4.5 Software-Interrupts
  4.6 Byte-Reihenfolge - Endianness
  4.7 Speicherausrichtung - Alignment
5 Algorithmen
  5.1 Rekursion
  5.2 Floodfill
  5.3 Stack und FIFO
  5.4 Wegfindungsalgorithmus fr Roboterfahrzeug
  5.5 Aufwandsabschtzungen
6 Ergnzungen und Ausblicke
  6.2 String-Operationen
  6.2 Dateien
  6.3 Verschlsselung
  6.4 Objektorientierte Programmierung
  6.5 C++
  6.6 GUI-Programmierung

Skript: Siehe hs-2012ss
sowie Rechnertechnik, Kapitel 5

Wichtig: Beispielprogramme! Reingucken! Ausprobieren! Selbst neu schreiben!

Termine
~~~~~~~
Grundlagen Rechnertechnik:
Di 29.1.2013, 13:30 Uhr: Tutorium
Do 31.1.2013, 13:30 Uhr: Tutorium
Fr 1.2.2013, 9:00-11:00: Klausur

Angewandte Informatik: 
Mo 4.2.2013, 13:30: Tutorium
Mi 6.2.2013, 13:30: Tutorium
Do 7.2.2013, 9:00-11:00: Klausur

Roboter-Wegfindungsalgorithmus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Bit-Array zum Speichern der Karte nutzen

 * 2 Bit (= 4 Mglichkeiten) pro Punkt:
    # Wand
    o bereits da gewesen
    _ noch nicht da gewesen
    R Ort des Roboters: Besser separat speichern (int8_t x, int8_t y)
    . noch nicht da gewesen, aber erreichbar
      --> sobald keine solchen Punkte mehr da sind, sind wir fertig

                             .
                         . . o #
                       . o o o o # #
                     . o o o o o o R #
                       . o o o o # #
                         . o o o .
                           . # #

 * Aufgabe: Der Roboter soll einen gltigen (optimal: den krztesten) Weg
   von seinem Standort zu einem erreichbaren Punkt (.) finden,
   ohne dabei Wnde (#) zu berqueren.

   Fr den Moment setzen wir dabei einen Standard-PC voraus,
   brauchen also keine besondere Rcksicht auf die Speicherplatz-
   und Rechenzeit-Beschrnkungen eines RP6 zu nehmen.
   (Sie knnen also z.B. ein zweidimensionales Array von char-Variablen
   als "Karte" verwenden.)

 * Lsungsansatz (Klaen):
   Hhenprofil erstellen. Je nher an einer Wand, desto hher.
   Je nher an einem erreichbaren Punkt (.), desto tiefer.
   Danach "lassen wir Wasser flieen."

 * Lsungsansatz (Gerwinski):

   Situation: Wir haben bereits einen Teil der Karte, z.B.:

       .
     . R .                Ausgangssituation
       .

       . . . . . . .
     . o o o o o o R #    Der Roboter ist nach rechts
       . . . . . . .      bis zu einer Wand gefahren

             .
         . . o #
       . o o o o # #      Der Roboter ist schon eine Weile unterwegs
     . o o o o o o R #    und aktuell in einer Sackgasse
       . o o o o # #
         . o o o .
           . # #


    Floodfill auf den bekannten Bereich,
    beginnend beim Roboter,
    begrenzt durch "." und "#".

    Iterativer Floodfill mit FIFO --> Punkte werden in der Reihenfolge
    durchgegangen, in der sie vom Roboter entfernt sind

    Abbruch, sobald ein "." gefunden wird --> nchstgelegenes "." gefunden.

    Verbleibendes Problem: Weg dorthin

    Ansatz 1: Auf dem FIFO merken, wie der Punkt erreicht wurde
    --> zu jedem Punkt einen ganzen Weg merken

    Ansatz 1a (Beran): Fr jeden Schritt einen neuen Floodfill

    Ansatz 2 (Klaen): Nchsten Punkt auf den FIFO und Pointer auf vorherigen

    Ansatz 3: Zweite Karte zum Merken von Richtungen
    Beim Fllen fr jeden Punkt hinschreiben, wie er erreicht wurde
    (im FIFO zwischenspeichern)

             .
         . . o #
       . o o o v # #
     . o o o > > > R #
       . o o o ^ # #
         . o o ^ <
           . # #

Beran-Wegfindungsalgorithmus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ein iterativer Floodfill ermittelt die Distanz von der Roboterposition zum
nchstgelegenen Zielpunkt. Danach fhren wir denselben Algorithmus fr die
Nachbarpunkte des Roboters aus. Derjenige Nachbarpunkt, fr den die Distanz
abnimmt, ist der Punkt, den wir anfahren mssen.

Klaen-"riverbot"-Wegfindungsalgorithmus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 - Karte speichert Zahlen 0-9
 - 9 an direkt erreichbaren Stellen (Nachbarpunkte)
 - Fr jeden Punkt die Wertigkeit errechnen: 9 - Abstand von der nchsten 9
 - Roboter geht auf die hchste Wertigkeit zu

"Die 0 zieht er hinter sich her, damit er
aus Potential-Lchern wieder herauskommt."
