So, zum letzten Mal für dieses Semester.
3, 2, 1. 14.15 Uhr in Deutschland.
Herzlich willkommen, ist es denn wirklich soweit? Letzte Vorlesung,
SE1 im Jahre 2016 im Wintersemester 15, 16. Diese Vorlesung
auf der Zunge habe ich, besteht aus drei Hälften.
Das ist natürlich Blödsinn ist. Also aus drei Teilen
Wird los. Teil 1, ungefähr eine halbe Stunde,
knappe halbe Stunde, werde ich zu diesem Thema,
das ich jetzt schon seit Minuten drohend hier aufgeblendet habe,
etwas erzählen, Stacks, Cues sortieren.
Zweites Drittel der Vorlesung wird Fred ein Freispiel mit Carol durchführen.
Wenn ich ihn richtig in Erinnerung habe,
also Carol ist back, und Teil 3. Wir haben,
also Fred, ich, insbesondere das Studienbüro.
Wir haben keine Mühen gescheut, also ihre Angaben zu unserer Lehrveranstaltung auszuwerten.
Und ich präsentiere ihnen dann im letzten Drittel der Veranstaltung ihr
Zeugnis für uns, die wir hier vorne gestanden haben.
Und danach ist so im Großen und Ganzen für mich dieses Semester gelaufen.
Aber noch ist es nicht so weit, noch werden wir noch,
haben wir so einen kleinen inhaltlichen Gig vor uns. So,
am Ende dieser Veranstaltung verspreche ich Ihnen dieser halben Stunde,
dass Sie die Sammlungsarten, wir sprechen ja seit mehreren Wochen über dynamische Datenstrukturen,
dass sie die beiden Sammlungsarten, nämlich Stacks und Cues,
dass sie die in- und auswendig können.
Und für den Rest ihres Informatiker-Daseins beherrschen. Sie sehen hier auch
schon so die deutschen Übersetzungen, Stacks sind Stapel oder Keller.
Irgendwas faul
Ja. Einmal ist Herr Schubert nicht da. Schon geht alles schief.
Kommen Sie noch rüber. Genügend Platz da. So,
ja, wie Sie sehen, sehen Sie nichts.
Stacks, Deutsch, Stapel oder Keller,
was das bedeutet und Schlangen, die Art und Weise,
wie man mit diesen dynamischen Datenstrukturen umgeht
Der Keller ist also der, ich weiß gar nicht,
ob es von fundamental ein Superlativ gibt,
also wenn es den gibt,
ist es eine der fundamentalsten Datenstrukturen in der Informatik,
wenn es den nicht gibt, bitte ich alle,
die Germanistik studieren und auch alle anderen und Verzeihung für diesen falschen Superlativ.
Diese Datenstruktur ist ihnen schon mal begegnet im Laufe des Semesters
und zwar haben wir uns ja kurz darüber unterhalten,
so über einen sogenannten Aufrufsdeck.
Also das ist diese Datenstruktur, dient also unter anderem dazu,
die Programme, die sie schreiben,
verarbeiten zu können,
dynamisch ablaufen lassen zu können
Ja, das reicht. Das Semester muss jetzt
auch langsam zu Ende gehen, alles bricht zusammen.
Und sie sehen auch schon auf der Folie, dass so Prinzip,
nachdem Stacks organisiert sind, nachdem diese dynamischen Datenstrukturen organisiert sind.
Dieses Prinzip heißt Liefung. Last in first out.
Das ist so, ich finde, ich mag Stacks,
also ich mag auch Bäume und dieser ganzen anderen Datenstrukturen.
Aber der Stack ist also ganz besonders,
also den habe ich ganz besonders ins Herz geschlossen,
weil der Stack nicht nur, also im Alltag,
wie man so, ich weiß nicht,
wer von ihnen sowas zu Hause hat, ich bin mir nicht sicher,
ob das eine geeignete Organisationsform für die Ablage von Äpfeln ist.
Es führt ja dazu, also man ist immer den Apfel,
den man zuletzt so auf diesem Keller,
auf diesem Stack hinzugefügt hat.
Was also bei Äpfeln ja den Effekt haben wird,
der da unten,
wenn man nicht schnell genug ist,
also der wird verfaulen
Insofern ist möglicherweise diese Organisationsform nicht geeignet, sondern die andere Organisationsform,
die ich Ihnen nachher vorstellen werde, die Schlange,
die ist nämlich nicht last in first out, wie das Deck organisiert.
Dazu gleich später mehr. So,
ich habe jetzt durch dieses Zeigen mit der Maus,
also last in, man tut was auf dem Stack drauf,
first out, das, was man zuletzt hinzugefügt hat,
das nimmt man auch wieder als erstes runter.
Die zwei elementaren Datenoperationen, die also mit dem Stack möglich sind,
stehen hier auch schon blau, Push ist also das Hinzufügen eines Elementes auf den Stack und Pop,
nennt man das, Entfernen einer des obersten Elementes vom Stack.
Und diese Darstruktur ist also gerade,
wenn es um die Verarbeitung von Rekulsion geht,
ist also, ist fundamental, ohne dieses Modell,
also in der Verarbeitung würde es uns schwerer fallen,
dass wir uns ein Bild davon zu machen, wie man rekursive,
ob unter anderem rekursive Operationen auf dem Rechner verarbeiten kann.
Jetzt gucken wir uns dieses Stack-Interface nochmal aus einem anderen Grund etwas genauer an,
was sie also sehen, es ist ganz,
also das ist ja eine Schlichtheit kaum zu überbieten.
Man kann ein Element von welcher Art auch immer dieses Element ist,
das ist hier von diesem generischen Typ E,
kann man auf den Stack drauf tun und man kann es,
also dass sie das ja eine Funktion,
die liefert ein Element vom Typ E,
man kann es auch wieder vom Stack entfernen.
So, das, was ich jetzt hier sage,
so das steht da ja nicht, da steht ja nur PUSH
Können wir das nachgucken? Was könnte Push bedeuten?
Und man könnte auch nachgucken, was Pop bedeutet.
Dann kriegt man halt im Deutschen Krieg wohl beziehungsweise im Wörterbuch
, kriegt man eine Erläuterung dafür. Ist empty,
denke ich, ist übersetzt sich auch fast von alleine.
Ich lege jetzt aber mal Werte da drauf. Also,
dass da erstmal nur steht und die Bedeutung dieser Operation,
das ist das, was ich Ihnen sage.
Es ist durch nichts, ist es vorgegeben. Wenn Sie
jetzt dieses Interface lesen, können Sie ja so hoffen,
dass diese Operation so implementiert sind,
wie Sie heißen.
Aber das ist halt Hoffnung
Ich glaube, liebe Hoffnung, es sind auch Fundamentale,
Eigenschaften, aber gegeben ist es,
also die Implementation ist dadurch in keiner Weise garantiert.
Nur um das nochmal zu veranstalten, veranschaulichen,
es sei ein Stack gegeben von Strinks.
Ja, der mag im Moment mal dieses Aussehen haben.
Wenn ich jetzt auf diesen Stack ein Element pushe,
dann soll der Stack oder hat das Deck nachher dieses Aussehen.
Dann kann ich noch was drauf tun.
Also halt dieses Aussehen. Und jetzt nehme ich ein Element
vom Stack herunter
Dann schrumpft der Stack halt wieder. Also die intellektuelle Hürde,
einen Stack zu verstehen, ist also eher gering. Das Interface hatte ich jetzt schon gesagt,
so die Signaturen sind Ihnen bekannt, dass die Implementation auch,
also der Hoffnung entspricht, ist dadurch in keiner Weise garantiert. Es gibt im Java Collections Framework,
das haben Sie ja auch schon an der einen oder anderen Stelle jetzt kennengelernt,
gibt es auch eine Implementation für den Stack, die nicht ganz,
also von den Signaturen und von den Benennungen her dem entspricht,
was sich jetzt gerade gesagt habe,
ist aber hinreichend ähnlich, weil man sich fragt,
wenn man also den Stack in Reihenkultur kennengelernt hat,
also was es denn wohl soll,
dass es also auf einem Stack die Operation Search gibt.
Ja, und das gibt der Stack eigentlich nicht her,
aber das ist dann wohl, also der Pragmatik des Umgangs geschuldet,
bevor ich den ganzen Stack leerräume,
kann ich halt und das Element raushole, das ich haben möchte,
also kann ich halt den Stack vorher nochmal mit dieser Implementierung
im JCF kann ich den Stack nochmal durchsuchen.
So. Jetzt diesen Punkt mit die Namen sagen nichts über
die Damen sagen nichts über die Bedeutung.
Und das kann ich hier an dem Beispiel,
denke ich, auch nochmal so etwas erläutern.
Das ist der Stack, das Interface für den Stack,
so wie wir das jetzt gerade besprochen haben.
Und das Interface für die Q sieht von der Anzahl der Operationen
und von der Art der Operationen her ziemlich genau dasselbe,
selbst so von den Signaturen her
Die heißen zwar anders und die sind dann auch anders implementiert,
bloß an den Interface kann man das überhaupt nicht sehen.
Das sieht man also hoffentlich an dieser, an diesem Beispiel,
da hat man keine Ahnung, also was sind diese Operationen eigentlich tun sollen.
Und das ist ein Thema, also dass man zwar die Signaturen sieht,
aber nicht die Bedeutung der Operationen an ihrer Schnittstelle erkennen kann,
ist ein Thema,
mit dem wir uns also unter anderem auch in SE2,
aber dann auch in weiterführenden Lehrveranstaltungen beschäftigen werden müssen,
weil das ein ziemlich fundamentales Problem für Software,
für die Softwareentwicklung darstellt.
Wir haben ja schon so das eine oder andere API-Application-Programming-Interface kennengelernt
und dann schauen sie halt da drauf auf dieses API
und dann können sie halt sowas sehen, wie das,
was ich hier jetzt gerade gezeigt habe.
Sie lesen so eine Method-Summary und so und dann denkst du,
hm, so, ja, Stack, was kann ich denn damit machen?
Also ich kann einen erzeugen, ist ja schon mal gut,
bis hierhin sieht das Ding ganz schön verwendbar aus.
Ich kann gucken, ob das leer ist,
ja,
Was kann ich denn jetzt eigentlich damit tun mit diesem, mit diesem Stack? Und das Einzige,
was ihnen hilft, so ein Verständnis von einem,
von einer Klasse und den dann davon zu erzeugenden Objekten herzustellen,
ist, dass jemand, und zwar der,
der diese Kommentare geschrieben hat, also ein Interesse daran hat,
dass sie verstehen, wozu dieses Ding gut sein kann.
Und sie sind also auf Gedeih und verderbt darauf angewiesen,
Dass das, was da steht, für sie verständlich ist,
haben aber trotzdem keinerlei Garantie, dass das,
was da steht, nicht auch so gelogen ist,
oder dass sie, ich unterstelle ja niemandem Bösartigkeit.
Ja, es ist so schön, du sollst nicht Bösartigkeit unterstellen,
wenn Dummheit als Erklärung hinreichend ist. Für eine Situation,
die man sich als solches erstmal nicht erklären kann.
Aber möglicherweise konnte der kein Englisch oder hatte auch gerade keine
Lust, irgendwas zu kommentieren.
Oder vielleicht ist eben ein Copy-Paste-Fehler unterlaufen.
Also das ist alles
extrem unbefriedigend
Deswegen werden wir uns auch nochmal ein klein wenig,
das ist so jetzt erstmal nur ein Ausblick,
werden wir uns auch mit sogenannten abstrakten Datentypen zu beschäftigen haben.
Das ist der, mindestens in Teilen gelungene Versuch,
die Semantik von Operationen zu spezifizieren,
wie das auf eine Art und Weise, dass das eindeutig ist.
Wenn es um Semantik, Spezifikation, Eindeutigkeit geht, dann liegt der Verdacht,
der begründete Verdacht nahe, dass dafür mathematische Methoden verwendet werden.
Und das, die Abstrakt ist so die Theorie der abstrakten Datentypen,
ist so eine Nahtstelle zwischen gerade objektorientierter Softwareentwicklung und der theoretischen Informatik.
Weil mit den Mitteln, mit den Formalismen der abstrakten Datentypen gelingt es,
Klassen, die in ihrer Semantik zu spezifizieren. Und das,
was sie bis jetzt tun können, mit den Mitteln,
die wir ihnen vorgestellt haben, ist,
so dieser Teil der Spezifikation eines abstrakten Datentypen,
das ist sozusagen, auch wenn es hier vielleicht nicht so aussieht,
aber das ist für sie bekanntes Terrain
Nämlich die Spezifikation des Typen, die Benennung und dann eine Menge von Operationen,
hier Functions genannt, die die Signatur der Operationen beschreibt.
So, der Teil, der hier bei den abstrakten Datentypen hinzukommt,
ist die Spezifikation der Semantik in Form von sogenannten Aktionen,
also Gesetzen, die für alle Elemente der Wertemenge Stack,
also dieses Typen, gültig sind.
Und das kann man sich mal so kurz anschauen,
hier diese vier Aktionen, die für den Stack spezifiziert worden sind.
Aber was hier steht ist, Wenn ich auf ein Deck esse,
ein Element X drauf tue, dann kann ich mir dieses
Element durch eine Anwendung der Operation top auch anschauen.
Und das soll für alles Decks gelten. Dann soll gelten,
ich tue ein Element X auf den Stack drauf und
wenn ich dann eine Pop-Operation auf diesem Stack aufrufe,
dann bekomme ich diesen Stack auch wieder,
den,
den ich vorher hatte
Das spezifiziert jetzt das, was ich gerade so mit der Zunge
im Hals so formuliert habe. Das Verhalten eines Decks,
das ist ein neuer Steck, so ein gerade erzeugtes Deck,
dass der leer ist und ein Stack,
auf den ich was drauf tue, dass der nicht leer ist,
das hat so den Charakter von Hilfsoperation,
so das eigentliche Verhalten des Decks,
die Semantik der Operation, das Zusammenspiel der Operation,
Push,
Pop und Top,
wird also durch diese zwei Axiome spezifiziert
Das ist jetzt also für,
ich komme gleich nochmal während der Besprechung der Lebe-Evaluation,
der ein oder andere hat geschrieben, ich kann mit den
Beispielen Konto und Überweisungen gar nicht so schlecht was anfangen.
Meine Vermutung ist, dass der oder diejenige, der das geschrieben hat,
von zu Hause noch Taschengeld in die Hand gedrückt bekommt.
Worauf ich an dieser Stelle hinaus möchte,
ist, für Praxis relevante Aufgabenstellungen ist es die Herausforderung,
Elemente zu entdecken,
die einer formalen Spezifikation zugänglich sind
Das fällt so vielen von uns, da nehme ich mich
mal gleich dazu, das fällt vielen von uns schwer.
Ist aber eine extrem hilfreiche Übung,
weil wenn man so einen Datentyp mal formal spezifiziert hat,
dann hat man eine gute Voraussetzung,
um also auch die Korrektheit einer Implementation nachweisen zu können.
Und das ist gerade bei sicherheitsrelevanten Applikationen ist das zunehmend zu
einer Notwendigkeit. So ein Punkt,
mit dem wir uns auch noch in SE2 beschäftigen werden,
ist, Was passiert eigentlich oder was soll eigentlich passieren?
Für welche Arten von Kontexten ist eigentlich ein Operationsaufruf erlaubt?
Unter welchen Bedingungen ist jemand, der eine Operation in einer Klasse implementiert,
bereit, aufgerufen zu werden und den Code dieser Operation durchzuführen?
Das ist das sogenannte Vertragsmodell der Softwareentwicklung.
Da werden wir eine ganze Weile drauf eine ganze,
mindestens eine Vorlesung werden wir damit uns beschäftigen.
Also an der Stelle erstmal nur kurz als Ankündigung Bedingungen legen,
eindeutig fest, wessen Verantwortung ist es für den Kontext eines Operationsaufrufs
zu sorgen. Um dann also im Zusammenspiel zwischen einer Klasse,
die eine Dienstleistung anbietet und einem Klienten, auch die Verantwortung dafür klar festzulegen,
wer ist schuld, wenn das schief läuft.
Das hat jetzt weniger einen juristischen Kontext, als es hilft dann,
also es ist schon beim Schreiben eines Programms dabei, sich zu überlegen,
was passiert, wenn Eingaben nicht einer bestimmten Erwartung genügen.
Also abstrakte Datentypen, Das ist jetzt auch,
also vielleicht als kurzen Moment für einen kurzen Moment des Verschnaufens,
das kommt, kommt es in der Klausur vor.
Das kommt auch in der Klausur. Es war einfach alles
mögliche. Naja gut, aber das glaube ich nicht.
Also ich habe die schon länger nicht mehr angeguckt.
Puh, ich habe Glück. So, das zum Thema Stack.
Jetzt. Stacks waren also Lifo, Last in first out
. Jetzt kommen wir mal zu unseren Äpfeln zurück.
Für die Äpfel ist möglicherweise die Q,
die Schlange
Die geeignete Datenstruktur, um sie zu Hause zu verwalten.
Die Q ist nämlich nach dem FIFO-Prinzip organisiert.
First in, first out. Ja. Das heißt also,
das Element, das ich zuerst reingetan habe,
das kommt auch als erstes Element wieder raus.
First in, first out. Das auch mal kurz am
Beispiel. So, gegeben sei also so eine Schlange.
Jetzt weiß man auch nicht, wo vorne, wo vorne und hinten ist.
So, und jetzt, aha, jetzt sieht man es schon. Also an der Stelle wird also eng cute,
nochmal machen, sehen wir auch so, aha,
das wird also vor, dass davor erste Element,
und jetzt ist die Preisfrage, welches Element geht raus,
in dem Moment, wo man was, decute, ja,
ist doch klar, das Element, das als erstes reingetan worden ist.
Also der älteste A für Apfel, der geht auch wieder
als erstes raus. So ist eine Pue organisiert.
Und jetzt sage ich das noch, öffentlich.
Also das englische Wort Q übersetzt sich im deutschen
zur Schlange
Ja. Und wenn sie jetzt also das Rückübersetzen und sind also
der informatischen Fachsprache nicht mächtig, dann könnte es sein,
dass sie auf die Idee kommen, dass mit Snake rückzuübersetzen.
Tun sie das nicht, merkt man sofort ein gewisses Level an Inkompetenz,
wenn sie die gute Pue als Snake bezeichnen.
Das kommt nicht gut an. So, das also zu
dynamischen Datenstrukturen, das war der letzte Teil zu diesem Thema.
Jetzt haben sie kennengelernt
Dynamisch wachsende R-Rays. Sie haben Bäume kennengelernt. Sie haben,
und jetzt gerade haben sie noch Keller und Schlangen kennengelernt.
Sie werden noch im Weiteren, also Verlauf ihres Studiums,
werden sie sich noch mit einer einer Datenstruktur,
mindestens einer fundamentalen Datenstruktur beschäftigen.
Das sind die Grafen. Das machen wir hier
in diesem Semester und auch nächstes Semester in SE2 nicht.
So, ich wollte noch kurz was Zum Thema Sortieren
sagen. Wir können jetzt so mit dem,
was wir auch letzte Woche kennengelernt haben, also mit Hash-Verfahren,
insbesondere können wir schon sehr effizient suchen.
Wenn man was suchen möchte, dann ist also so
die andere Seite der Medaille, ist also das Sortieren.
Und wir werden uns so auch,
also sie werden sich im weiteren Verlauf ihres Studiums,
werden sie sich noch mit so Klassen von Sortieralgorithmen beschäftigen.
Auch auf vermutlich einer etwas formaleren Ebene,
als wir das jetzt hier in SE1 tun
Nur mal kurz zum, also das ist die zugrunde liegende Begrifflichkeit.
Also eigentlich ist das also wirklich analog, nicht wirklich.
Also es ist analog zum Suchen. Es ist also Sortieren bedeutet nichts anderes als,
also eine Sammlung von Objekten in eine geordnete Reihenfolge zu bringen.
Und dazu muss gelten, das auf den Elementen
eine Ordnungsrelation definiert ist. Und dann können wir die,
können wir, wenn das der Fall ist,
dann können wir also mit den Sortierverfahren die Informatik,
die Softwareentwicklung in den letzten 50 Jahren so hervorgebracht hat,
wir also beliebig schnell oder langsam sortieren.
Ich wollte hier jetzt eigentlich nur ein Beispiel vorstellen im Rahmen der Vorlesung.
Also es hat so, ich will nicht der Lebe-Evaluation vorgreifen,
aber der ein oder andere hat wohl die Vorlesung über Rekursion als verstörend empfunden.
Und was ich überhaupt nicht verstehe, aber wie gesagt,
ich wollte ja nicht vorgreifen. Quicksort ist ein Rekursiver, Sortieralgorithmus.
Und für mich ist das ein wirklich gutes Beispiel dafür.
Also wie man Rekursion anwenden kann, um elegant und effizient
gleichzeitig zu ein Problem in diesem Fall, also ein Sortierproblem zu lösen.
So, wie geht Quicksort? Nun, man stelle sich vor,
man hat eine Sammlung von unsortierten, sagen wir, Zahlen.
Und die Grundidee ist, ich nehme jetzt eine beliebige Zahl aus
dieser Menge von unsortiert, aus dieser Liste von unsortierten Zahlen.
Und die betrachte ich mal so etwas näher. Ich weiß gar nicht,
warum ich das hier mit der Hand am Arm mache.
Ich mache das lieber gleich. Also so,
ich habe sie auch hier aufgezeichnet. So, das ist
meine Liste von unsortierten Zahlen. Und ich greife mir jetzt
eine beliebige aus. Und um mir das einfacher,
einfach zu machen, nehme ich immer die erste Zahl.
So, warum auch nicht? Wenn es eine beliebige Zahl ist,
kann ich auch immer die erste nehmen, oder?
So, und die Zahl gucke ich mir jetzt an,
in diesem Fall also die neuen. Und jetzt mache ich Folgendes,
ich teile die Liste auf,
also die verbleibende Liste und zwar derart, ich mache eine Liste,
da sind alle Elemente drin,
die kleiner sind als die Zahl,
die ich
mir gerade angeschaut habe
Und die andere Liste, die ich bilde,
da sind alle Elemente drin, die größer sind als die Zahl,
die ich mir angeschaut habe.
So, bis hierhin denke ich, kann man noch machen.
Es geht doch. Das kann ich doch einem Viertklässler sagen.
Also bis hierhin. Und dann war ich,
jetzt kommt der Trick, das kann ich dem Viertklässler nicht mehr erklären.
Sag, wie lange mache ich das Verfahren denn, lieber Onkel?
Und ich so, okay, das machst du so lange,
bis du eine einelementige Liste hast
Die ist sortiert. Kurz nachdenken. Ja,
wenn ich eine Liste bestehend aus einem Element habe,
dann behaupte ich, dass die sortiert ist.
Ist sie ja. Er hat ja nur noch ein Element, oder?
Ja, und so mache ich das dann weiter. So,
jetzt kann ich mir, jetzt gucke ich mir,
wie hier aus der Liste, gucke ich mir das wieder an.
Was haben wir denn da? Ich gucke mir
die sechs an. Welche Zahlen sind kleiner? 3,
5 und 1. Da muss ich dann wahrscheinlich weitermachen.
Oh, hier habe ich jetzt schon
eine sortierte Liste
Die ist doch, also wunderbar sortiert. Das kann man
natürlich bloß jetzt draufschauen, kann ich das erkennen.
An der Stelle muss ich noch weitermachen. Und zwar soweit
, bis ich hier bin. Und jetzt kommt der,
der unfassbar geniale Trick, dieses Sortieralgorithmus. Also bis hierhin
hat man den rekursiven Abstieg. Und jetzt kann ich also,
hat sich so ein schlaues, so ein echter schlaues Gi ausgedacht,
naja, was ich jetzt tun kann, unter der Voraussetzung,
dass ich nur noch sortierte Listen hier habe.
Und ich weiß, dass die Elemente, die in
diesem Unterbaum sind, sind alle kleiner als dieses Element.
Und hier in dieser sortierten Liste sind alle größer,
dann muss ich die nur noch wieder zusammenfügen im rekursiven Aufstieg.
Und dann komme ich nämlich, wenn ich ihm rekursiv aufsteige,
dann ergibt das die Liste 1, 3, 5.
Und wenn ich diese Liste, wenn ich von hier unten zurückkomme,
habe ich als 1, 3, 5, 6,
konkretiniert mit dieser Liste 1, 3, 5,
6, 8. Das hört sich doch schon verdammt sortiert an,
oder?
So, dann kann man sich wohl vorstellen,
dass diese Liste hier konkretiniert mit dieser Liste
insgesamt eine sortierte Liste darstellt
As if it was magic. Ja, und dann kann man
sich das anschauen, wie dieser Algorithmus so formuliert ist.
Und der entscheidende Schritt in diesem Algorithmus,
also der die Waldschritt, der ist ja einfach.
Die Listen, die ich hier gebildet habe,
durch einen rekursiven Aufruf von Quicksort.
Die müssen an der Stelle, werden sie dann wieder zusammengefügt.
Das ist der Algorithmus Quicksort. Das war okay.
Habe ich jetzt alles nicht verstanden. Musste es wirklich
so kompliziert sein
Da finde ich dieses Beispiel immer wieder, also auch wenn ich nicht weiß,
ich muss zum Professor Ludwig, vielleicht nicht ihn selbst,
aber vielleicht einen seiner Mitarbeiter aus dem deutschen Klimarechenzentrum fragen.
Sagen wir mal, macht ihr sowas? Also 10 Millionen Zahlenwerte sortieren,
auf einem Rechner, der 10 hoch 8 Elemente,
elementare Schritte pro Sekunde. Wahrscheinlich würden die mich erstmal auslachen,
dass das ein bisschen wenig ist, aber bitte,
dann sollen es eben 10 hoch 10 sein und da reden wir hier von 100 oder Millionen oder eine Milliarde.
Das Problem bleibt ja das Gleiche. So, unser Kaffee trinkender Kollege,
der also einen einfachen Sortieralgorithmus, nämlich mit der Komplexitätsklasse Endquadrat,
implementiert hat, der kann elf Tage am Stück Kaffee trinken.
Das ist ungesund. Der Kollege, der den Quicksort implementiert hat,
wird sich denken, verdammte Hacke,
da habe ich zuletzt wieder ein ganz kurzer Kaffee gewesen,
mit dem ich, es reicht noch nicht mal für ein Espresso wahrscheinlich,
wenn er den Quicksort auf diese Datenmenge loslässt.
Also man kann sich bei, das denke ich,
ist insofern ein hilfreiches Beispiel, Weil bei diesen großen Zahlen,
da macht es dann tatsächlich einen Unterschied, in welche Komplexitätsklasse diese Algorithmen gehören.
So, den Quicksort habe ich Ihnen vorgestellt,
der gehört genau in diese Komplexitätsklasse, Endlock N.
Das ist schon ziemlich gut. Ich wünsche Ihnen,
dass Sie sich in den Semesterferien mit dem Bucket zollt beschäftigen,
weil das ist intellektuell dann doch etwas aufwendiger.
Und für diejenigen, die sagen, ach, ich implementiere,
ich verwalte immer nur kleinere Mengen von Daten,
dann auch den Bubble Thord benutzen,
weil sollen wir nicht nachher kommen und sagen,
das dauert alles so lange.
Wir haben nichts Vernünftiges gelernt. So,
jetzt ist dieser Teil der Vorlesung beendet,
anders als sonst verabschiede ich mich noch nicht mit schönes Wochenende.
Lassen wir mich erst in meiner knappen Stunde,
jetzt kommt Fred mit seinem letzten Auftritt und Carol.
Carol. Ich glaube, du musst noch mal sagen,
wie man Carol schreibt. Ja. Das gab da doch
viele, viele Variationen. Okay, also ist gleich.
Ich bleib mal da, ja. Das ist meine Kohle
So. Okay, also ich darf jetzt euch noch ungefähr 35 Minuten unterhalten.
Genau, dann starte ich doch einfach mal Kerl.
Ihr seht einmal im Verzeichnisnahmen, wie man ihn buchstabiert.
Mir persönlich ist es jetzt nicht so wichtig. Und man sieht es,
glaube ich, auch im Titel des Fensters, oder?
Carol the Robot, musst du da gerade stehen.
Hier steht es auch. Aber wenn ihr es anders schreibt,
weiß ich auch, was ihr meint.
Das ist völlig okay. So, habe ich mal so
ein kleines Programm, dass ich nichts vergesse.
Genau, also ich wurde noch angerufen von einer halben Stunde
Das ist also ein Vorklausur-Panik-Tutorium geben wird. Für alle Leute,
die noch mal so ein bisschen den Stoff wiederholen wollen,
letzte Fragen haben und so weiter.
Das wird also übermorgen stattfinden. Geht los um 14.15 Uhr
und spätestens um 18 Uhr werden wir da rausgeschmissen.
Ja. Im D125, und das macht Daniel Speck,
das mache nicht ich. Also der Herr,
der auch bis jetzt immer das Tutorium gemacht hat.
Kommt bitte mit irgendwelchen Fragen an. Wenn jemand Fragen hat
, ist das immer so ein bisschen schade.
Gut. Dann Stine, genau.
Also wir drucken immer ungefähr so viele Klausuren,
wie uns halt der Schienenanmeldestatus uns sagt,
irgendwie 400 Studenten sind angemeldet und dann kommen nur 300 irgendwas.
Also ich fände es irgendwie sehr schön,
wenn ihr mal guckt, einmal, ja,
wenn ihr mitschreiben wollt, dass ihr auch wirklich angemeldet seid,
das schaffen immer nicht alle 100 Prozent.
Und besonders, wenn ihr nicht mitschreiben wollt, dass ihr abgemeldet seid,
das fände ich ganz gut. Oft ist es so bei Veranstaltungen,
wenn man sich am Anfang des Semesters dafür einträgt,
hey, ich will irgendwie daran teilnehmen an der Vorlesung,
an der Übung und so, dann seid ihr automatisch für die Klausur oft angemeldet.
Das kann je nach eurem Fach anders sein,
ich will jetzt nichts versprechen. Aber es kann sein,
dass ihr gar nicht an der Klausur teilnehmen wollt,
aber ihr seid trotzdem angemeldet
Es ist für euch blöd, dann verschenkt ihr einen Versuch,
für uns ist es blöd,
weil wir dann mit viel mehr Leuten rechnen und dann landen die Klausuren,
ich weiß gar nicht wo, im Hochsicherheitstrakt wahrscheinlich, die unbenutzten Klausuren.
Also bitte prüft das doch einfach mal. Okay, und
dann kommen wir jetzt zum eigentlichen Thema. Stacks. Also,
wenn ich den Leuten jetzt in den letzten Jahren immer so beigebracht habe,
was man mit Stacks so alles machen kann,
dann gucken die mich immer an und sagen, ja,
aber das kann man mit Listen doch auch machen.
Also ein Stack ist doch eigentlich nur eine beschränkte Liste,
eine Liste, wo ich nur vorne drauf zugreifen kann.
Dafür braucht auch keine eigene Datenstruktur. Tja, und ich dachte,
ich zeige euch jetzt vielleicht mal Vorteile von Stacks gegenüber Listen.
Oder realistische Anwendungsfälle von Stacks. Und ich habe gestern mal
Achse gefragt, der ja früher mit dieser Vorlesung gemacht hat.
Was sind eigentlich sinnvolle Anwendungsbeispiele für Stacks? Und da hat er gesagt,
einmal Methodenaufrufe, ihr habt ja schon diesen Paul Stack kennengelernt.
Das werde ich euch dann nochmal zeigen. Und Ausdrucksausdrucksauswertungen mit
der sogenannten Postnex-Notation, das werde ich euch heute auch zeigen.
Und zwar sowohl in Java als auch in Carre,
wenn wir da noch Zeit haben.
Gut, fangen wir also mit Java an,
dann muss ich ja Blue Jay starten
Ach so, und eine Sache darf ich nicht vergessen.
Das hatte ich mir extra vorgenommen. So,
das finde ich immer so toll, dass die Videos immer noch
am selben Tag verfügbar sind und dass immer alles wunderbar geklappt hat.
Ich glaube, das mache ich jetzt einmal.
Also vielen Dank an das Lecture-To-Go-Team. Vielleicht auch von euch
. Okay, ich glaube, bevor ich Blut erstarte,
starte ich erstmal nochmal mein Office.
Das kann man ja immer recht gut veranschaulichen,
so irgendwelche Rechnerprozesse
Also nehmen wir mal an, wir wollen irgendwas ausrechnen, ja?
Nehmen wir mal irgendeine Formel, die wir verstehen,
sagen wir mal irgendwie 1 plus 2, mal 3 plus
4. Ich hoffe jetzt, das Programm rechnet das nicht für mich aus.
Ich will einfach nur, dass da so steht.
Okay, steht da so. Ja, wie würden wir
da als Menschen rangehen? Also wir würden erstmal das in
der Klammer ausrechnen und uns merken, was da rauskommt.
Es müsste ja 3 sein, dann würden wir uns irgendwie das ausrechnen.
Das ist 7, dann müssen wir die beiden kombinieren und so.
Also wir verstehen so ein bisschen, was diese Klammern bedeuten.
Und wenn wir zum Beispiel die Klammern weglassen,
dann verstehen wir, dass das was anderes bedeutet.
Wir wissen dann irgendwie Punkt vor Strich, oh,
habe ich mich vertippt.
Punkt vor Strichrechnung und solche Geschichten
Gut. Jetzt gibt es noch ein anderes System.
Also dieses System nennt man Infix-Notation, weil,
also ich habe den einen Operanten hier, die Eins,
den anderen Operanten 2. Und dazwischen,
da wo jetzt meine Nase ist, da ist der Plus-Operator.
Infix heißt also zwischen den Operatoren. Zwischen den Operanten,
Entschuldigung. Soll ich das mal als Überschrift darüber schreiben?
Ich will was einfügen. Nee, so muss ich das
, glaube ich, machen, oder?
Kann ich sagen, ich will was einfügen, ja.
Das ist also die Infix-Notation. Whops, Infix-Notation. Ja,
und da gibt es zum Beispiel noch die sogenannte Postfix-Notation.
Es gibt auch noch Präfix und ich glaube,
das war es dann auch.
Aber die Postfix-Notation ist recht interessant,
weil Rechner meistens intern so arbeiten
Ja, Postfix heißt er dahinter. Also erst kommen
die Operanten und dann kommt der Operator. Also irgendwie,
jetzt kommt die Eins, dann kommt die Zwei und dann kommt das Plus.
Dann kommt die Drei, dann kommt die Vier,
dann kommt dieses Plus und dann kommt dieses Mal.
Das sieht irgendwie lustig aus, oder? Ja,
und man sieht jetzt irgendwie, dass die Klammern hier gar nicht notwendig sind. Also einfach dadurch,
dass ich das in der Reihenfolge so hingeschrieben habe,
ist völlig klar, ich muss die 1 und die 2 addieren,
ich muss die 3 und die 4 addieren und was da dann auch immer jeweils rauskam,
das muss ich dann multiplizieren
Ich weiß also, wenn ich das einfach von links nach rechts lese,
weiß ich, in welcher Reihenfolge die Operatoren ausgewertet werden.
Also erst wird dieses Plus gemacht, dann wird dieses Plus gemacht und dann wird dieses Mal gemacht.
Nur während hier muss ich das eben irgendwie komplizierter irgendwie rausfinden.
Okay, wie wäre das bei diesem Beispiel? Also ich schreibe erstmal die Eins hin,
dann schreibe ich die zwei hin, dann schreibe ich die drei hin,
dann kann ich die Multiplikation hinschreiben,
dann kann ich diese Addition hinschreiben,
weil jetzt ja das Ergebnis quasi von zweimal drei feststeht,
dann kann ich die vier hinschreiben und dann kann ich diese Addition hinschreiben.
Habe ich das richtig rum gemacht? Mal kurz gucken,
zweimal drei ist sechs, eins und sechs
wäre dann sieben
Das wäre dieses Plus gewesen, Plus 4 ist dann 11. Ja,
ich hoffe mal, ich habe es richtig gemacht,
ihr dürft mich korrigieren, wenn ich es falsch gemacht habe.
Keine Einwände. Okay. Wie würde ein Computer jetzt sowas
aussehen, wenn er so einen String sieht? Tja,
ich hatte ja hier schon gesagt,
ein Mensch merkt sich irgendwie Zwischenergebnisse,
vielleicht schreibt er sich das dann irgendwie unter die Klammern oder streicht was durch oder so und ersetzt irgendwas.
Und so durchstreichen und untersetzen, sowas macht ein Rechner auch.
Und dafür braucht er einen sogenannten Stack.
Diesen Stack tue ich jetzt mal irgendwo hin,
vielleicht in eine neue Spalte, dass ihr nicht verwirrt seid.
Ich kann ihn ja mal hierhin tun,
das ist jetzt
mein Stack
Und jetzt geht man einfach ganz systematisch, diese Postwechselnotation von links nach rechts durch.
Was sehe ich denn hier als Esse? Ich sehe eine Eins.
Diese Eins tue ich jetzt einfach oben auf den Stack rauf.
Okay, jetzt ist meine Eins auf dem Stack.
Jetzt gucke ich mir die nächste Zahl. Das ist eine
Zwei. Die tue ich auch auf den Stack drauf.
So, das ist jetzt keine Zahl. Es würde jetzt
keinen Sinn machen, dieses Plus auf den Stack zu tun.
Sondern was ich jetzt machen muss, ist,
immer wenn ich ein Plus sehe,
heißt es für mich oder für den Computer,
schaue dir die obersten beiden Elemente auf dem Stack an und ersetze sie mit dem Ergebnis.
Okay, was ist denn eins plus zwei? Das ist,
glaube ich, drei. Da muss ich, glaube ich,
niemanden für drannehmen. Also ich nehme die jetzt, ups,
Ich nehme dir jetzt beide von dem Stack runter und ersetzte sie durch das Ergebnis.
Ich bin jetzt also in meiner Rechnung quasi bis hier gekommen.
Ich habe jetzt ausgerechnet, das 1 und 2, 3 jetzt.
Okay, jetzt sehe ich hier wieder eine Zahl,
die muss wieder auf den Stack. Dann sehe ich hier
noch eine Zahl, die muss auch wieder auf den Stack.
Jetzt sehe ich hier ein Plus. Was glaubt ihr,
was ich jetzt machen muss, weil da ein Plus steht?
Hat irgendeine Ahnung, ja? Die beide sind obersten auf
dem Stack zusammen bei dir, genau.
Also 3 und 4 nehme ich runter.
Was ist 3 und 4, 7? So, okay.
Jetzt bin ich bei dem Mal. Was glaubt ihr,
muss ich tun? Aufgrund der Tatsache, dass sie
das Malzeichen steht
Ja. Keine Ahnung, eine Idee. Vielleicht nochmal
derselbe Herr. Einfach die beiden großen zwei jetzt möglichen.
Genau, die beiden obersten multiplizieren, ne?
Dreimal sieben ist 21. So, und dann habe ich das
ausgerechnet. Also wenn das hier eine wohlgeformte Formel ist,
dann wird es am Ende immer so sein,
dass auf dem Stack genau eine Zahl draufsteht und die ist dann das Endergebnis.
Stimmt das denn? Das ist ja für mich als Mensch
einfacher, nachzuvollziehen, dreimal sieben ist er 21, genau.
Wir machen das selbe Beispiel nochmal für das Untore,
vielleicht machen wir dafür nochmal einen neuen Stack.
Eigentlich ist Quatsch, die 21 ist nicht so wertvoll,
dass ich sie mir behalten muss
Ja, ich sehe die eins, ich muss sie auf den Stack tun.
Ich sehe die zwei, ich muss sie auf den Sekt tun.
Ich sehe die drei, ich muss sie auf den Stack,
Drops, das ist keine drei. Einmal,
einmal heißt ja, guck dir die obersten beiden Elemente an,
Multipliziere und tu das Ergebnis auf den Stack.
Zweimal drei, ist sechs. So, ein Plus,
jetzt muss ich die obersten beiden addieren.
6 und 1 ist 7. So, dann muss ich eine
4 auf den Stack tun und dann muss ich addieren,
die obersten beiden.
4 und 7 ist 11. Stimmt das? 1 und 6
und 4 ist 11, kommt hin.
Wem ist das, was ich hier gerade vorgemacht habe, so halbwegs klar?
Okay, fast alles. Sehr gut. Dann gucke ich
doch mal, was das nächste auf der Agenda ist.
Java. Ja, schau mal, das habe ich
hier vergessen. Das hätte ich auch noch reintun müssen.
Jetzt gucken wir uns das mal in Java an.
Genau. Und ich habe hier schon eine relativ komplizierte Formel.
Aber das ist, glaube ich, nicht schlimm,
weil die Beispiele eben, die waren ja schon fast genauso kompliziert.
Was habe ich denn hier gemacht? Also,
ich bekomme zwei Punkte übergeben in einer Ebene.
Also der Punkt P. Und der Punkt Q. Und so
ein Punkt besteht aus einer X-Koordinate und einer Y-Koordinate.
Ich habe das jetzt nicht extra in eigene Klassen aufgeteilt oder so.
Ich wollte es einfach mal einfach machen.
Also wollen wir da vielleicht mal ein Beispiel uns klarmachen?
Ich starte nochmal hier kurz mein Grafikprogramm, dass man sich klar macht,
wie liegen diese Punkte in der Ebene und wie kann ich
dann irgendwie den Abstand zwischen den Punkten berechnen?
Das liegt ja der Funktionssammel Distance nahe, dass ich das
irgendwie machen will. So, jetzt kann ich mir hier wieder
meine Zeichenkünste spielen lassen, vielleicht nicht ganz so dick.
Oder vielleicht auch die Punkte kann ich ja schön dick machen.
Also wir haben irgendwie hier einen Punkt, weil der so wenig
besonders scharf, der Punkt, bauen wir immer schärfer.
Hier ist ein Punkt und sagen wir mal,
hier ist ein Punkt. Und die haben irgendwelche Koordinaten.
Jetzt kann ich da mal wieder Text einfach ranschreiben.
Ich habe keine Ahnung, wie groß der jetzt wird.
Welche Koordinaten nehmen wir mal? Vielleicht mal 10 und Zwölf?
Das ist jetzt halbwegs klar, dass das die Koordinaten zehn
und zwölf sind. Und das sollen vielleicht die Koordinaten,
ich hatte mir so schöne Beispiele überlegt, 13 und 16,
hatte ich, glaube ich, mir überlegt.
So, da kommen nämlich schöne Zahlen raus. Okay.
Und dann nehmen wir vielleicht jetzt mal eine andere Farbe,
dass das alles so ein bisschen bunter ist.
Dann schlagen wir so. So. Wie kann ich jetzt wissen,
wie weit diese Punkte voneinander entfernt sind?
Naja, ich könnte mir jetzt ja sozusagen vorstellen,
dass ich hier, oh, wieso kann ich nichts zeichnen?
Bin ich in der falschen Ebene? Oh,
jetzt habe ich schon wieder diese blöde Ebene
ein Werkzeug weggetan
Kann sich noch jemand erinnern,
dass ich mal das Problem hatte, auf Fenster?
Ja. Hier? Oh, ihr seid meine Rettung. Seht ihr,
ich bin immer noch in dieser Ebene und ich will ja
nicht hier machen, ich will auf dem Hintergrund malen.
So, ich hoffe, dass es jetzt funktioniert.
Puh, Glück gehabt. So, ich habe jetzt hier
quasi ein Dreieck. Oh Gott, jetzt muss ich,
ja. Okay, das soll also ein Dreieck sein.
Und das Schöne ist, ich weiß ja,
wie lang diese Linie ist,
wie lang ist denn die Linie?
Also das sind ja
jeweils die X-Koordinaten
Die Linie hätte dann ja quasi die Länge 3,
dann nehme ich vielleicht auch mal eine andere Farbe für vielleicht irgendwie.
Oder ich nehme mal schwarz. Die hat die Länge
3. Stimmt das? Ja, ne? Das ist jetzt
irgendwie nicht so wirklich realitätsgetreu, sehe ich gerade.
Und die hier hat die Länge 4. Ja,
vielleicht hätte ich es genau andersrum eigentlich machen sollen.
Egal. Okay, wie lang ist denn jetzt diese Linie?
Ja, 5, genau. Warum? Hast du
im Kopf ausgerechnet, was hast du denn da gerechnet?
Pytago war es, sehr schön. Du hast also gesagt,
3 Quadrat plus 4 Quadrat und dann die Wurzel,
Genau, also das wäre ja quasi 9 plus 16 ist 25 und dann ist die Wurzel 5. Ja,
und genau das macht das Programm auch,
das Programm muss also irgendwie ausrechnen, ja,
wie lang ist diese Linie, multiplizite mit sich selbst,
wie lang ist diese Linie, Multiplizise mit sich selbst,
addiere die beiden Ergebnisse unterm Ziel die Wurzel.
Ja, das wollen wir machen. Wer hat dieses Diagramm
verstanden? Okay, dann kommen wir jetzt zum Java.
Dann kann ich das, glaube ich, mal zumachen.
Ich speichere das einmal, ja, vielleicht will das ja
irgendjemand mal ausgedruckt und signiert von mir haben.
Glaube ich zwar nicht, aber gut.
So, und genau dasselbe passiert jetzt hier. Also,
nochmal für unser Beispiel, wir können uns da tatsächlich
mal ausführen
Ich will jetzt diesen Code ausführen,
dann schiebe ich den mal so nach unten.
Und sag jetzt mal hier an dieser Stelle, Pythagoras.distance.
Und jetzt stecke ich da genau diese Zahlen rein. Also,
können wir das noch ein bisschen weiter nach unten ziehen?
Ja. Was soll ich dafür zahlen? Zehn?
Zwölf? 13 und 16, Dankeschön. So, jetzt
dauert es ein bisschen fünf. Hat funktioniert. Okay,
was hat das denn jetzt mit Stacks und Postwicks-Notationen zu tun?
Ich will euch jetzt zeigen, wie Java das tatsächlich ausrechnet.
Dazu muss ich mal ein weiteres Terminal aufmachen
Habe ich hier, ist das hier irgendwo?
Ja, genau, bitte auch was. So,
jetzt müsste man was sehen. Gut. Und vielleicht brechne
ich das jetzt wirklich mal mit euch zusammen aus,
parallel in Excel oder so, dass ich wieder meinen Stack habe.
So. Wo ist mein Excel? Habe ich das schon zugemacht
? Nein. Ich brauche jetzt eigentlich nur den Stack,
den Rest brauche ich gar nicht.
Vielleicht schiebe ich es dann mal so nach hier.
So, dann sehe ich meinen Stack und mein Terminal
schiebe ich vielleicht mal so nach hier.
So. Okay, jetzt zeige ich euch mal,
wie die virtuelle Maschine arbeitet
Vielleicht, wenn ihr irgendwie mal eine Bachelorarbeit bei uns schreiben wollt,
könnt ihr vielleicht so einen Visualisierer bauen, der zeigt,
wie die Java Virtual, Virtual Machine arbeitet.
Ich glaube, sowas gibt es bisher gar nicht.
Aber das ist ja vielleicht noch ein bisschen her bei, hin bei euch.
Okay, dieser Befehl, der Java Virtual Machine sagt,
pack doch mal auf den Stack, den Parameter null.
Also quasi der Parameter, der hier als erstes in der Parameterliste steht.
Hallo, lieber Maus. Okay, man sieht ja den Namen nicht.
Also wissen Sie noch, das war das PX, ne?
Ich muss also in dieser Befehlsacht, pack doch mal
den Wert von PX oben auf den Stack drauf.
Ja, dann machen wir das doch mal.
Was war der Wert von PX? 10. So. Okay,
was sollen wir als nächstes machen?
Pack doch mal
den Parameter
Also PX ist null, PY ist 1,
QX ist 2. Welchen Wert hatte QX nochmal?
13. Dann kommt 13 auf den... Nicht hier,
falsches Fenster. Dann kommt 13 auf den Stack.
Und jetzt muss ich subtrahieren. Also ich schaue an,
was ist 10 minus 13. Das dürfte minus 3 sein.
Minus 3. Gut. Jetzt muss ich schon wieder
0 und 2 auf den Stack laden.
Das war 10 und 13. Und jetzt muss ich wieder subtrahieren.
Mache ich mir ein bisschen Arbeit, aber gut,
habe ich die minus 3 jetzt irgendwie zweimal ausgerechnet.
Und jetzt muss ich multiplizieren. Was ist minus
3 mal minus 3?
Neun. Sind wir so bis hierhin fortgeschritten. Und
jetzt soll ich mir das PY auf den Sack laden.
Das war in unserem Beispiel, danke,
12 und das ist dann 16. Sehr schön.
Und jetzt muss ich wieder subtrahieren. Das ist minus 4, ne?
Minus 4. Gut. Dann wieder die 12 auf den Stack laden,
die 16 auf den Stack laden, subtrahieren.
Er gibt wieder minus 4. Und da muss ich multiplizieren.
Minus 4 mal minus 4 ist 16. So. Okay,
dann muss ich addieren.
16 und 9 ist
Ersetzt das mal hier so direkt. Ja, jetzt wird der Float,
der das momentan noch ist, wird in einen Double umgewandelt.
Warum passiert das denn? Ich sage ja hier nirgendwo,
dass ich Floats and Doubles umrechnen würde.
Also alle meine Farameter sind ja vom Typ Float und
ich rechne hier so schön mit meinen Floats rum,
will jetzt aber eine Funktion aufrufen, die einen Double erwartet.
Und wir haben euch ja beigebracht, man kann an eine Funktion,
die einen Double erwartet, nicht nur Doubles übergeben,
sondern auch ins oder zum Beispiel auch Floats.
Und dann muss das eben entsprechend implizit umgewandelt werden.
Und diese Umwandlung, die hier implizit also unsichtbar ist,
die ist hier im echten Java-Byte sozusagen natürlich sichtbar,
weil es muss ja
gemacht werden
Also diese 25, die eigentlich eine 25.0 F bisher war, sozusagen.
Aus der wird jetzt eine 25.0. Okay, das macht dieses F2D.
Und dieses Invogue Static Nummer 2 ist einfach nur der Aufruf dieser,
ja, es wird spannend, ihr könnt es kaum noch erwarten, Furzelfunktion.
Wups, Wurzelfunktion. Ja, ich muss jetzt also,
von 25 die Worte bringen, das ist 5. So,
und dann sind wir fertig, dann können wir das Ergebnis zurückgeben. Ja,
ihr seht, also Java verwendet intern wirklich so ein Stack und die so einen normalen mathematischen Formel,
die ihr so schön hinschreiben könnt als Programmierer,
die so aussehen wie das, was ihr in der Schule gelernt habt,
also dass ihr die Operatoren zwischen die Operanten schreibt,
das wird vom Compiler umgewandelt in eine Form,
die so aussieht, erster Operant, zweiter Operant,
dann der Operator.
Das ist auch irgendwie logisch, weil zu dem Zeitpunkt,
wo Java subtrahieren soll, muss es ja wissen,
was sind denn die beiden Zahlen, die ich so trahieren soll?
Vorher kann die Subpression ja nicht stattfinden. Deswegen ist es
für Maschinen eine sehr natürliche Ausdrucksweise, diese Post-Track-Notation.
Jo. Okay. Ist das so halbwegs,
ist das so halbwegs, halbwegs klar geworden?
Ja. Doch, auch einigermaßen.
Gut. Okay
Ach so, ihr müsst mir jetzt keine Angst haben,
dass das in der Klausur drankommt, was ich hier heute mache.
Ich wollte das eigentlich machen und ich habe so viel Protest von meinen Mitarbeitern bekommen,
dass ich das leider wieder rausnehmen musste aus der Klausur.
Ja, also ihr könnt ganz entspannt angucken,
was ich hier mache, ohne Angst zu haben,
dass es in der Klausur da kommt.
Das müssen wir, glaube ich, nicht speichern.
Gut, dann mache ich Java mal zu und jetzt haben
wir noch so eine Viertelstunde vielleicht.
Jetzt wollte ich noch mit Carol was machen, genau.
Ich glaube, ich lösche jetzt mal diesen ganzen Kommentar.
Ich habe mich ja schon bedankt. Ich wollte nochmal quasi
ganz von vorne mit euch anfangen, mit Carols First Program.
Ja, könnte ich noch erinnern, was Carol da macht
Hat. Ja, das war das Lustige,
wo jedes zweite Empfehl MoV ist. Also Move forward,
Pick Peeper, Move forward, turn left move forward,
turn right, move forward, truppy, move forward.
Ich glaube, das war das. Da starte ich mal hier
meine eigene Lösung. Genau. So, und ich hatte
im Komsi so ein schönes PDF mit allen Shortcuts von Carol.
Ein oder zwei Shortcuts standen aber gar nicht drauf.
Und das will ich euch heute mal zeigen.
Ich habe den Shortcut extra so gelegt,
manche Studenten sind ja neugierig und probieren einfach alle Buchstaben,
dafür hast du Tor, also so irgendwie Q-W-E-E und so weiter.
Und wenn ihr Steuerung shift drückt und dann den letzten Buchstaben
in der letzten Reihe, weiß einer,
welcher das ist
Ganz rechts unten. Das ist das M. Also Steuerung Shift
M zeigt euch jetzt, was Carrell tatsächlich intern macht.
Also hier ist das Programm, was ihr geschrieben habt.
Und hier seht ihr jetzt ja quasi, Carrell ist so blöd,
der versteht keine geschweiften Klammern und Volt und so.
Ich weiß gar nicht, was das sein soll.
Der versteht nur ganz langweilige, einfache Sequenzen von, Entschuldigung,
Zahlen. Diese Zahlen, ja, diese Zahlen hier,
wo Code drüber steht, die sind tatsächlich in seinem kleinen Arbeitsspeicher abgelegt.
Vielleicht hat er nur 100 Byte oder so. Der kann
keine besonders großen Programme speichern. Deswegen muss dieser schöne,
lesbare Quelltext erstmal übersetzt werden in so eine Folge von Zahlen.
Also die Zahl 1 steht zum Beispiel Ich will dafür,
dass ein Schritt nach vorne gehen soll.
Die Zahl 5 steht dafür, dass ein Bieper aufnehmen soll.
Die 1 steht dafür, dass er einen Schritt nach vorne gehen soll.
Die 2 steht für Turn Left, die 4 für Ton Riot,
die 6 bedroppt und die 0 steht dafür,
dass das Programm jetzt zum Beispiel vorbei ist.
Das ist einfach nur eine ganz einfache Abbildung von diesen schönen,
englischen, lesbaren Begriffen auf eine Zahl.
Und diese Zahlen habe ich extra so gewählt, dass sie
den F-Tasten entsprechen. Also F1 ist quasi Moforward und F5
ist Pikpipa und deswegen habe ich hier mal dieselben Zahlen genommen,
dann ist es für Menschen leichter verständlich.
Und diese Zahlen, ja,
das ist einfach nur eine aufsteigende Sequenz, das ist quasi,
wo im Speicher steht denn jetzt dieser Befehl?
Das ist einfach wie eine Hausnummer in der Straße und das
wird einfach so hochgezählt. Werden wir dann noch sehen,
warum das spannend ist,
dass jeder Befehl so
eine Adresse hat
Ja, das ist so ein Feind. Das gucken wir
uns gleich an. Dann wird es nämlich richtig spannend.
Sehr gut, dass du das fragst. Okay,
wo haben wir denn mal zum ersten Mal den Fall,
dass wir eine Methode aufrufen?
Das war ja hier, ne? Erinnert sich noch jemand,
wie das ging? Da hatten wir doch irgendwie gesagt,
Carol muss sich nach rechts drehen, dann muss man U-Turn machen.
Dann steht er quasi hier, dann muss er den Bieber aufnehmen,
man muss dann noch einen U-Turn machen,
dann steht er wieder hier.
Und dann muss er, glaube ich, den Bieber droppen.
War das nicht irgendwie so? Genau,
aber U-Turn haben wir noch nicht programmiert,
das machen wir nochmal
ganz schnell
Oder auch nur ganz nette Normalwiederholung für die Klausur.
Also wenn hier steht, ein Schritt nach vorne, Turn läuft,
1, 2, 3, Turn live, so.
Das haben wir doch so schön in der ersten Woche zusammen programmiert.
Ich hoffe, ihr erinnert euch noch. Ich mache das einmal zu,
diesen Maschinenkott und schaue mal, ob das wirklich funktioniert,
bevor wir uns darum kümmern, was er dann intern macht.
Jo, das sieht doch nicht schlecht aus. Okay,
dann schauen wir uns mal an, wie das jetzt aussieht.
So, Turn right als erstes, das ist ja klar,
das ist ja ein ganz einfacher Befehl.
Er soll sich nach rechts drehen, das machen wir auch
mal.
So,
das ist jetzt neu
Call 106. Was könnte das denn bedeuten? Soll ich jetzt
auf meinem Handy 106 und mal gucken, ob jemand rangeht?
Oder was könnte das bedeuten? Call 106. Hat jemand so eine Intuition,
ja? Der Coach springt zur Stelle 106. Und 106,
wenn ihr mal hier schaut, ist quasi dieses You-Turn.
Ja, ich mache das jetzt einmal. Ich springe jetzt
anstelle 106. Und hier unten ist was ganz komisches passiert.
Kannst du euch jemand erklären, warum hier eine 101 steht?
Ja. Das ist der Aufbruchsdeck an der Kette,
nach dieser zweiten Staffelstelle, Sehr schön.
Also hier ist ein Stack und dieser 101 ist die Adresse
des Call-Befehls, der als letztes ausgeführt wurde.
Weil wir müssen uns ja irgendwie daran erinnern,
ihr erinnert euch vielleicht noch an Steuerungshift R.
Dieser rote Balken, den es in echt gar nicht gibt,
ist einfach nur diese Zahl 101. Ich muss mich daran erinnern,
dass ich ursprünglich mal von hier kam. Jo. Okay,
dann führen wir hier diese ganzen schönen einfachen Befehle aus.
Und jetzt dieser Return-Gefehl sagt, Carrie, Moment,
ich schaue mal auf meinem Stack, ob da was draufliegt.
Oh, da liegt ja was drauf. 1,01. Das bedeutet,
ich bin gerade in einem Hilfsbefehl und ich kam ursprünglich
mal von hier
Muss ich jetzt bei 1-0-1 anschließend weitermachen
oder woanders? Wäre das sinnvoll, wenn als nächstes
der Befehl 1-0-1 ausgefüllt wird?
Richtig, der Befehl nach 1-0-1. Also, zack.
Jetzt sind wir hier. Jetzt können wir den Beeper aufnehmen und
jetzt steht da wieder ein Call befehlt. Das heißt,
ich muss jetzt wieder an Adresse 106 springen,
aber auf dem Stack wird dann die 103 Lampen statt der
100-1. Weil wir ja jetzt von der Adresse 103 kamen zuletzt,
dann kann ich das wieder alles schön ausführen.
Jetzt müssen wir uns wieder erinnern, Moment,
von wo kamen wir? A, wir kamen von 103.
Das heißt, wir müssen bei 104 weitermachen
Jo. Und dann droppen wir den Beeper.
Jetzt steht ja wieder Return. Wir gucken jetzt,
Moment, sind wir in einem Hilfsbefehl?
Nee, es ist ja nichts mehr auf dem Stack drauf.
Das heißt, wir sind quasi in dem Hauptbefehl.
Dann kommen wir jetzt auf in das ganze Programm ist vorbei.
Zack. Ja. Also, Aufruf von eigenen Befehlen.
Dieser rote Balken, der für uns Programmierer recht veranschaulicht ist,
ist intern einfach nur eine einzige Zahl.
Und wenn man jetzt in Befehlen weitere untere Befehle aufruft,
dann wird sich das hier einfach so aufstapeln.
Also wenn du irgendwie zehn Befehle sich geschafft wird,
auch wohnen, wird das Stack immer größer.
Und am Ende kann er dann wieder so zusammenklang quasi.
Wem ist das so halbwegs klar,
wo uns Stack für Rücksprung hat das?
Oh, auch toll.
Das ist ja schön
Ja, mir wurde gesagt, das ist zu schwer für
eine Klausur, ja. Blöd. Okay,
und jetzt war ja schon die Frage nach dem IF.
Ich glaube, ich nehme jetzt gleich mal,
wo war denn das, wo man auch das oder brauchte?
War das nicht das hier? Ja, das Tolle ist,
ihr könnt euch auch den Code von dem Goal angucken.
Also wenn ihr irgendwo mal keine Idee habt,
wie man das lösen könnte, vielleicht hilft euch dann ja dieser Code weit,
aber ich glaube eher nicht.
Ja, erinnert euch noch daran, wollen wir das nochmal
zusammen programmieren?
Also, Teil The Floor
Wie hatte ich das gemacht? Wir machen noch mal kurz
ein Reset. Also ich hatte mir erst mal überlegt,
ich muss ja 100 Fliesen ablegen.
Also brauchen wir irgendeinen Repeat? Okay. Ja,
dann legen wir doch mal die erste Fliese ab.
Und ich muss auch auf jeden Fall nach vorne gehen,
sonst ich will ja nicht auf der Fliese draufbleiben,
aber ich kann nicht immer einfach so nach vorne gehen.
Ich würde es aber trotzdem einmal mit euch starten.
Der wird jetzt einfach in eine Wand reinlaufen, oder?
Ich starte es mal und dann wird er in eine Wand reinlaufen.
Und jetzt ist er in eine Wand reingelaufen.
Wir schauen uns mal an, wie der Maschinenkorb dafür aussieht,
ob wir den verstehen
Also, oh, was ist das denn? Push 064
, den Buffet kennen wir bis jetzt noch gar nicht.
Also, ich will etwas hundertmal wiederholen, hier steht hier Push 064.
Wo kommt denn jetzt diese 064 her? Das ist,
also, 100 ist doch eine größere Zahl eigentlich, oder?
Das ist Hex, richtig. Also, 4 plus 6
mal 16. Was ist 6 mal 16 und 96,
oder? Was ist 4 und 96 ist 100?
Kommt also genau hin. Push 064 heißt,
tue diesen Wert 064 auf den Stack drauf.
Push, habt ihr doch heute schon gehört bei Geo,
oder? Push heißt tue etwas auf den Stack drauf.
Das machen wir doch mal
Das heißt also, diese 6-4,
die ihr jetzt hier seht, ist quasi so eine Art Schleifenzähler,
der sich einfach merkt, wie viel muss ich noch tun.
Da wird es so langsam runtergezählt werden, werdet ihr gleich sehen.
Okay, dann droppen wir einen Biefer und gehen einen Schritt nach vorne.
Und das ist jetzt auch ein neuer Befehl, den ihr
noch nicht kennt. Dieser Befehl Loop schaut sich jetzt an,
ja, bin ich schon fertig oder nicht?
Ja, es sieht nicht so aus.
Also wenn das so ein Countdown ist wie an Silvester,
also wir haben noch nicht Mitternacht sozusagen.
Das heißt also, wir müssen jetzt aus der 64
eine 63 machen und dann zurückspringen an Adresse
101. Achtung, achtet drauf, hier wird jetzt eine 63
erscheinen und wir werden bei 101 weitermachen.
Genau das ist passiert, ja.
Also wir haben von 64 auf 63 runter erzählt,
weil wir jetzt einmal den Schlafenruf ausgeführt haben.
Wir müssen es jetzt noch 63 mal tun. Also dieser
Schleifenzähler sagt quasi hier, wie offen müssen wir es noch tun?
Okay. Jetzt würde ich also erwarten, dass unten eine 62 steht.
Zack, ich muss es noch 62 mal tun.
Zack, eine 61. Und jetzt lasse ich mir mal gegen die Wand laufen.
Jo. Okay. Wie kriege ich das denn jetzt hin,
dass er zumindest, ich sage mal so,
die erste Runde schafft und dann vielleicht hier irgendwie Blödsinn macht.
Aber dass er zumindest an diesen Wänden sich umdreht.
Da können wir doch ein If für nehmen, oder?
Also If, If front is clear? Nee, Entschuldigung.
FC? Nee, If not front is clear, ne?
So. Wenn du vor mir die Wand hast, drehe ich mich noch links.
Hm. Ja, wie könnt ihr das denn im Code,
im Maschinenkorb von Cara aussehen? Das ist jetzt bestimmt ziemlich spannend,
weil da ja Codeblöcke vielleicht übersprungen werden müssen oder so.
Das könnte ziemlich spannend werden. Schauen wir uns das mal an,
was da passiert. Also, wir tun wieder die 100,
die 100 auf den Stack hier in Hexalizimal schreibt,
also wir droppen ein Beeper.
So, und jetzt,
jetzt wird es interessant
Wir müssen gucken, ob vor uns frei ist.
Das macht dieser Befehl, F-C-L-R. Ist die Abkürzung für Front Clear.
Dieser Befehl Front Clear shot jetzt einfach tatsächlich, okay,
ist hier frei, oh, hier ist frei,
dann werde ich mal eine Eins auf den Stack tun.
Achte mal drauf, dass Hiels eine Eins auf dem Stack erscheint.
Diese Eins ist quasi der Bulian True. Ja, Eins
steht für True. Ja, vor mir ist frei.
So, jetzt ist hier so ein lustiger Befehl.
J1 MP
Das soll quasi Jump bedeuten, aber nur,
wenn eine Eins auf dem Stack ist,
springe, wenn eine Eins auf dem Stack ist.
Ich spreche das immer Gym aus, weil die Eins wie ein I aussieht.
Gym 105, also wenn eine Eins auf dem Stack ist,
dann springe an Adresse 105. Ansonsten würden wir jetzt einfach sequenziell
weitermachen. Ja, was muss ich denn jetzt,
also wird er jetzt als nächstes bei 104 oder bei 105 weitermachen?
Also stimmt das? Das ist eine Eins auf dem Stack
ist? Wir können mal eine Abstimmung machen.
Wer glaubt, dass er einfach bei 104 weitermachen wird?
Ich sehe jetzt, glaube ich, keine Hand.
Wer glaubt, dass er bei 105 weitermachen wird?
Ah ja, das ist doch die eindeutige Mehrheit.
Genau, weil es ist ja eine Eins oben auf dem
Stack.
Die wird jetzt so runtergenommen
Und wir machen bei 105 weiter. Wir haben also jetzt dafür gesorgt,
dass dieses Turnleft quasi übersprungen wird, weil wir wollen das
ja nicht ausführen, wenn vor uns frei ist.
Okay, dann machen wir einen Step und dann machen wir unser Loop.
So, und jetzt passiert wieder dasselbe. Für uns ist Freiheit,
das ist das, überspringe ich jetzt mal so ein bisschen.
Man muss hier deutlich mehr klicken als normalerweise.
So, okay. So, jetzt kommt ein spannender Punkt.
Wir prüfen wieder, ob vor uns frei ist.
Vor uns ist jetzt nicht frei. Bis jetzt haben wir
immer Einsen auf den Stack raufgetan. Was glaubt ihr,
was auf dem Stack landet, wenn jetzt nicht mehr vor mir frei ist?
Eine Null wahrscheinlich, ne? Also machen wir einen Step,
Achtung, hier ist die Neue, also quasi Falls,
wenn man so will
Gut. Jetzt steht hier, du musst an Adresse 105
springen, wenn eine Eins auf dem Stack ist.
Ist aber nicht der Fall. Das heißt,
wir ignorieren quasi diesen Sprungbefehl und machen einfach im Programm weiter.
Das heißt, wir führen jetzt dieses Turn Left aus.
Achtung, Keri dreht sich. Und jetzt geht es ganz normal weiter.
So wird das also quasi intern realisiert, dass,
wenn diese Bedingungen falsch ist, muss ich diesen Codeblock quasi überspringen.
Das ist dieser Jump-Befehl. Okay, schön. Das hat
jetzt noch nicht so wahnsinnig viel mit Post-Fix-Notation zu tun,
aber das Tolle ist, der wird ja gleich wieder aus irgendeinem Grund abstürzen.
Warum wird er
jetzt abstürzen
Das ist doof. Also unsere Bedingungen, ich mache den Code mal wieder zu.
Unsere Bedingung an der Stelle ist ein bisschen zu simpel.
Es reicht nicht, einfach nur zu prüfen,
ob vor uns eine Wand ist. Denn in diesem Fall,
als Carrie hier stand und nach Süden guckte,
hätten wir uns auch drehen müssen, weil ein Diamant vor uns war.
Wir brauchen es also eine kompliziertere Bedingung. Und ich mache das jetzt mal,
wenn es schön auf dem Bildschirm passieren oder rein.
Oder Beeper Ahead. Könnt ihr noch erinnern,
dass das so die Lösung war,
wenn von mir in der Wand ist, müsste ich mich drehen.
Wenn vor mir ein Diamant ist, muss ich mich aber auch drehen.
Also wenn mindestens eine dieser Bedingungen gilt, muss ich mich drehen.
Tja, wie wird das denn jetzt realisiert in Carries Sprache,
dass man auch verodern kann?
Und ich habe noch drei Minuten keine Sorge,
ich bin gleich durch
So, also wir müssen es hundertmal machen. Wir droppen den ersten Beeper.
Wir prüfen, ob es überhaupt für uns frei ist.
Bis hierhin sind das All or Command, das kennen wir schon.
Und jetzt kommt ein neuer Empfehl, quasi dieses Ausrufezeichen,
ja, entsprecht den Maschinenbefehl, not. Ich will also,
diese eins, die auf dem Stack ist, negieren,
dann wird aus der Eins, also eine Null.
Gut, dann prüfe ich, ob vor mir frei ist,
ist vor mir frei, Entschuldigung,
ob vor mir ein Beeper ist, ist vor mir ein Beeper,
nein, kommt noch eine neue auf den Stack.
Und dann verodere ich die obersten beiden Elemente,
die auf dem Stack sind.
Das ist so ähnlich wie eben mit der Addition oder der Multiplikation
, nur das ist jetzt
bulischer Algebar ist
Also wenn ich sage A oder B,
muss ich erst mal A ausrechnen,
dann muss ich B ausrechnen und dann muss ich diese Veroderung machen.
Ja, null oder null ist null.
Also muss ich nichts tun. Also wird er jetzt
hier in diesen trivialen Fällen immer null mit null verodern.
Das ist noch nicht so spannend. Und jetzt schauen wir mal,
was passiert. Wenn er hier an eine Wand kommt,
oh Gott, ich klicke mich hier wirklich zu Tode.
So, also Front ist clear, ist jetzt zum
ersten Mal Fouls und durch die Negierung wird es True.
Vor uns ist kein Beeper. Und jetzt müssen wir ausrechnen
, was ist denn True oder Fouls?
Frage an die buldischen Experten. Was ist True oder Fouls
Ja. True. Ja, also mindestens einer dieser Bedingungen
war wahr. Das heißt also, ich darf das
Turn Left nicht überspringen, sondern muss es ausführen.
Jo, jetzt höre ich nochmal bis zum letzten spannenden Punkt.
Der kommt ja dann hier unten. Zack. So,
also Front is clear, ja. Negierung Falts.
Und jetzt ist zum ersten Mal vor uns ein Bieper.
Dadurch entsteht jetzt diese eins. Was ist Falts oder True
? True. Und deswegen drehen wir uns jetzt hier.
Okay. Ja, das wollte ich einfach mal
als praktischen Anwendungsfall für die Postfix-Notation und Stacks machen.
Also das, was hier unten ist, ist tatsächlich ein Stack.
Er wird also verwendet für bulische Ausdrücke ausrechnen,
für den roten Balken und für die Repeach-Schleife.
Schönen Dank. Ich übergebe über Gebann Gedo und bedanke mich
bei euch auch, dass ihr immer so schön Bier wart
So, jetzt Last Orders. Es geht ganz harmlos los.
Es wird auch nicht wirklich schlimm. Gott sei Dank.
Ich habe dann heute im Studienbüro nochmal nachgefragt,
sag mal Leute, also das hier ist für mich erwartungskonform.
Hier oben ist das vom letzten Jahrgang.
Also Diplominformatiker gibt es jetzt keine mehr.
Bachelor sind
so knapp 30 Prozent
Und die restliche Verteilung, ja, passt schon.
Es ist einer, ja. Gut. Eine. Da
dachte ich, hey Leute, wir müssen jetzt mal hingucken.
Also wenn fast ein Drittel der Leute sonstige Fächer sind,
dass sie dann doch schon eine Größenordnung.
Da könnt ihr nicht mal nachgucken, ja, klar.
Also hier gibt es Tokologen. Gerade im Moment nicht.
Wer von ihnen studiert, gebärden, sprach,
Okay, Sie brauchen sich jetzt nicht zu outen.
Aber wenn das jemand von Ihnen studiert,
kommen Sie doch nach der Vorlesung noch mal kurz zu mir.
Ich habe da vielleicht einen Job für Sie.
Weil wir machen ein Forschungsprojekt, in dem wir
ein Stück Software für den Deutschunterricht von Gehörlosen entwickeln.
Und das sind Leute, die sowohl Gebärdensprache können als auch Java.
Das ist ein echt, das ist... So.
Ja, Fachsemester, das ist auch Erwartungskonform
Ein oder zwei ältere Semester sind auch dabei.
Ja, das war früher viel schlimmer. Nicht,
dass das schlimm ist, aber sagen wir mal so,
früher war das so mehr so anders verteilt.
Also wir hatten durchaus schon zwei, also hochgradig zweistellige Semesteranzahlen.
Hatten wir den Kindern nicht gesagt, sie sollen acht Stunden
pro Woche, hatten wir noch gesagt, oder?
Es gibt sogar bei Lecture to go.
Und wie viele Kinder haben
diesen Ratschlag befolgt
So ungefähr 30, 40 Prozent. Während 40 Prozent,
vier bis sechs Stunden gearbeitet haben. Und die sind ja toll.
Die schaffen den Stoff in weniger als zwei Stunden pro Woche.
Einer hat bei den positiven Kommentaren dazu geschrieben.
Also er findet Lecture to go ganz toll,
weil dann kann man die Vorlesung in der Hälfte der Zeit.
Es ist, finde ich, respektabel
Das ist vielleicht mal eine Idee. Wir kommen gar nicht mehr.
Wir lassen einfach den Film vom letzten Jahr in doppelter Geschwindigkeit
hier ablaufen. Sie haben nicht schon wieder eine Heilung,
es ist Zeit, sich einfach in unseren Asche zu konzentrieren.
Man sollte einfach nicht fragen. Man kriegt Antworten,
die man nicht hören möchte. Es ist so,
Regelmäßigkeit der Teilnahme, ja. Viele von ihnen
sind fast immer gekommen
Manche haben wirklich, also fand ich total süß, also schreibe,
ich war einmal krank und deswegen konnte ich nicht kommen und so.
Ja. Das fand ich herzerfrischend, ehrlich. So,
das ist der Grund, warum wir doch lieber ankreuzklausuren machen.
Die Sau klauen Spiegel ihrer Seelen. So,
hier oben das, also ich habe jetzt,
ich habe, das sind so ungefähr 30,
40 Seiten, durch die ich mich gekämpft habe.
Und ich habe mal versucht, also Pi mal Daumen,
also Repräsentative rauszuholen. Viele von Ihnen haben sowas geschrieben.
Informative und gleichzeitig unterhaltsame Vorlesung, sehr freundliche Atmosphäre.
Das freut mich besonders, dass Sie uns nicht als unfreundlich
empfinden, weil das entspricht auch unserer Selbsteinschätzung.
So, das, ich hätte allein drei Folien machen können,
so bei Kommentare positiv, Fred,
Fred,
Abgesehen davon, die letztes Semester hattest du noch viel,
Fred hat seine Haare schön. Das war,
das war, das ist dieses Semester kaum vorgekommen.
Ich schwöre, er hat seine Frisur nicht geändert.
Also es ist, es muss an ihnen liegen. Vorlesungen,
sehr gut strukturiert, Jobs, Übungen, sehr gut formulieren,
naja, leicht zu folgen, sehr gut organisiert und strukturiert,
Fred rockt sehr hilfreich, jawohl, Carol war gut,
das haben auch viele von ihnen
gesagt,
Live stream, yo, kurze Teilnehmerzahl, intensive Betreuung,
da kommen wir gleich bei den negativen Kommentaren und dann kommen wir da nochmal drauf zu sprechen.
Carol hier mal so geschrieben, Carol hat man auch viel gesehen,
macht Spaß und man lernt viel, so soll das sein.
Intensive Abnahme mit tiefgreifenden Fragen. Ich glaube, ich verstehe
, was damit gemeint ist. So, die Tatsache,
dass wir auf, das fand ich schön,
deswegen habe ich das extra nochmal auf so eine extra Folie.
Die Tatsache, dass die Aufgaben bekommen und die auch vorstellen müssen,
wäre, das ist ein bisschen Interpunktion oder sei es drum,
wäre das nicht so, hätte ich mich wahrscheinlich halb so doll angestrengt.
Ja, da sieht man mal, tja,
also früher als, also wir, sagen wir mal,
als ich studiert habe, also da waren Studenten ja Erwachsene,
brauchten keinen äußeren Druck, sind von mit,
wie heißt das so schön, intrinsisch motiviert,
während sie extrinsische Motivation brauchen,
Derjenige, der das geschrieben hat,
ich nehme halt zudessen Gunsten an, dass der betrunken war.
Die Vollschule, Professor und Fred und die Übungssneider.
Jo. Man kann das ja auch so zusammenfassen.
Das sollte nochmal so ein Wörterbuch nachgeguckt werden. Jo.
So, jetzt zu negativ. Das ist jetzt weniger lustig.
Zu wenige Betreuer. Das ist sehr häufig. Deswegen steht das
auch als oberstes da. Wir müssen also den Fachbereich sagen,
dass, ich meine, die kriegen das das ja auch diese Auswertung.
Und wenn man da mal so drüber guckt, das haben
wirklich sehr viele Leute gesagt, dass sie zu wenige Betreuer haben.
Und damit meinen sie natürlich den Übungsbetrieb. Und das ist
dann zum Teil sehr komplexe Aufgaben, die ohne wesentliche Hilfestellung,
schön adjektivisch verstärkt hier. Oder massive Vorarbeiten. Also so irgendwas,
wenn ich das jetzt lese und das vergleiche mit der Zeit,
die mindestens die Hälfte von ihnen nicht in dem Maße investiert haben,
in dem wir ihnen gesagt haben, sie es tun sollen.
Also das ist jetzt natürlich so, da ist jetzt so,
das ist die eine Aussage und das ist die andere Aussage und dass ich da jetzt einen Zusammenhang herstelle,
ist also meine Interpretation, aber so massive Vorarbeit,
ich erinnere mich, als ich im ersten Semester war,
wir haben von unserer Fachbereichsverwaltung, an der TU Berlin war das,
wir haben Nacht, Wochenend- und Feiertagsarbeitserlaubnisse ausgehändigt bekommen,
weil zu der Zeit war das noch nicht so mit Laptops und so,
sondern man musste an der Uni rechnen,
zum Rechnen hinkommen.
Und das meinten die ernst, mit Nacht Wochenend- und Feiertagsarbeitserlaubnis.
Wir sind da nämlich Tag und Nacht gewesen und am Wochenende
und haben da gearbeitet. Da wird das ganz still hier,
nicht? Naja. Haben wir. Ich schulde. So,
Carol, sehr anfängerfroh, ja, Entschuldigung, hier.
Echtes Skript, das, also das ist jetzt unser letzter Jahrgang,
den wir machen und wir machen kein Skript mehr.
Ich werde das an denjenigen weiterleiten, die das ab
nächsten Winter machen
Studierenden wünschen sich ein Skript. Carol, sehr anfängerfreundlich,
jedoch langweilig für fortgeschritten. Es tut mir leid. Also ich habe es
bei den positiven Kommentaren, habe ich das nicht hingeschrieben.
Viele haben positiv bemerkt, dass wir bei null anfangen.
Das haben wir einfach gemacht. Also wie hieß es?
Carol ist der große Gleichmacher. Das tut uns leid,
dass wir diejenigen langweilen, die sich schon mit Java vorher beschäftigt haben.
Hier dran, liebe Mathematik, Ticker und Mathematikerinnen.
Wir machen daran nichts. Also das ist,
also diese Vorlesungszeit zu ändern, glaube ich,
ist ein Ding der Unmöglichkeit. Das hängt mit so vielen,
sie kommen hier aus 20 Fachbereichen ungefähr, so, ja doch.
Und es gibt keine, es ist die Alternative,
wer Freitag 18 bis 20 oder so, irgendwie sowas.
Das will auch keiner von ihm. So, manchmal zu wenige Tutoren,
sehr stressig, alles in drei Stunden abnehmen zu lassen.
Das haben auch viele geschrieben. Das hängt halt damit zusammen,
dass wir zu wenig Leute haben bzw. sind.
Wir werden das an höheren Orte vortragen
Sagen wir noch. Ja, das geht auf unsere Kappe,
das ist das Tutorium, nicht zu Beginn des Semesters in Stine gestanden hat.
Das werden wir dann für das nächste Mal, werden wir das hoffentlich besser machen.
Also wir geben uns jedenfalls Mühe. Es sind Menschen,
die die Tutorien, die die Abnahmen durchführen.
Also ich habe den Abnehmenden gesagt,
es kommt mir durch, ich möchte das nicht lesen,
dass jemand unfreundlich gewesen ist, aber es sind halt Menschen.
Und da passieren halt schon mal so Sachen, Also die
von anderen als Unfreundlichkeit oder auch als Inkompetenz wahrgenommen wird.
Ich hoffe, wir haben insgesamt,
das sieht man jetzt gleich auch an den Zahlen,
also insgesamt haben sie schon den Eindruck,
dass es also alles mit rechten Dingen und auch einigermaßen fair und gut organisiert durchgeführt wurde.
So, jetzt noch, also jetzt sehen Sie mal diese Auswertung aus,
so aus unserer Perspektive, wie fandest du den Stoffumfang,
das zieht sich jetzt so durch.
Das ist eigentlich alles im grünen Bereich. So,
es scheinen also wenige von Ihnen sich vollkommen über- oder unterfordert gesehen zu haben,
das Niveau geht auch in die richtige Richtung.
Der Stoff wurde in der Hand von Beispielen,
das stimmt also auch im Großen und Ganzen.
Wir haben die Bedeutung der behandelten Themen vermittelt. Gut. Dass wir klar strukturiert sind,
haben wir sowohl auf den handschriftlichen Kommentaren,
also aber auch die Mehrheit von Ihnen, also hat uns hier positiv beurteilt,
sodass es nicht vollkommen langweilig gewesen ist, sieht man hier.
Sie wissen gar nicht, wie wichtig diese Veranstaltung.
Für ihr Studium ist trotzdem, haben sie das Richtige angekreuzt.
Welche Verbesserungsvorschläge hast du für die Veranstaltung? Ich habe nur
den ersten hier genommen, der gleich da drunter stand im PDF.
Ansonsten gibt es eine Reihe von konstruktiven Verbesserungsvorschlägen, die vor allem,
also den Übungsbetrieb betreffen und das werden wir insbesondere dann auch mit Christian Späh,
werden wir das, also wir werden das rückkoppeln.
So, zu uns interessant und lebendig,
so sollte ich noch sagen, es gibt Menschen unter ihnen,
die mir einen trockenen Humor attestiert haben.
Habe ich schon mal gehört. Tell me something, I
don't know. Aber trotzdem vielen Dank, ja. So,
dass ich sie ermutigt habe, mir Fragen zu stellen,
kann ich mich nicht daran erinnern.
Das bezieht sich wohl auf Fred. Ja, das ist
ja das schlechteste Arbeitszeugnis, das man überhaupt kriegen kann.
War stets bemüht, eine gute Veranstaltung zu halten. Ja,
wobei ich immer denke, wieso ist das so ein schlechtes Arbeitszeugnis?
Also warum hat das so einen schlechten Ruf?
Weil was kann ich denn mehr tun,
als mich stets bemühen
Ich habe mir, dass man damit sagen will,
bei einem Arbeitszeugnis, er hat es zwar versucht,
aber er hat es nicht geschafft, es steht ja auf einem anderen Blatt.
So, ja, hier drüber habe ich mich dann gefreut,
jetzt important to to be nice,
but it's nice to be important, nee, umgekehrt,
it's nice to be important,
but it's more important to be nice.
Ja, wir versuchen ihn mit einem Lächeln im Gesicht,
diesen ganzen Inhalte nachzu, nachvollziehbar zu machen.
Ja, da hatten wir schon was zu gesagt.
Die Frage ist ja, interessant gestellt, wurde die Übungszeit
häufig unangenehm überschritten. Viele von innen nein gesagt.
Wie beurteilst du deinen Zeitaufwand für die Übung? Oh,
geht eigentlich, oder? So im Großen und Ganzen,
so in eine leichte Tendenz, dass es zu viel ist.
Aber da täuschen sie sich. Da täuschen sie sich.
Das ist ja Wahrheit, ist keine Frage von Mehrheit.
Das ist einfach falsch
So, ja, ich meine, da kann man nicht viel dran machen.
Das ist, stehen die Aufgabenblätter jeweils rechtzeitig zur Verfügung. Im Übrigen,
ja, das hat keiner gefragt, aber ich bin,
ich danke meinen Schutzengeln, dass sie es mir ermöglicht haben,
die Vorlesung jeweils einen Tag vor,
bevor ich sie halte, ins Komsi zu stellen.
Das ist mir durchgängig gelungen. Hast du gut gemacht und
vielen Dank, liebe Schutzengel, dass das alles geklappt hat.
Die Übungen passen zeitlich sehr gut zur Vorlesung. Ja,
das stimmt, weil, also das ist,
also das geht bei uns so
Montags schicke ich Fred, die Folien für Mittwoch und sage,
guckst du bitte mal, passt das?
Und Fred hat den Auftrag von Christian zu überwachen,
dass ich nicht irgendwas erzähle, was nicht zur Übung passt.
Und das ist denen gut gelungen. Also da gibt es
immer noch so eine Rückkopplung, so eine Rückkopplung drüber,
das haben wir auch hingekriegt.
So, kurz noch so das,
was so bei Mr. Liniens von ihnen so angegeben wurde,
lerne ich viel in der Veranstaltung.
Bitte, bitte,
mein Wissensstand ist nach der Veranstaltung
Schön, mir ist jetzt auch wesentlich höher als vorher,
passt auch schon. Der Besuch der Veranstaltung lohnt sich.
Also ich bitte Sie, wenn das hier ehrlich gemeint ist,
Sie haben ja keinen Grund zu lügen an der Stelle,
empfehlen Sie uns weiter.
Dass wir auch weiterhin so viele Menschen haben. So,
die zusammenfassende Zusammenfassung, alles in einer Note,
ich habe das mal ausgerechnet, da kommt irgendwas,
1,8, kommt als Durchschnitt raus.
Hier oben habe ich das Ergebnis,
der zusammenfassende Zusammenfassung aus SE2 vom letzten Semester.
Wenn man da mal hinguckt,
das ist fast identisch,
das Ergebnis
Zufall. Vielleicht haben wir unser VPO, aber da weiß ich jetzt nicht.
Wir beobachten das nächste Semester nochmal. Wir strengen uns weiter
an. Wir bemühen uns. So, liebe Kinder.
15.44 Uhr. Schönes Wochenende. Lernen Sie viel. Ich
drücke Ihnen alle Daumen, die ich habe für die Klausur.
Ich hoffe, dass ich Sie wohl behalten in SE2-Wiedersehe.