Bit wisem 2015-wieners-sitzung-12_Zusammenfassung I
BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
1. Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners // jan.wieners@uni-koeln.de
Basisinformationstechnologie I
Wintersemester 2014/15
21. Januar 2015 – Programmiersprachen III. Algorithmen und Datenstrukturen
9. Präsentation und Interaktion – die Spielschleife
SOLANGE kein Spieler / keine Spielerin das Spiel
gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:
lege die aktuelle SpielerID im
zweidimensionalen Array „gameGrid“ ab
und stelle das Spielersymbol dar
IM ANDEREN FALLE:
tue nichts
Prüfe die Gewinnbedingung
10. Gewinn- und Abbruchbedingung
Ein Spieler / eine Spielerin hat das Spiel gewonnen,
WENN:
der Spieler drei seiner Symbole in
(unmittelbarer) horizontaler Reihenfolge
abgelegt hat
ODER
der Spieler drei Symbole in diagonaler
Reihenfolge abgelegt hat
13. Unterscheidung von Kontrollstrukturen in:
Auswahlanweisungen
if
if else
(switch)
Wiederholungsanweisungen
while
for
do while
Sprunganweisungen
return
break
continue
Kontrollstrukturen
14. Gewinn- und Abbruchbedingung
Ein Spieler / eine Spielerin hat das Spiel gewonnen,
WENN (IF):
der Spieler drei seiner Symbole in
(unmittelbarer) horizontaler Reihenfolge
abgelegt hat
ODER (II)
der Spieler drei Symbole in diagonaler
Reihenfolge abgelegt hat
15. Übung 1
Gewinnbedingung
Prüfen I: Hat ein Spieler / eine Spielerin drei ihrer
Symbole in (unmittelbarer) horizontaler
Reihenfolge abgelegt?
Prüfen II: Finden sich drei Symbole eines Spielers
in diagonaler Folge?
16. // Test horizontale Felder
if (gameBoard[0][0] === 1 &&
gameBoard[1][0] === 1 &&
gameBoard[2][0] === 1) {
alert(“Spielerin mit der ID 1 hat
gewonnen!“);
}
Übung 1
17. // Test diagonale Felder
if (gameBoard[0][0] === 1 &&
gameBoard[1][1] === 1 &&
gameBoard[2][1] === 1) {
alert(“Spielerin mit der ID 1 hat
gewonnen!“);
}
Übung 1
18. Präsentation und Interaktion – die Spielschleife
SOLANGE kein Spieler / keine Spielerin das Spiel
gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:
lege die aktuelle SpielerID im
zweidimensionalen Array „gameGrid“ ab
und stelle das Spielersymbol dar
IM ANDEREN FALLE:
tue nichts
Prüfe die Gewinnbedingung
22. Übung 2
SOLANGE kein Spieler / keine Spielerin das Spiel
gewonnen hat, VERFAHRE WIE FOLGEND:
WENN ein leeres Spielfeld angeklickt wurde:
lege die aktuelle SpielerID im
zweidimensionalen Array „gameGrid“ ab
und stelle das Spielersymbol dar
IM ANDEREN FALLE:
tue nichts
Prüfe die Gewinnbedingung
27. Datenstrukturen
Stack / Kellerspeicher
Queue
Liste
Baum
Traversierungsarten
Preorder
Inorder
Postorder
Levelorder
Such- und Sortieralgorithmen
Themenüberblick „Algorithmen und Datenstrukturen“
28. Datentyp:
Bauplan für eine Variable (benannte Speicherstelle im
Arbeitsspeicher des Rechners)
Legt fest, welche Operationen mit einer Variable möglich
sind
Bestimmt die interne Darstellung (Repräsentation) der
Variablen im Rechner
Z.B. bool, int, float, double, unsigned int, etc.
Algorithmen, Datenstrukturen
31. Datenstruktur „Stack“
Auch: „Kellerspeicher“
Abstrakter Datentyp, bei dem Elemente eingefügt und
wieder entfernt werden können
LIFO-Prinzip: Last In, First Out – bei der
Datenstruktur „Stack“ kann immer nur auf das Element
zugegriffen werden, das als letztes eingefügt, d.h. auf
den Stapel gelegt wurde
32. Typische Stackoperationen / Schnittstellen
push(x, s)
legt ein Element x auf den Stack s
top(s), peek(s)
liefert das zuletzt auf den Stack s gelegte Element (ohne das
entsprechende Element zu entfernen)
pop(s)
entfernt das zuletzt auf den Stack s gelegte Element und gibt
es zurück
isEmpty(s)
gibt an, ob der Stack s leer ist
Datenstruktur Stack
36. Liste Folge von Elementen; jedes Element = Teil
einer Kette
Jeder Eintrag in der Liste verfügt nicht nur über
seinen Inhalt, sondern darüber hinaus über einen
Zeiger auf das nächste Listenelement:
Einfach verkettete Liste
37. Um die Liste zu durchlaufen:
Beginn beim ersten Element („Anker“ für den Beginn der
Liste)
„next“ zeigt auf das nächste Listenelement
Letztes Glied der Kette: next-Zeiger = NULL
Um wieder auf das erste Element zugreifen zu können:
anfang-Zeiger auf das erste Element der Liste
Hilfszeiger auf innere Elemente: cursor
Einfach verkettete Liste
38. Element Einfügen:
Ursprüngliche Liste:
Liste nach Einfügen von Element „mat“
Einfach verkettete Liste
bat cat sat vat NULLstart
bat cat sat vat NULLstart
mat
39. Element Löschen:
Ursprüngliche Liste:
Liste nach Entfernen des Elements „cat“
Einfach verkettete Liste
bat cat sat vat NULLstart
bat cat sat vat NULLstart
40. Vorteil:
Elemente lassen sich sehr schnell am Anfang der einfach
verketteten Liste einfügen
Nachteil:
Über jedes einzelne Element muss iteriert werden
Einfach verkettete Liste
bat cat sat vat NULLstart
41. Charakteristika: Jedes Element verfügt über
Einen Inhalt
Einen Zeiger auf das nachfolgende Element
Einen Zeiger auf das vorhergehende Element
Vorteile
Möglichkeit, vom Ende der Liste zum Beginn zu iterieren
Schnelles Löschen und Einfügen von Elementen
Nachteil
Speicherplatzbedarf durch zweiten Zeiger erhöht
Doppelt verkettete Liste
bat cat sat vat NULLstart
44. Extensivform von Spielen (Tic Tac Toe)
Juul, Jesper: „255,168 ways of playing Tic Tac Toe”
(„http://www.jesperjuul.net/ludologist/255168-ways-of-playing-tic-tac-toe)
64. Extensivform von Spielen (Tic Tac Toe)
Juul, Jesper: „255,168 ways of playing Tic Tac Toe”
(„http://www.jesperjuul.net/ludologist/255168-ways-of-playing-tic-tac-toe)
65.
66. Problemstellung: Wie finden wir eine gesuchte
Audio CD?
Umgebungsvariablen:
CD-Sammlung ist unsortiert
ODER
Sortierte CD-Sammlung
Problemstellung Suche
67. Sequenzielle / Lineare Suche in unsortierter Sammlung:
Anzahl Suchvorgänge bei n Elementen:
minimal: 1(best case),
maximal: n (worst case)
Durchschnittlich müssen die Hälfte der Einträge
durchgesehen werden, um das gewünschte Element zu finden
(average case)
Anzahl der Suchschritte steigt proportional mit der
Anzahl der Einträge
Lineare Suche
Quelle und Bildnachweis: http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo1.php
68. Sortierstrategien / -Verfahren:
Insertionsort: Sortieren durch Einfügen
Analog dem Vorgehen eines Kartenspielers: Neue
Karten werden einzeln einsortiert, bevor die nächste
Karte aufgenommen wird
Bubblesort: Vergleichsbasierter Sortieralgorithmus
Heapsort
Quicksort (vgl. C.A.R. Hoare)
Sortieralgorithmen
70. Bubblesort: Sortiert z.B. ein Array von Datensätzen durch wiederholtes
Vertauschen von Nachbarfeldern, die in falscher Reihenfolge stehen
Wird so lange wiederholt, bis das Array vollständig sortiert ist.
Dabei wird das Array in mehreren Durchgängen von links nach rechts
durchwandert.
Bei jedem Durchgang werden alle Nachbarfelder verglichen und ggf.
vertauscht. Nach dem 1. Durchgang hat man folgende Situation:
Das größte Element ist ganz rechts.
Alle anderen Elemente sind zwar zum Teil an besseren Positionen (also näher an
der endgültigen Position), im Allgemeinen aber noch unsortiert.
Wandern des größten Elementes nach rechts Aufsteigen von
Luftblasen: Größte Luftblase steigt nach oben
Bubblesort
Wie prüfen, ob ein Spieler drei Symbole in diagonaler Reihenfolge abgelegt hat?
Kontrollstrukturen
Algorithmus: Eindeutige Beschreibung eines endlichen Verfahrens zur Lösung einer bestimmten Klasse von Problemen
Komplexität eines Algorithmus: Bedarf an Ressourcen (i.e. Rechenzeit und Speicherplatz)
Güte eines Algorithmus:
Qualität der Ergebnisse
Laufzeit / Rechenbedarf des Algorithmus
FIFO First In, First Out
enQueue Objekt hinzufügen
deQueue Objekt zurückgeben, anschließend entfernen
Extensivform
Knotenbeziehungen Achsen:
Elternknoten (parent) – Jedes Element verfügt über einen Elternknoten.Ausnahme: ???
Vorfahre (ancestor) – Elternknoten von KnotenBeispiel: Der Knoten „2“ ist Vorfahre des Knotens „3“.
Kind (child) – Untergeordnete KnotenBeispiel: „3“ ist Kindknoten von „2“.
Geschwister (siblings): Knoten mit gleichen Elternknoten sind Geschwisterknoten.Beispiel: Der Knoten „3“ ist Geschwisterknoten des Knotens „4“.