WEBVTT
00:00:01.011 --> 00:00:08.508
So herzlich Willkommen zur Informatik Vorlesung. Ja, mein Name ist Felix Friedrich,
ich werde Ihnen
00:00:08.508 --> 00:00:15.779
gemeinsam mit Ralf Sass und meinen Kollegen hier vorne, wir werden gemeinsam den
Kurs Informatik
00:00:15.779 --> 00:00:23.201
gestalten und ja worum es da geht, werden wir jetzt dann gleich noch eruieren.
Vielleicht ein Wort
00:00:23.201 --> 00:00:25.171
vorweg, Wir haben ja hier.
00:00:26.371 --> 00:00:32.366
Nach den Programmiererfahrungen gefragt Programmiererfahrung ist nicht notwendig
für diesen Kurs.
00:00:32.366 --> 00:00:37.496
Also wir machen eigentlich alles From Scratch, Wir fangen ganz vorne an, das heißt,
00:00:37.496 --> 00:00:43.553
Programmiererfahrung ist sicher nützlich, aber sie brauchen die grundsätzlich
eigentlich nicht, um
00:00:43.553 --> 00:00:49.364
den Kurs bestehen zu können. Manchmal ist es vielleicht sogar besser, wenn man
Sachen ganz neu
00:00:49.364 --> 00:00:51.651
lernen kann, also das als vielleicht.
00:00:52.371 --> 00:00:56.795
Ermutigende Worte für diejenigen, die jetzt ein bisschen fürchten, oh, ich habe
noch nie
00:00:56.795 --> 00:01:01.773
programmiert. Wobei das bei Rechnergestützten Wissenschaften wahrscheinlich gar
nicht so wahnsinnig
00:01:01.773 --> 00:01:06.651
viele sind, aber auch da, ja, sie können das alles ganz neu lernen, bevor wir über
administrative
00:01:06.651 --> 00:01:11.478
Dinge sprechen, möchte ich gleich ein bisschen in die Thematik der Einführung der
der Informatik
00:01:11.478 --> 00:01:16.455
reingehen, das heißt, wir machen eine kleine Einführung, wir sprechen ein bisschen
über Informatik,
00:01:16.455 --> 00:01:20.931
ein bisschen über die Geschichte, ganz, ganz wenig, ich bin da überhaupt kein
Spezialist.
00:01:23.011 --> 00:01:27.911
Und wir werden dann später im zweiten Teil heute auch noch über das Programmieren
sprechen
00:01:27.911 --> 00:01:33.248
beziehungsweise werden, sondern auch schon anfangen, ein bisschen hands on zu
programmieren. Bevor
00:01:33.248 --> 00:01:38.585
wir aber starten, möchte ich sie gleich selber was fragen, wir machen das so
indirekt über momenti
00:01:38.585 --> 00:01:43.758
Frage und zwar möchte ich gern die Frage beantwortet haben, was ist denn eigentlich
Informatik,
00:01:43.758 --> 00:01:49.094
also wir versuchen mal eine Begriffsbildung zu machen von dem was sie hier in der
Vorlesung in der
00:01:49.094 --> 00:01:51.491
Vorlesungsreihe sehen werden, das heißt wir.
00:01:51.651 --> 00:01:56.479
Auf der nächsten Menti Frage können Sie dann mal beantworten. Was glauben Sie
eigentlich, was ist
00:01:56.479 --> 00:02:01.407
Informatik? Versuchen sie mal entweder eine Definition oder einfach zu schreiben,
was macht man mit
00:02:01.407 --> 00:02:05.987
der Informatik, was macht man in der Informatik, also irgendwelche Stichworte, die
Ihnen zur
00:02:05.987 --> 00:02:09.571
Informatik einfallen, die können wir ja mal jetzt hier zusammen sammeln.
00:02:17.731 --> 00:02:23.786
Ok, befehlsketten sehen wir da genau. Also eine Folge von Befehlen, das werden wir
sehen, das ist
00:02:23.786 --> 00:02:29.341
tatsächlich der Fall. Die Wissenschaft von Informationsverarbeitung, es geht
irgendwie um
00:02:29.341 --> 00:02:34.897
Informationen, Digital Manumbulation of Data genau, also digitale Manipulation der
Daten,
00:02:34.897 --> 00:02:40.765
Kommunikation mit Computern, Ideen zum Maschinencode übersetzen, Algorithmen genau
Algorithmen
00:02:40.765 --> 00:02:42.451
braucht man sicherlich und.
00:02:42.491 --> 00:02:48.163
Um letztendlich Informatik betreiben zu können. Das ist ein ganz wichtiger Teil der
Informatik
00:02:48.163 --> 00:02:54.017
Logik, braucht man sicher auch Datenstrukturen, genau Datenstrukturen und
Algorithmen. Es gibt da
00:02:54.017 --> 00:02:59.991
eine Vorlesung im zweiten Semester, die insbesondere für sie als Studierende der
Rechnergeschützten
00:02:59.991 --> 00:03:05.845
Wissenschaften auch angeboten wird beziehungsweise die sie eben auch machen müssen.
Die Mentatory
00:03:05.845 --> 00:03:06.811
ist für sie die.
00:03:07.371 --> 00:03:13.856
Transistoren ja, Transistoren braucht man letztendlich für die Informatik zur
Ausführung, aber
00:03:13.856 --> 00:03:20.479
Informatik kann man quasi ohne Hardware betreiben, von daher sind Transistoren
klar, man braucht
00:03:20.479 --> 00:03:27.033
sie, aber man kann es eben auch ohne programmieren, Prozesse in eine logische
Abfolge gliedern,
00:03:27.033 --> 00:03:33.726
genau, also irgendwie programmieren ist ja sowas, Automatisierung genau
Automatisierung geistiger
00:03:33.726 --> 00:03:35.451
Tätigkeiten, ja da haben.
00:03:36.131 --> 00:03:41.430
Haben Sie schon mal auf die Folien geschaut? Vielleicht, oder Sie haben es in den
00:03:41.430 --> 00:03:47.908
Studieninformationstagen gehört, dort habe ich die Definition ja auch schon mal
gebracht, falls sie
00:03:47.908 --> 00:03:54.189
da bei den Informatik Tagen waren. Außerdem ist es auch eine recht gängige
Definition, fällt dir
00:03:54.189 --> 00:04:00.601
noch was ein, also was, wenn wir das so ein bisschen versuchen zu zu gliedern was
sie hier auf der
00:04:00.601 --> 00:04:05.771
was wir jetzt hier auf der Folie haben, dann haben wir auf der einen Seite die.
00:04:06.091 --> 00:04:11.940
Dinge, die sehr hands on sind. Also wir haben sowas wie ja zum Beispiel
Transistoren, also Dinge,
00:04:11.940 --> 00:04:17.427
die zur Implementation von von Informatik irgendwie notwendig sind. Wir haben Dinge
wie wie
00:04:17.427 --> 00:04:23.095
programmieren, wir haben Automatisierung, wir haben Ideen, übersetzen also Dinge,
die man, die
00:04:23.095 --> 00:04:26.171
eigentlich so ein bisschen ins Engineering gehören.
00:04:26.611 --> 00:04:32.235
Und wir haben auf der anderen Seite aber auch Grundlagen, also Dinge aus einer
00:04:32.235 --> 00:04:38.797
Grundlagenwissenschaft, also Wissenschaft von Informationsverarbeitung. Was ist
Information
00:04:38.797 --> 00:04:45.720
überhaupt, Algorithmen und Datenstrukturen, Logik also Sie sehen die Informatik,
die Definition,
00:04:45.720 --> 00:04:52.571
die eine, die wir gerade gelesen haben, gefällt mir, die haben wir hier auf den
Folien ja auch.
00:04:53.051 --> 00:04:58.863
Die Informatik beschäftigt sich mit der Automatisierung geistiger Tätigkeiten und
ist letztendlich
00:04:58.863 --> 00:05:04.497
im Spannungsfeld zwischen eben einerseits einer Grundlagenwissenschaft, also es
geht einerseits
00:05:04.497 --> 00:05:10.251
sicherlich um Grundlagen und auf der anderen Seite ist sie aber auch eine
Ingenieurswissenschaft.
00:05:17.011 --> 00:05:21.708
In diesem Spannungsfeld befinden wir uns in der Informatik. Das macht die
Informatik sicherlich auch
00:05:21.708 --> 00:05:26.358
so vielseitig, dass man sich eben einerseits mit wirklich mit Grundlagen
beschäftigt und sehr viele
00:05:26.358 --> 00:05:30.914
Grundlagenfragen sind auch heute noch nicht vollständig beantwortet und auf der
anderen Seite ist
00:05:30.914 --> 00:05:35.564
es eben auch in Ingenieurswissenschaft, also da geht es auch um Best Practices, es
geht um Software
00:05:35.564 --> 00:05:39.932
Engineering, es geht um das Bauen von Programmen, und in dieser Vorlesung hier
werden wir uns
00:05:39.932 --> 00:05:44.536
wahrscheinlich so ungefähr hier befinden, also so eher auf der
ingenieurswissenschaftlichen Seite,
00:05:44.536 --> 00:05:44.771
also.
00:05:45.171 --> 00:05:50.609
Während in der Algorithmen und Datenstrukturen Vorlesung, befinden wir uns
vielleicht eher hier,
00:05:50.609 --> 00:05:56.218
also auf diesem, in diesem Kontinuum. Also das ist ungefähr, was sie sich
vorzustellen haben, worum
00:05:56.218 --> 00:06:01.770
es jetzt in dieser Vorlesungsreihe letztlich gehen soll, aber wir sprechen
natürlich auch noch ein
00:06:01.770 --> 00:06:07.152
bisschen genauer darüber, ja, worum geht es, es geht letztendlich in dieser
Vorlesungsreihe, in
00:06:07.152 --> 00:06:12.761
diesem Kurs darum, systematisch Probleme zu lösen mit Algorithmen und der
Programmiersprache C plus
00:06:12.761 --> 00:06:14.291
plus, es handelt sich also.
00:06:15.011 --> 00:06:21.905
Zwar nicht nur, aber sicherlich auch und zu großen Teilen auch um den
Programmierkurs. Es geht
00:06:21.905 --> 00:06:28.434
darum, theoretisch und praktische Aspekte zu zu beleuchten. Wir wollen letztendlich
keine
00:06:28.434 --> 00:06:35.622
Hackerqualitäten, wir wollen sie weder ausbilden noch noch fördern wir, wir wollen
aber auch keine
00:06:35.622 --> 00:06:42.737
Theorie im Elfenbeinturm, also es geht letztendlich darum, dass sie, dass sie, dass
sie von Grund
00:06:42.737 --> 00:06:44.131
auf in Verständnis.
00:06:44.371 --> 00:06:50.265
Gewinnen dafür, wie man qualitativ hochwertige und differenziert programmieren
kann. Naja und warum,
00:06:50.265 --> 00:06:56.042
warum braucht man dafür programmieren? Da kann man ganz viele verschiedene
Antworten geben und ich
00:06:56.042 --> 00:07:01.524
glaube, das ist heutzutage relativ klar, deswegen werde ich mich damit nicht lange
aufhalten,
00:07:01.524 --> 00:07:07.360
Computer und Software sind halt heute einfach allgegenwärtig, klar, programmieren
ist einfach eine,
00:07:07.360 --> 00:07:11.251
das ist eine Kulturtechnik die die jeder mal gelernt haben sollte.
00:07:11.891 --> 00:07:18.751
Es gibt an der ETH dazu auch hinter den Kulissen sozusagen ein Projekt, das sich
Competational
00:07:18.751 --> 00:07:25.831
Competencies oder Third pillar oder wie auch immer nennt, wo es eben darum geht,
dass wirklich in
00:07:25.831 --> 00:07:32.838
allen Studiengängen auch programmieren und die Einsicht in die Informatik gefördert
werden soll.
00:07:32.838 --> 00:07:38.531
Okay fangen wir doch mal vorne an, bei dem bei dem Kernbegriff der Informatik.
00:07:40.051 --> 00:07:46.788
Was ist der Kernbegriff der Informatik? Den haben einer einer oder eine von ihnen
schon angegeben,
00:07:46.788 --> 00:07:53.457
eben auf der, auf der in der Menti Frage, nämlich der Begriff des Algorithmus, das
ist sicherlich
00:07:53.457 --> 00:07:59.919
der Kernbegriff der Informatik, der ist sehr alt, dieser Kernbegriff, und
letztendlich ist ein
00:07:59.919 --> 00:08:06.451
Algorithmus nichts anderes als eine Handlungsanweisung zur schrittweisen Lösung
eines Problems.
00:08:06.931 --> 00:08:14.295
Also der Name Algorithmus kommt nicht irgendwie von Algos und Rhythmus oder
Irgendsowas aus dem
00:08:14.295 --> 00:08:21.427
griechischen, sondern das ist tatsächlich eine Transkription des Namens Algorithmi,
also von
00:08:21.427 --> 00:08:28.404
Muhammad Alcharismo. Ich lese hier mal vor, der hat letztendlich ein Rechenlehrbuch
um 825
00:08:28.404 --> 00:08:34.451
geschrieben und nach dessen Namen ist der Begriff Algorithmus gebildet worden.
00:08:35.411 --> 00:08:41.512
Ja gut, diese Handlungsanweisung für schrittweise und Lösung eines Problems, die
muss so gestaltet
00:08:41.512 --> 00:08:47.427
sein, dass die Ausführung eigentlich keine Intelligenz erfordert, sondern nur
Genauigkeit. Also
00:08:47.427 --> 00:08:53.280
Computer können sowas, wenn Sie an den Alltag denken, haben bestimmt viele von
ihnen schon mal
00:08:53.280 --> 00:08:59.319
gehört, wir versuchen es trotzdem mal zu fragen, was ist denn ein Alltagsbeispiel
für den Begriff
00:08:59.319 --> 00:09:03.491
Algorithmus, was machen sie im Alltag, was einem Algorithmus folgt.
00:09:05.811 --> 00:09:11.219
Rezept ein kochrezept genau das ist der Klassiker und ich finde ihn sehr gut. Ich
finde es eine sehr
00:09:11.219 --> 00:09:15.979
gute Analogie. Das Kochrezept ist, beschreibt Algorithmen, natürlich muss man als
Mensch
00:09:15.979 --> 00:09:21.279
einigermaßen intelligent sein, um kochen zu können, also sie müssen wissen, wie man
einen Topf auf
00:09:21.279 --> 00:09:26.634
den auf den Herd stellt und so, das sind sozusagen die Minimalanforderungen, die
dieser Algorithmus
00:09:26.634 --> 00:09:26.851
hat.
00:09:27.491 --> 00:09:32.643
Aber wenn sie das mal können, wenn Sie wissen, wie man einen Topf auf den, wie man
wie man das
00:09:32.643 --> 00:09:37.631
Wasser kocht, wie man Nudeln in das Wasser rein tut und so, dann dann dann können
sie einem
00:09:37.631 --> 00:09:43.002
Kochrezept letztendlich folgen. Und wenn Sie das, wenn das Kochrezept genau genug
geschrieben ist,
00:09:43.002 --> 00:09:47.990
dann führt es in aller Regel auch zu einem Erfolg. Klar, also beim Kochen gibt es
auch noch
00:09:47.990 --> 00:09:53.033
Kunstfertigkeiten, die dann dazu kommen, also es gibt so Feinheiten, wo dann der
Begriff des
00:09:53.033 --> 00:09:55.171
Algorithmus hier nicht so genau greift.
00:09:55.731 --> 00:10:02.482
Weil es, weil es eben nicht ganz so digital ist, wie ich mir das gerade vorgestellt
habe. Aber
00:10:02.482 --> 00:10:09.305
letztlich ja ist. Ist eben, ist eben so ein ein Rezept, wirklich eine ganz gute,
eine ganz gute
00:10:09.305 --> 00:10:15.051
Beschreibung für den Begriff Algorithmus, also kochrezept, Handlungsanweisungen.
00:10:15.131 --> 00:10:22.910
Könnte man in allen möglichen Bereichen machen. Jetzt gibt es einen wirklich sehr
alten Algorithmus,
00:10:22.910 --> 00:10:30.613
wir nennen den ältesten nicht trivialen Algorithmus, wobei die Frage nach
Trivialität ist natürlich
00:10:30.613 --> 00:10:37.692
schon gegeben, also das Multiplizieren von 2 Zahlen zum Beispiel ist ja an sich
schon keine
00:10:37.692 --> 00:10:39.171
triviale Operation.
00:10:39.731 --> 00:10:45.951
Aber die bezeichnen wir jetzt mal. Wir sagen mal multiplizieren und dividieren und
addieren und so
00:10:45.951 --> 00:10:52.235
das das können wir irgendwie, das betrachten wir mal als trivial. Wir werden das
Wort trivial nicht
00:10:52.235 --> 00:10:58.391
oft verwenden in der Vorlesung, aber an der Stelle, vielleicht kennen sie einen
oder kennt jemand
00:10:58.391 --> 00:11:04.294
von ihnen den ältesten in diesem Sinne nicht trivialen Algorithmus? Ja genau, der
euklidische
00:11:04.294 --> 00:11:08.611
Algorithmus aus euklids Elementen, drittes Jahrhundert vor Christus.
00:11:09.571 --> 00:11:15.712
Hat Euklid einen Mechanismus gefunden, um letztendlich den größten gemeinsamen
Teiler von 2 Zahlen
00:11:15.712 --> 00:11:21.792
zu bestimmen und er hat das in erster Linie geometrisch gemacht. Also er hat
eigentlich mit einem
00:11:21.792 --> 00:11:27.746
geometrischen Mechanismus angefangen und ich mache das mal relativ frei, auch wenn
er das nicht
00:11:27.746 --> 00:11:33.825
ganz genau so gesagt hat, aber sie können sich vorstellen, wir haben irgendwie 2
Säulen, also wir
00:11:33.825 --> 00:11:38.651
wollen irgendwie einen Tempel bauen und der soll aus aus Säulen bestehen und.
00:11:38.771 --> 00:11:44.867
Und wir versuchen jetzt, eine Säule zu finden, eine Säulengröße zu finden, mit der
wir beide
00:11:44.867 --> 00:11:51.163
Säulenhöhen irgendwie beide Säulenhöhen zusammenbauen können. Also was brauche ich,
ich brauche
00:11:51.163 --> 00:11:57.657
irgendwie eine Unterteilung dieser Säulen, die so funktioniert, dass sie die beiden
Säulen eben so
00:11:57.657 --> 00:12:04.218
Ebenmäßig aufteilt, sodass ich zum Schluss, jetzt habe ich das einigermaßen clever
gezeichnet, dass
00:12:04.218 --> 00:12:07.731
ich zum Schluss eben eine Unterteilung gefunden habe.
00:12:08.371 --> 00:12:14.131
Und was will ich von dieser Unterteilung noch? Ich will, dass sie möglichst grob
ist, also mit einer
00:12:14.131 --> 00:12:19.777
feinen Unterteilung kriegen sie das meistens hin, sie könnten ja sagen, ich habe
irgendwie 2 Meter
00:12:19.777 --> 00:12:25.422
und 3 Meter, dann können sie natürlich in Zentimetern genau vorgehen, aber wenn sie
hören, 2 und 3
00:12:25.422 --> 00:12:30.895
Meter, dann wissen sie schon, ein Meter würde genügen, um um um das möglichst grob
aufzuteilen,
00:12:30.895 --> 00:12:36.598
also ein ein Meter großes Stück, und was Euklid letztendlich gefunden hat, ist,
dass man eben, wenn
00:12:36.598 --> 00:12:38.211
man 2 solche Blöcke hat und.
00:12:38.291 --> 00:12:44.094
Dass man nur den kleineren vom größeren abziehen muss, gewissermaßen. Und dann die
Frage neu
00:12:44.094 --> 00:12:50.088
beantworten muss. Also ich nehme einfach das, was ich auf den Folien habe hier
direkt, also ich
00:12:50.088 --> 00:12:56.207
gebe 2 ganze zahlen ein oder eben 22 Höhen a und b. Und jetzt? Jetzt kommt der
eigentliche Trick,
00:12:56.207 --> 00:13:02.327
der eigentliche Trick ist, dass man die kürzere Strecke von der von der längeren
Strecke abziehen
00:13:02.327 --> 00:13:08.131
kann, also man zieht jetzt von A einfach das B ab oder man verkürzt A um B
entsprechend und.
00:13:08.291 --> 00:13:14.312
Und kommt zu einem neuen Problem. Sie sehen jetzt hier, das neue Problem ist wieder
A und B, wobei
00:13:14.312 --> 00:13:20.088
sich A verkürzt hat auf auf eine kürzere auf die um B verkürzte Länge okay und
jetzt haben wir
00:13:20.088 --> 00:13:25.741
wieder ein Stück ein längeres und ein kürzeres Stück und jetzt können wir wieder
das kürzere
00:13:25.741 --> 00:13:31.763
Entschuldigung das kürzere vom längeren abziehen ja und kommen wieder zu einem
Problem jetzt haben
00:13:31.763 --> 00:13:34.651
wir wieder ein größeres und kürzeres Stück und.
00:13:34.691 --> 00:13:40.177
Und das jetzt machen wir das Problem, jetzt machen wir es wieder genauso. Wir
ziehen wieder das
00:13:40.177 --> 00:13:45.375
kleinere Stück vom größeren ab, das heißt also, wir ziehen von der Länge B die
Länge A ab,
00:13:45.375 --> 00:13:50.919
schneiden die oben ab und kommen wieder zum zum gleichen Problem und sie sehen, das
Problem wird
00:13:50.919 --> 00:13:56.291
irgendwie immer kleiner, also visuell schon kleiner. Tatsächlich passiert es eben
irgendwann.
00:13:56.971 --> 00:14:02.952
Und das kann man, kann man auch beweisen, dass die beiden Längen gleich groß werden
und zumindest
00:14:02.952 --> 00:14:08.996
dann, wenn man ganze zahlen hat oder oder rationale Zahlen, dann passiert das also
irgendwann sind
00:14:08.996 --> 00:14:14.792
dann diese beiden, diese beiden Längen gleich lang und dann weiß man, dass diese
beiden Längen
00:14:14.792 --> 00:14:20.466
tatsächlich sowohl die ursprüngliche längste Länge als auch die ursprüngliche,
kürzere Länge
00:14:20.466 --> 00:14:25.091
ebenmäßig teilen und dass sie noch dazu der größte gemeinsamen Teiler sind.
00:14:28.451 --> 00:14:34.291
Also übrigens zum zum, zum eigentlichen Teilen was man da macht, wenn man die
kürzere Strecke von
00:14:34.291 --> 00:14:40.011
der größeren abzieht. Und wenn jetzt die eine Strecke viel viel länger ist als die
andere, dann
00:14:40.011 --> 00:14:45.551
sehen sie, ich ziehe die eine immer wieder ab, bis bis die erste Strecke kleiner
ist als die
00:14:45.551 --> 00:14:51.091
zweite, dann habe ich irgendwie sowas gemacht wie eine Division der Gesamtstrecke
durch die.
00:14:51.891 --> 00:14:57.479
Durch die durch die andere Strecke und haben mir dann den Rest quasi
aufgeschrieben. Der Rest ist
00:14:57.479 --> 00:15:02.894
dann das was übrig bleibt, also das hier dieses Rote hier ist der Rest der Division
von diesem
00:15:02.894 --> 00:15:08.310
Roten durch das Blaue also das da kommt dann da kommt jetzt dann der Link zum zum
eigentlichen
00:15:08.310 --> 00:15:13.783
Euklischen Algorithmus, also zum größten gemeinsamen Teiler, wir brauchen den
Algorithmus jetzt
00:15:13.783 --> 00:15:15.051
nicht genau verstehen.
00:15:15.131 --> 00:15:21.357
Stehen das das werden sie auch in der diskreten Mathematik noch. Da werden sie
beweisen, warum der
00:15:21.357 --> 00:15:27.647
der alphidische Algorithmus wirklich den größten gemeinsamen Teiler zweier Zahlen
liefert und unter
00:15:27.647 --> 00:15:33.937
welchen Voraussetzungen. Also da muss man über die, über die über das Ideal
sprechen, das von von A
00:15:33.937 --> 00:15:40.163
und B aufgespannt ist und so weiter brauchen wir jetzt hier nicht machen, wir
glauben einfach mal,
00:15:40.163 --> 00:15:42.451
dass es funktioniert. Ja, und jetzt?
00:15:43.651 --> 00:15:49.580
Jetzt haben wir eigentlich einen Algorithmus, das Macht der Algorithmus solange B
nicht gleich a
00:15:49.580 --> 00:15:55.572
ist, mache ich folgendes, wenn A größer ist als B, dann ziehe ich von AB ab und
andernfalls ziehe
00:15:55.572 --> 00:16:01.563
ich von BA ab. Also ich ziehe immer die kürzere Strecke von der längeren Strecke ab
und das mache
00:16:01.563 --> 00:16:07.307
ich eben so lange wie B und gleich a ist. Und in dem Moment, wenn A und B die
gleichen Zahlen
00:16:07.307 --> 00:16:10.211
liefern, dann ist das Ergebnis geliefert mit A.
00:16:10.931 --> 00:16:17.192
Voraussetzung dafür ist, dass A und B beides zahlen, größer sind als 0. Und
tatsächlich müssen es,
00:16:17.192 --> 00:16:23.070
eigentlich müssen es jetzt hier in diesem Fall ganze Zahlen sein. Unter dieser
Voraussetzung
00:16:23.070 --> 00:16:29.267
funktioniert dieser Algorithmus und liefert uns letztendlich den größten
gemeinsamen Teiler von A
00:16:29.267 --> 00:16:34.378
und B. Okay jetzt haben wir einen Algorithmus gesehen und da gibt es irgendwie 3
00:16:34.378 --> 00:16:38.851
abstraktionsstufen, auf denen man diesen Algorithmus beschreiben kann.
00:16:40.131 --> 00:16:44.914
Zuerst mal braucht man sowas wie eine Kernidee. Man braucht so einen Heureka Moment
und dieser
00:16:44.914 --> 00:16:49.545
Heureka Moment, den hat er Euklid wenn er wenn er gesehen hat, aha, ich muss ja nur
von der
00:16:49.545 --> 00:16:54.532
längeren Strecke die kürzere abziehen und komme zum gleichen Problem wieder, also
das ist so diese
00:16:54.532 --> 00:16:59.011
diese Kernidee, die müssen sie eigentlich bei jeder Problemlösung irgendwann
entwickeln.
00:16:59.651 --> 00:17:04.257
Und das ist irgendwie auch so ein bisschen die Kunst. Oder beim Entwickeln von
Algorithmen ist auf
00:17:04.257 --> 00:17:08.864
diese Kernidee zu kommen, auf diesen, diesen Heureka Moment zu erleben, den gibt es
an ganz vielen
00:17:08.864 --> 00:17:13.376
Stellen, den werden wir ein paar Mal hier sehen und dann insbesondere auch in der
Vorlesung über
00:17:13.376 --> 00:17:17.795
Algorithmen und Datenstrukturen, da kommt das immer wieder vor, das ist eigentlich
das, was am
00:17:17.795 --> 00:17:20.851
meisten Spaß macht, würde ich behaupten, jetzt muss man aber den.
00:17:21.451 --> 00:17:26.126
Algorithmus wenn man es jetzt verstanden hat, wie der funktionieren soll, ich hätte
das ja auch
00:17:26.126 --> 00:17:30.555
irgendwie hier mit mit Stäbchen zeigen können und so, aber dann muss ich es
irgendwann mal
00:17:30.555 --> 00:17:35.230
formalisieren, so dass ich das Ihnen auch mitteilen kann und das haben wir auch
gemacht auf der
00:17:35.230 --> 00:17:40.053
vorherigen Folie, indem wir hier auf der rechten Seite so einen so einen Pseudocode
hingeschrieben
00:17:40.053 --> 00:17:44.827
haben, und das ist eigentlich das, was man, was man dann als nächstes macht, dass
man beschreibt,
00:17:44.827 --> 00:17:48.371
was passiert im Algorithmus im Sinne eines Pseudocodes Semi detailliert.
00:17:48.931 --> 00:17:55.554
Ist für Menschen gemacht, für die Bildung, für für Diskussionen über Korrektheit
und Effizienz, auch
00:17:55.554 --> 00:18:02.045
für Beweise. Ist aber in dieser Form einem Rechner zuerst mal noch nicht
zugänglich. Also ich kann
00:18:02.045 --> 00:18:08.470
das nicht den Computer füttern und er lässt den Algorithmus automatisch laufen, wir
brauchen also
00:18:08.470 --> 00:18:14.961
etwas wie eine Implementierung, also es muss dann sehr detailliert sein, das muss
so gemacht sein,
00:18:14.961 --> 00:18:15.491
dass es.
00:18:16.451 --> 00:18:21.739
Der Computer lesen kann, dass der Computer es ausführen kann, dass er es irgendwie
verstehen kann
00:18:21.739 --> 00:18:26.536
und aber auch so möglichst, dass es auch ein Mensch verstehen kann. Und deswegen
gibt es
00:18:26.536 --> 00:18:31.389
Programmiersprachen, was wir jetzt bei Euklid gesehen haben, ist die die Kernidee
und den
00:18:31.389 --> 00:18:36.622
Pseudocode, aber die eigentliche Implementierung haben wir noch nicht gesehen, also
wie sieht es
00:18:36.622 --> 00:18:41.911
aus, wenn dieser Algorithmus jetzt läuft und wie könnte der, wie könnte der auf
dieser auf dieser
00:18:41.911 --> 00:18:45.891
implementierungsebene aussehen, so dass eine Maschine das verstehen kann?
00:18:46.771 --> 00:18:51.901
Genau das machen wir jetzt. Jetzt versuchen wir mal, diesen Algorithmus laufen zu
lassen und ich
00:18:51.901 --> 00:18:57.192
zeige ihnen den jetzt mit dem sogenannten Dogs Box Computer. Es ist viel weniger
aufregend, als sie
00:18:57.192 --> 00:19:02.429
vielleicht zuerst denken, Box Computer, wir nennen das Box Computer, weil wir haben
das früher mit
00:19:02.429 --> 00:19:07.559
Boxen gemacht, also das sind wirklich hier, wir haben Boxen von 0 bis 9, also wir
haben 10 boxen
00:19:07.559 --> 00:19:12.529
und wir haben 2 sogenannte Register, sie können sich vorstellen, ich habe eine
linke und eine
00:19:12.529 --> 00:19:13.171
rechte Hand.
00:19:13.891 --> 00:19:19.525
Und, und ich habe diese Boxen, in denen ich Dinge unterbringen kann. Jetzt kommt
der eigentliche
00:19:19.525 --> 00:19:25.217
Trick. Der eigentliche Trick ist, dass ich in diesem Speicher in diese Boxen, da
kann ich zahlen,
00:19:25.217 --> 00:19:31.027
rein tun, also ich kann da zum Beispiel sagen, hier ist die Zahl 12 drin, da kann
ich aber noch ein
00:19:31.027 --> 00:19:36.603
bisschen mehr rein tun, und zwar kann ich in diese Boxen auch Befehle reinstecken,
letztendlich
00:19:36.603 --> 00:19:42.237
kann man jeden Befehl, der hier steht, mit mit einer Zahl repräsentieren, das
brauchen sie jetzt
00:19:42.237 --> 00:19:43.411
nicht im Detail und.
00:19:44.771 --> 00:19:50.823
Nachvollziehen können aber, was jetzt. Hier steht zum Beispiel das, was in der Box
8 drin ist. Soll
00:19:50.823 --> 00:19:56.814
ich in die linke Hand nehmen, das könnte man jetzt mit einer Zahl kodieren
irgendwie und wenn eine
00:19:56.814 --> 00:20:02.805
Maschine entsprechend kompliziert gebaut wäre, könnte sie das auch verstehen, was
man machen soll.
00:20:02.805 --> 00:20:08.552
Jede einzelne Operation, die sie hier sehen, in diesen Zellen von 0 bis 7 sind
extrem einfache
00:20:08.552 --> 00:20:12.771
Operationen eigentlich, ich erkläre sie ganz kurz, das hier bedeutet.
00:20:13.651 --> 00:20:15.051
Oder wir gehen es einfach durch. Wir machen.
00:20:15.131 --> 00:20:21.221
Das mal. Und zwar ich sage Ihnen einfach, das steht jetzt hier auf der Folie nicht
drauf, aber am
00:20:21.221 --> 00:20:27.437
Anfang müssen wir die 2 Zahlen, von denen wir den größten gemeinsamen Teiler finden
wollen, hier in
00:20:27.437 --> 00:20:33.590
die achte und neunte Speicherstelle tun. Nehmen wir mal 12 und 20 okay jetzt sind
da 2 zahlen drin
00:20:33.590 --> 00:20:39.680
und von denen will ich den größten gemeinsamen Teiler und jetzt passiert folgendes
jetzt habe ich
00:20:39.680 --> 00:20:40.811
einen sogenannten.
00:20:42.571 --> 00:20:47.610
Programmzähler der sagt mir jetzt, wo ich bin, also ich bin jetzt an dieser Stelle
und ich muss
00:20:47.610 --> 00:20:52.755
jetzt diesen Befehl ausführen und der Befehl lautet, TU das, was in der achten
Speicherstelle ist
00:20:52.755 --> 00:20:57.847
in die linke Hand, und zwar immer in einer Kopie, also das heißt, ich mache jetzt
eine Kopie von
00:20:57.847 --> 00:21:02.568
der 12, nehme sie in die linke Hand oder in das linke Register, und wenn man einen
Befehl
00:21:02.568 --> 00:21:07.819
ausgeführt hat, dann geht die Maschine zum nächsten Befehl, jetzt nehme ich das,
was in der neunten
00:21:07.819 --> 00:21:09.411
Zelle ist, in die rechte Hand.
00:21:11.331 --> 00:21:16.515
Also jetzt, ich lege das jetzt hier symbolisch dahin, das liegt jetzt in der, ich
habe das jetzt in
00:21:16.515 --> 00:21:21.490
der rechten Hand, diese 20 und jetzt habe ich die die Nullte und erste Befehl
ausgeführt, jetzt
00:21:21.490 --> 00:21:26.464
führe ich den zweiten Befehl aus oder hier den Dritten, wenn das, was in der linken
und rechten
00:21:26.464 --> 00:21:31.492
Hand ist, das Gleiche ist, dann bin ich fertig, dann wäre das Resultat in den
beiden Händen, bin
00:21:31.492 --> 00:21:36.571
noch nicht fertig, deswegen geht es weiter und jetzt wenn r größer ist als L. Also
jetzt muss ich
00:21:36.571 --> 00:21:38.771
es muss vergleichen können, ich muss also.
00:21:39.291 --> 00:21:45.373
Genügend Intelligenz quasi besitzen, um 20 mit 12 vergleichen zu können. Wenn 20
entschuldigung,
00:21:45.373 --> 00:21:51.328
wenn 20 größer ist als 12 das ist jetzt hier der Fall, dann soll ich zu 6 springen.
Also jetzt
00:21:51.328 --> 00:21:57.283
kommt es erst einmal der Fall, dass es jetzt nicht mit dem nächsten Befehl
weitergeht, sondern
00:21:57.283 --> 00:22:03.492
jetzt springe ich an die an die in der Box quasi also an die Box Nummer 6. Jetzt
muss ich 2 zahlen
00:22:03.492 --> 00:22:09.131
subtrahieren können, also 2012 r minus l, rechte Hand minus linke Hand 20 - 12 gibt
8 und
00:22:09.251 --> 00:22:16.360
und diese Zahl 8, die soll ich jetzt in die Box Nummer 9 stecken. Jetzt sehen Sie
aus, der 20 wird
00:22:16.360 --> 00:22:23.542
eine 8 und dann als nächstes springe ich wieder zu 0 jetzt geht es wieder vorne
los, das was in der
00:22:23.542 --> 00:22:30.288
8. In der 8. Ist in die linke Hand was in der neunten Zelle ist in die rechte Hand
also jetzt
00:22:30.288 --> 00:22:37.325
tauschen die hier so rechte Hand l gleich r nicht der Fall r größer l nicht der
Fall also springe
00:22:37.325 --> 00:22:38.051
ich nicht.
00:22:38.611 --> 00:22:44.869
LR, also 12 8. Wir ziehen von der größeren die kleinere Strecke ab. LR ist 12 8,
gibt 4 und es soll
00:22:44.869 --> 00:22:50.937
jetzt in die speicherstelle Nummer 8 gespeichert werden. Das heißt ich nehme jetzt
die 4 und tue
00:22:50.937 --> 00:22:57.006
die da in die speicherstelle Nummer 8. Dann geht es wieder weiter nach vorne, jetzt
springen wir
00:22:57.006 --> 00:23:03.138
wieder zur 0 zurück und ich glaube sie sehen schon so langsam das Muster, wir
machen ja immer das
00:23:03.138 --> 00:23:06.931
gleiche, wir nehmen wieder 8 und 9 in linke und rechte Hand.
00:23:07.891 --> 00:23:14.575
Also 4 und 8 entsprechend. Das waren die ersten beiden Befehle. L ist noch nicht
gleich r. Wir
00:23:14.575 --> 00:23:21.615
vergleichen R mit LR ist größer als L. Ja, also ich springe zur Speicherstelle 6 r
minus l soll ich
00:23:21.615 --> 00:23:28.228
in die neunte Zelle tun, also 8 - 4 gibt 4. Kommt jetzt hier in die neunte
Speicherstelle ich
00:23:28.228 --> 00:23:35.197
springe wieder zur 0. Ich nehme das was in der 8. Und neunten Speicherstelle ist,
in die Linke und
00:23:35.197 --> 00:23:36.051
rechte Hand.
00:23:37.251 --> 00:23:42.452
Und L gleich r. Jetzt frage ich, ob L gleich r ist. Und jetzt ist der Fall, dass L
und R die
00:23:42.452 --> 00:23:47.992
gleichen Zahlen enthalten. Also meine linke und rechte Hand hat die gleiche Zahl
und jetzt ist der
00:23:47.992 --> 00:23:53.476
Algorithmus fertig, jetzt stoppt der Algorithmus und gibt mir, das steht jetzt auch
nicht auf der
00:23:53.476 --> 00:23:57.491
auf der Folie hier gibt mir dann den größten gemeinsamen Teiler zurück.
00:23:58.131 --> 00:24:04.409
Wir haben begonnen mit 12 und 20. Und tatsächlich, es ist jetzt 4, der größte
gemeinsamen Teiler von
00:24:04.409 --> 00:24:10.626
12 und 20, also der Algorithmus scheint richtig funktioniert zu haben. Und ja, was
musste ich jetzt
00:24:10.626 --> 00:24:16.779
können dafür, ich habe nicht viel Intelligenz gebraucht, ich habe etwas sehr
mechanisches gemacht,
00:24:16.779 --> 00:24:22.870
ich bin von einer Speicherstelle immer zur nächsten gegangen und habe sehr einfache
Instruktionen
00:24:22.870 --> 00:24:24.691
gelesen, was muss ich können?
00:24:24.931 --> 00:24:30.626
Ich muss, ich muss etwas aus einer speicherstelle rauslesen können, wie zum
Beispiel hier. Ich muss
00:24:30.626 --> 00:24:36.321
es in die Linke oder rechte Hand nehmen können oder eben ein Register, sagt man
dazu dann, ich muss
00:24:36.321 --> 00:24:41.900
Sachen vergleichen können, also ich muss Werte von einem Register miteinander
vergleichen können,
00:24:41.900 --> 00:24:47.595
ich muss abhängig von diesem Vergleich Sachen machen können, wie zum Beispiel wenn
R größer ist als
00:24:47.595 --> 00:24:53.291
l, dann muss ich springen, also ich muss in diesem Instruktionsstrom hier auch
springen können und.
00:24:53.411 --> 00:24:58.697
Und darüber hinaus muss ich rechnen können. Also ich muss sowas wie L minus r
ausrechnen können,
00:24:58.697 --> 00:25:03.983
also l minus r oder r minus L und zum Schluss auch wieder in die Box rein tun. Also
was muss ich
00:25:03.983 --> 00:25:09.269
können, ich muss letztendlich Sachen aus Boxen rausnehmen können aufgrund der Werte
in diesen in
00:25:09.269 --> 00:25:14.225
diesen Boxen dann Entscheidungen machen können und dann mit den Dingen die ich in
der Hand
00:25:14.225 --> 00:25:15.051
abrechnen kann.
00:25:15.131 --> 00:25:21.726
Können und die wieder in Boxen zurückschreiben und das ist alles, was ich können
muss und ich muss
00:25:21.726 --> 00:25:27.918
halt noch verstehen, was da steht und da es hier nicht sehr viele Befehle gibt,
wäre es kein
00:25:27.918 --> 00:25:34.378
Problem eine Maschine zu bauen, die jeden Einzelnen dieser Befehle auch wirklich
verstehen kann.
00:25:34.378 --> 00:25:40.974
Übrigens wenn es irgendwo Fragen gibt, Unsicherheiten, Kommentare, was auch immer,
melden Sie sich
00:25:40.974 --> 00:25:42.051
gerne jederzeit.
00:25:42.811 --> 00:25:48.594
Ist ja eine Vorlesung, die die geht lang. Also da können Sie jederzeit
unterbrechen. Wir brauchen
00:25:48.594 --> 00:25:54.259
nicht die Fragen zum Schluss zusammen zu sammeln, wenn es irgendwo unklar wird,
dann melden sie
00:25:54.259 --> 00:26:00.162
sich einfach, ja genau, also das ist jetzt dasselbe, was sie eben schon gesehen
haben, noch mal auf
00:26:00.162 --> 00:26:06.065
einer auf einer echten Folie, Programmcode, wir haben einen Speicher, der
Programmcode enthält, das
00:26:06.065 --> 00:26:11.491
ist die wesentliche Beobachtung, Wir haben einen Speicher, der Daten enthält und
wir haben.
00:26:12.051 --> 00:26:18.822
Sogenannte Register hinter den Kulissen und wenn man sich jetzt diesen Programmcode
ganz genau
00:26:18.822 --> 00:26:25.522
anschaut, dann sieht man tatsächlich, dass der genau das, was wir vorhin gesagt
haben, dieses
00:26:25.522 --> 00:26:32.510
solange BA führe ich das hier aus, dass er genau das macht, also tatsächlich L und
r sind jetzt B
00:26:32.510 --> 00:26:39.354
und A, wenn L gleich r ist, dann stoppe ich, dann bin ich fertig und das Ergebnis
ist eines der
00:26:39.354 --> 00:26:40.651
beiden Werte, das.
00:26:41.971 --> 00:26:48.241
R größer l, also wenn A größer b dann dann geht es weiter und man springt an eine
Speicherstelle.
00:26:48.241 --> 00:26:54.512
Wenn L dann und dann wird A zu a minus b. Das geht letztendlich über die
Speicherstelle von B und
00:26:54.512 --> 00:27:00.782
A. Und dann lade ich wieder die Werte zurück, also ist jetzt es ist nicht super
wichtig, dass sie
00:27:00.782 --> 00:27:06.923
das jetzt in Einklang bringen können miteinander, aber das Prinzip müssen sie
verstanden haben,
00:27:06.923 --> 00:27:09.251
dass man, dass man eben so was hier.
00:27:09.731 --> 00:27:16.191
In Instruktionen übersetzen kann, die so einfach sind, dass man fast nichts mehr
verstehen können
00:27:16.191 --> 00:27:22.586
muss und dass man es vor allem maschinell machen kann. Und das ist der, das ist
letztendlich der
00:27:22.586 --> 00:27:24.451
Trick, das ist, das ist die.
00:27:25.011 --> 00:27:30.644
Die geniale Idee, die Alan Turing hatte, 1936, als er die universelle Touring
Maschine erfunden hat.
00:27:30.644 --> 00:27:36.222
Also er war eigentlich gar nicht so sehr interessiert an der Maschine an sich,
obwohl er ein extrem
00:27:36.222 --> 00:27:41.743
guter Ingenieur war. Also wenn man mal über Alan Turing liest, was der alles
gemacht hat in seinem
00:27:41.743 --> 00:27:47.208
Leben ist extrem erstaunlich, also der hat diese Maschinen dann auch gebaut und
zwar wirklich von
00:27:47.208 --> 00:27:52.673
Hand gelötet und und und Relais und Zeugs zusammengesetzt um um die Maschine
wirklich umzusetzen,
00:27:52.673 --> 00:27:54.251
das hat er auch gekonnt und.
00:27:54.531 --> 00:27:59.631
Aber interessiert war er eigentlich an der grundsätzlichen Frage, ist es möglich,
mit einer Maschine
00:27:59.631 --> 00:28:04.069
bestimmte Sachen zu berechnen oder nicht beziehungsweise kann ich es formalisieren,
was
00:28:04.069 --> 00:28:09.067
Berechenbarkeit bedeutet? Er hat diese Formalisierung eben damit hinbekommen, dass
er eben so eine
00:28:09.067 --> 00:28:14.066
Maschine gebaut hat und was was hat er gemacht? Er hat eine Folge von Symbolen auf
ein konzeptuell
00:28:14.066 --> 00:28:17.331
Unlimitiertes Band geschrieben, hat einen Festprogramm Computer.
00:28:20.531 --> 00:28:26.123
Postuliert und den gab es zu der Zeit auch schon, also Festprogramm, Computer,
Rechenmaschinen gibt
00:28:26.123 --> 00:28:31.490
es schon ganz lange, schon sehr lange Zeit schon seit dem 16 Jahrhundert und hat
eben gesagt in
00:28:31.490 --> 00:28:36.969
diesem Festprogramm, Computer muss eben so eine Kontrolleinheit sein und ein
interner Zustand und
00:28:36.969 --> 00:28:42.449
die, die muss dann so so einfache Operationen können, wie wir sie eben gesehen
haben, also Sachen
00:28:42.449 --> 00:28:47.476
subtrahieren auf dem Instruktionsstrom springen auf diesem Band und und so weiter
das war
00:28:47.476 --> 00:28:48.211
letztendlich.
00:28:49.091 --> 00:28:55.384
Der Trick und auf diesem Trick basieren alle unsere Computer heute und dieses
Modell, was sie eben
00:28:55.384 --> 00:29:01.550
gesehen haben, das ist ja eigentlich eigentlich das erste Mal von dieser, dieser
dieser Computer
00:29:01.550 --> 00:29:07.715
hier, das ist ein sehr theoretisches Konstrukt erstmal, aber das bildet sehr, sehr
genau ab, was
00:29:07.715 --> 00:29:13.945
wir in dem ganzen Kurs sehen werden, in den selbst beim beim Programmieren.
Eigentlich wird alles
00:29:13.945 --> 00:29:16.771
übersetzt in sowas, in solche Instruktionen.
00:29:18.771 --> 00:29:24.546
Okay diese Rechner wurden dann auch umgesetzt. Also Konrad Zuse war der europäische
Counterpart zu
00:29:24.546 --> 00:29:30.321
John von Neumann in den USA, die z 1 war die Maschine, die Konrad Zuse 38 erfunden
hat und die z 4
00:29:30.321 --> 00:29:36.155
Maschine eine der Nachfolgemaschinen von Konrad Zuse, die stand dann in Europa, in
in Zürich an der
00:29:36.155 --> 00:29:41.989
ETH, also die ETH Zürich war eine der ersten Hochschulen, die tatsächlich so eine
Maschine dastehen
00:29:41.989 --> 00:29:47.411
hatte, und das war die z 4 und die z 4, die hatte, das habe ich mir irgendwo
aufgeschrieben.
00:29:47.891 --> 00:29:53.561
Die hatte so einen Elektromotor mit 5 Hertz ist der gelaufen und hat die Maschine
quasi angetrieben.
00:29:53.561 --> 00:29:58.494
Ist wirklich das war sehr mechanisch alles ein 5 Hertz Elektromotor der quasi der
quasi
00:29:58.494 --> 00:30:03.937
letztendlich diese Relais bedient haben die dann die Kontrolleinheit gesteuert
haben, abgeleitet
00:30:03.937 --> 00:30:09.154
von dem Ganzen ist dann die von Neumann Architektur, die meisten Maschinen haben
eine solche
00:30:09.154 --> 00:30:14.654
Architektur, aber darüber sprechen wir jetzt nicht genauer, das ist einfach nur um
zu sehen, also
00:30:14.654 --> 00:30:15.051
da das.
00:30:15.131 --> 00:30:20.998
Das wurde dann daraus und die Maschinen heute sind eigentlich alle abgebildet oder
alle entstanden
00:30:20.998 --> 00:30:26.865
aufgrund der Idee von Touring ja jetzt vielleicht. Sie haben eben schon die 5 Hertz
gehört, also 5
00:30:26.865 --> 00:30:32.612
Instruktionen pro Sekunde ist zwar schon viel viel schneller als ich das gemacht
habe, aber wenn
00:30:32.612 --> 00:30:38.359
sie sich überlegen, dass heute Computer eben extrem schnell sind, also so ein
Raspberry Pi total
00:30:38.359 --> 00:30:42.371
simpler Computer hat heute 5 * 10 hoch 9 Instruktionen pro Sekunde.
00:30:42.691 --> 00:30:48.466
Und so in AMD Ryzen fred Ripper zweimal 10 hoch 12 Instruktionen pro Sekunde, die
ausgeführt werden
00:30:48.466 --> 00:30:54.067
können. Das sind unvorstellbare Geschwindigkeiten, die irgendwie erklären, warum
man mit solchen
00:30:54.067 --> 00:30:59.201
extrem einfachen Instruktionen dann doch viel machen kann, weil halt so wahnsinnig
viele
00:30:59.201 --> 00:31:04.626
Instruktionen pro Sekunde passieren, also so ein Computer kann in ein paar Sekunden
viel mehr
00:31:04.626 --> 00:31:10.169
rechnen, als sie in ihrem ganzen Leben rechnen könnten, das das ist eigentlich
letztendlich der
00:31:10.169 --> 00:31:12.211
einer der zugrundeliegenden Tricks.
00:31:14.291 --> 00:31:20.941
Okay mit dieser Einführung, sagen wir mal in die in die Grundlagen der Informatik,
möchte ich dann
00:31:20.941 --> 00:31:27.455
mal wechseln zum administrativen Teil, der muss ja auch doch kurz erwähnt werden.
Das erste, was
00:31:27.455 --> 00:31:34.037
Sie wissen sollten, ist ja die Zeiten natürlich der Vorlesung, wir haben eine
Vorlesung von 08:15
00:31:34.037 --> 00:31:39.331
Uhr bis 10:00 Uhr am Montag jeweils im Me 12, das ist recht früh in der Woche.
00:31:40.931 --> 00:31:49.379
Ich würde es ihnen empfehlen, trotzdem zu kommen. Dann dienstags haben wir das lab
von 10 bis 12, da
00:31:49.379 --> 00:31:57.574
sag ich gleich noch was darüber. Das Lab findet allerdings hier statt und nicht in
Mle 12, da ist
00:31:57.574 --> 00:32:05.938
ein Fehler auf der Folie, das findet im im Hauptgebäude d 72 statt. Ah, da steht's
ja auch da, aber
00:32:05.938 --> 00:32:09.571
da findet auch das Lab statt, also hg d 72.
00:32:11.171 --> 00:32:17.776
Auf der Homepage ist es sicherlich richtig und dann gibt es noch die vorlesungs
Homepage. Auf der
00:32:17.776 --> 00:32:24.313
kriegen sie eigentlich alle relevante Informationen zu dieser Vorlesung hier also
die vorlesungs
00:32:24.313 --> 00:32:30.782
Homepage, die finden Sie über über My Studies oder über das Vorlesungsverzeichnis
und eben auch
00:32:30.782 --> 00:32:37.251
hier auf der Folie, also Lack infethz.ch, Math, Informatik, CSE und wenn sie nur
Lack inf ethc.
00:32:37.891 --> 00:32:44.074
Wenn Sie diese Adresse wissen, Leck infethz.ch, dann kriegen Sie alle Service Kurse
letztendlich
00:32:44.074 --> 00:32:50.258
angezeigt und da ist eben auch die CSE Seite dabei. Was finden Sie auf der auf der
Webseite? Sie
00:32:50.258 --> 00:32:56.635
finden einerseits das wöchentliche Material, also diese ganzen Folien, die wir
jetzt gezeigt haben,
00:32:56.635 --> 00:33:00.371
da finden Sie hier die Organisationsfolien die Folien zum.
00:33:02.371 --> 00:33:08.367
Zum Unterricht. Und die werden ihnen einerseits mit Overlays angeboten und
andererseits in der
00:33:08.367 --> 00:33:14.491
Handout Form, also Handout heißt einfach, dass die Overlays nicht dabei sind und
die kriegen sie
00:33:14.491 --> 00:33:20.806
Deutsch oder Englisch, was Ihnen lieber ist. Dann gibt es noch so ein paar
zusätzliche Materialien,
00:33:20.806 --> 00:33:26.931
darunter auch Elektronotes zum Kurs, also sprich ein Skript sozusagen, wenn sie das
lesen, dann.
00:33:27.211 --> 00:33:33.307
Dann haben Sie das oder da, das sollte das meiste enthalten, was sie hier in der
Vorlesung auch auch
00:33:33.307 --> 00:33:39.220
machen, aber trotzdem ist es natürlich in der Vorlesung, es ist es für sie besser
zu folgen, wenn
00:33:39.220 --> 00:33:41.171
sie die Vorlesung besucht haben.
00:33:46.731 --> 00:33:52.646
Jetzt sollte es wieder gehen. Was noch? Es gibt die, die diese Elektronotes gibt
es, wenn sie da ein
00:33:52.646 --> 00:33:58.385
bisschen weiter runter scrollen auf der Vorlesungsseite, dann kriegen sie die auch
als ein Single
00:33:58.385 --> 00:34:04.005
File, Wir haben sie ihnen aber auch in verdaubare Häppchen aufgeteilt, sodass sie
die Woche für
00:34:04.005 --> 00:34:09.211
Woche sich anschauen können, vor oder nach der Vorlesung und zur Vorlesung lesen
können.
00:34:10.571 --> 00:34:16.322
Exercise Registration Link ist hier und es sind auch die wöchentlichen Übungen hier
auf der Webseite
00:34:16.322 --> 00:34:21.901
entsprechend verlinkt. Dann zum Team. Das sollte man auch nicht verschweigen, wir
sind hier nicht
00:34:21.901 --> 00:34:27.250
alleine der Ralf Sasse und ich, sondern es ist immer ein ganzes Team hinter den
Kulissen, die
00:34:27.250 --> 00:34:32.771
unheimlich viel helfen, da gibt es den Chefassistent der Druf Agraval, das ist die
erste Adresse
00:34:32.771 --> 00:34:38.465
für sie, an die sie sich wenden können, wenn sie irgendwelche administrativen
Probleme mit dem Kurs
00:34:38.465 --> 00:34:38.811
haben.
00:34:40.011 --> 00:34:45.118
Sie können sich nicht einschreiben. Sie finden Ihren Übungsgruppenraum nicht und so
weiter das sind
00:34:45.118 --> 00:34:50.225
alles Fragen, die sie ihnen stellen könnten. Dann gibt es die eigentlichen
Assistierenden, das sind
00:34:50.225 --> 00:34:54.765
diejenigen, die bei ihnen, die mit ihnen die Übungsgruppen machen, die auch ihre
Abgaben
00:34:54.765 --> 00:34:59.666
kontrollieren und oder eben Feedback geben dazu, das ist die Anlaufstelle, wenn sie
inhaltliche
00:34:59.666 --> 00:35:03.691
Fragen haben, die erste Anlaufstelle und letztendlich natürlich sind wir auch.
00:35:03.851 --> 00:35:10.972
Gerne für Fragen zu haben, sowohl in der Vorlesung als auch außerhalb der Vorlesung
scheuen sie sich
00:35:10.972 --> 00:35:17.952
nicht, uns fragen zu stellen oder uns zu kontaktieren, wenn irgendein Problem
besteht oder so hier
00:35:17.952 --> 00:35:24.789
zum wöchentlichen Ablauf. Wie funktioniert das mit den Übungen? Wir geben am
Montagmorgen online
00:35:24.789 --> 00:35:27.211
die Übungen aus, die Übungen sind.
00:35:27.531 --> 00:35:34.811
Im Code Expert, also in dem Abgabesystem, was wir verwenden, enthalten, und sie
finden Sie auch über
00:35:34.811 --> 00:35:41.727
die über die Vorlesungs Homepage. Ja, Sie sehen jetzt hier zum Beispiel, ah nee,
sie sind nicht
00:35:41.727 --> 00:35:48.935
verlinkt, aber wenn Sie sich registriert haben in den Übungen, dann finden Sie Sie
auf Code expert,
00:35:48.935 --> 00:35:55.051
dann die Vorlesung ist am Montag, das Lab am Dienstag. Außer in dieser ersten
Woche.
00:35:55.931 --> 00:36:02.385
Wo eben die Vorlesung auch am Dienstag stattfindet und kein Lab die Vorbesprechung
der Übungen, die
00:36:02.385 --> 00:36:08.252
am Montag ausgegeben werden, die sind in der folgenden Übung, also sprich heute
oder am am
00:36:08.252 --> 00:36:14.706
Mittwoch. Es gibt ein sogenanntes Study Center, das ist ein Ort, an den sie gehen
können und Fragen
00:36:14.706 --> 00:36:21.030
deponieren können, da warten Assistenten auf sie und sie können einfach dorthin
gehen und fragen,
00:36:21.030 --> 00:36:21.291
was.
00:36:21.611 --> 00:36:26.932
Wenn irgendwas unklar ist, typischerweise, wenn sie gerade bei den Übungen sind,
und sie kommen
00:36:26.932 --> 00:36:32.310
irgendwo nicht weiter, dann können Sie dorthin gehen und fragen zusätzlich zu der
Tatsache, dass
00:36:32.310 --> 00:36:37.575
sie natürlich auch Ihren Assistenten in den Übungen selbst fragen können. Abgabe
der Übung ist
00:36:37.575 --> 00:36:43.121
erwartet bis am Montag in der nächsten Woche um 18:00 Uhr, sprich sie haben
letztendlich eine Woche
00:36:43.121 --> 00:36:48.554
Zeit für die für die Bearbeitung der Übung und in der in der Übung danach wird,
dann wird wird es
00:36:48.554 --> 00:36:49.451
dann besprochen.
00:36:49.611 --> 00:36:54.445
Was Sie, was Sie abgegeben haben beziehungsweise Sie bekommen auch Feedback zu
Ihren Abgaben
00:36:54.445 --> 00:36:59.489
innerhalb einer Woche nach abgabeterminen, sodass sie dann auch ja ein bisschen
eben menschliche
00:36:59.489 --> 00:37:03.851
Interaktion hier an der ETH auch finden. Auch über das über unsere Übungsplattform.
00:37:08.731 --> 00:37:13.863
Das Abgabesystem hier ist nennt sich Code Expert. Code Expert ist eine online
Entwicklungsumgebung
00:37:13.863 --> 00:37:18.733
und auch kursmanagement Tool, das heißt, sie brauchen zur Ausführung der Übung
keinen eigenen
00:37:18.733 --> 00:37:23.865
Compiler, sie brauchen keinen, fast keinen Rechner, sie brauchen einfach nur
Zugriff zum Internet,
00:37:23.865 --> 00:37:29.049
dort können Sie sich registrieren für eine Übungsgruppe, dort erhalten Sie die
Aufgaben dort machen
00:37:29.049 --> 00:37:32.611
Sie Ihre Aufgaben und dort erhalten Sie auch die Rückmeldung vom TA.
00:37:33.411 --> 00:37:38.811
Code Expert ist eine Entwicklungsumgebung und Kursmanagement Tool, das an der ETH
entwickelt wird.
00:37:38.811 --> 00:37:44.102
Tatsächlich ziemlich nah zu zu Ralf und mir also, das heißt, wir haben jederzeit
Kontakt mit den
00:37:44.102 --> 00:37:49.392
Entwicklern und können, auch wenn es irgendwo Probleme gibt, jederzeit nach nach
Doppeln lassen,
00:37:49.392 --> 00:37:54.848
was ziemlich hilfreich ist. Darüber werden sie auch in den Übungen noch ein
bisschen sprechen. Also
00:37:54.848 --> 00:38:00.249
ich gehe jetzt auf Code expert ansonsten nicht ein. So jetzt zu den Übungen, was
ist mit denen die
00:38:00.249 --> 00:38:01.131
sind freiwillig.
00:38:01.611 --> 00:38:09.345
Aber wir empfehlen sie Ihnen wirklich dringend, wenn sie die Übung nicht machen,
ist das ihr Problem
00:38:09.345 --> 00:38:17.001
und was passiert, wenn man die Übung macht oder nicht? Sehen Sie hier, das ist eine
bisschen ältere
00:38:17.001 --> 00:38:24.658
Folie, so von vor 34 Jahren vielleicht oder vielleicht auf 5 wo man wo man sieht
wie die Anzahl der
00:38:24.658 --> 00:38:27.211
erreichten Punkte in Code expert.
00:38:27.851 --> 00:38:33.402
Mit der letztendlich erreichten Note in der Prüfung zusammenhängt. Das ist ne
ungerundete Note, die
00:38:33.402 --> 00:38:38.617
man hier sieht und sie sehen ja, je weniger Punkte man hier n Code expert erreicht
hat, desto
00:38:38.617 --> 00:38:43.664
schlechter ist im Schnitt die Note. Natürlich gibt es Leute die mit ganz wenig
Übung alles
00:38:43.664 --> 00:38:45.851
schaffen, die schon Vorerfahrung haben.
00:38:46.171 --> 00:38:51.943
Und es gibt auch Leute, die ganz viele Punkte haben und trotzdem nicht so
wahnsinnig weit über der 4
00:38:51.943 --> 00:38:57.658
sind. Das gibt es immer, aber was wir in letzter Zeit beobachtet haben, ist, dass
diese Kurve immer
00:38:57.658 --> 00:39:03.200
flacher wurde, und zwar in Zusammenhang mit einem Bonussystem, was wir hatten, wir
haben nämlich
00:39:03.200 --> 00:39:08.857
einen Bonus gegeben dafür, dass die Leute diese Übung gemacht haben, in anderen
Vorlesungen werden
00:39:08.857 --> 00:39:11.051
sie sicherlich von Bonussystemen noch.
00:39:12.331 --> 00:39:17.884
Noch werden noch Bekanntschaft schließen mit dem mit solchen Bonussystemen, und wir
haben dieses
00:39:17.884 --> 00:39:23.322
Jahr beschlossen, dieses Bonussystem abzuschaffen. Das heißt, es gibt für die, für
die für die
00:39:23.322 --> 00:39:28.933
Prüfung keinen Bonus mehr, das heißt aber auch, dass es keinen Malus gibt für
diejenigen, die die
00:39:28.933 --> 00:39:34.544
letztendlich die Übung nicht machen, also oder die die Übung eben auf eine andere
Art machen. Ich
00:39:34.544 --> 00:39:40.271
möchte einfach nur dringend darauf, also noch mal darauf hinweisen, dass es
wirklich extrem wichtig
00:39:40.271 --> 00:39:41.371
ist, dass sie üben.
00:39:41.771 --> 00:39:46.526
Niemand lernt Klavierspielen, indem er anderen zuschaut beim Klavierspielen. Das
müssen sie üben und
00:39:46.526 --> 00:39:51.186
beim Fußballspielen ist es genau das Gleiche, also sie können, sie können beliebig
oft Fußball, WM
00:39:51.186 --> 00:39:55.751
und Bundesliga und irgendwas schauen und trotzdem werden sie nicht besser im
Fußball, das müssen
00:39:55.751 --> 00:40:00.411
sie, müssen Sie üben, klar, und das ist bei Informatik, beim Programmieren ganz
genau das gleiche.
00:40:01.371 --> 00:40:07.422
Und ich warne explizit davor, zu viel künstliche Intelligenz zu verwenden. Diese KI
Tools sind
00:40:07.422 --> 00:40:13.409
extrem weit fortgeschritten, die können ihnen alle Übungen lösen, die können Ihnen
auch super
00:40:13.409 --> 00:40:17.851
helfen bei den Übungen, es ist n gutes Tool um sich helfen zu lassen.
00:40:18.891 --> 00:40:24.126
Aber die Gefahr ist sehr groß, dass sie sich alles machen lassen von dem Tool und
deswegen deswegen
00:40:24.126 --> 00:40:29.308
auch dieses Abschaffen des Bonussystems, weil wir eben gesehen haben, ja, die Leute
machen einfach
00:40:29.308 --> 00:40:34.543
alles mit KI, um den Bonus zu erhalten und haben keine Incentive mehr, das selber
zu lernen. Und es
00:40:34.543 --> 00:40:39.514
ist wichtig, dass sie die Sachen selber lernen, sie müssen in diesem Kurs lernen,
ein Programm
00:40:39.514 --> 00:40:43.851
selbst von Hand schreiben zu können, ohne irgendwelche Hilfe dafür dazu zu nehmen.
00:40:44.451 --> 00:40:50.068
Das mag ihnen vielleicht selbstverständlich erscheinen, aber so ganz
selbstverständlich scheint es
00:40:50.068 --> 00:40:55.627
nicht mehr zu sein, was wir eben an den an der an der Entwicklung gesehen haben.
Jetzt könnte man
00:40:55.627 --> 00:41:01.072
natürlich fragen, ja, warum muss ich überhaupt noch programmieren lernen, wenn man,
wenn man KI
00:41:01.072 --> 00:41:06.632
tools hat, aber das diese Frage, die können Sie auf jedes beliebige Fach ausdehnen,
KI löst ihnen
00:41:06.632 --> 00:41:12.077
heute mathematisch schwierige Probleme, die sie alle noch nicht verstehen und ich
zum Teil auch
00:41:12.077 --> 00:41:12.651
nicht die.
00:41:13.291 --> 00:41:17.385
Die die können Sie mit einem KI Tool lösen, also könnte man könnte man auch fragen,
ja warum
00:41:17.385 --> 00:41:21.124
studiere ich überhaupt Mathematik, warum studiere ich Informatik, warum studiere
ich
00:41:21.124 --> 00:41:25.441
Geschichtswissenschaften? Ki ist mittlerweile so gut, dass, dass man das Gefühl
hat, die Maschine
00:41:25.441 --> 00:41:29.803
kann ja schon alles, ich muss eigentlich gar nichts mehr lernen, aber das ist ein
Fehlschluss, man
00:41:29.803 --> 00:41:33.720
muss in seinem Leben eben auch Sachen einfach greifbar haben und wenn sie schnell
später
00:41:33.720 --> 00:41:37.992
programmieren können wollen und wenn sie die Tools auch effizient nutzen wollen,
dann müssen Sie
00:41:37.992 --> 00:41:38.171
die.
00:41:38.331 --> 00:41:44.111
Müssen Sie das inhaltlich verstanden haben? Und dann können Sie auch beurteilen,
was das KI tool
00:41:44.111 --> 00:41:49.772
Ihnen gibt und dann können sie können Sie viel besser eine Gruppe leiten, dann
können Sie viel
00:41:49.772 --> 00:41:55.553
besser große Programmprojekte, große Softwareprojekte zum Laufen bekommen, als wenn
sie das eben
00:41:55.553 --> 00:42:01.333
nicht verstehen und einfach sich auf KI beziehen. Also da wirklich ein wichtiges
wichtiges Credo
00:42:01.333 --> 00:42:06.091
hier glauben Sie mir, sie müssen es wirklich üben, machen Sie die Übung selbst.
00:42:06.651 --> 00:42:12.132
Und wenn sie gar nicht weiterkommen, dann fragen Sie erstmal Ihren Assistenten oder
benutzen Sie
00:42:12.132 --> 00:42:17.613
vielleicht irgendwann auch mal ki. Aber lassen Sie sich nicht alles direkt von KI
machen. In der
00:42:17.613 --> 00:42:23.265
Prüfung müssen sie es auch dann schreiben, ohne die KI zur Hand zu haben, das ist
wichtig zu wissen
00:42:23.265 --> 00:42:28.746
für sie okay ich habe genug, ich will sie nicht die ganze Zeit mit meinen mit
ermahnenden Worten
00:42:28.746 --> 00:42:33.371
hier terrorisieren, aber das muss einmal klar gesagt gewesen sein, jetzt zum Lab.
00:42:33.931 --> 00:42:39.092
Am Dienstag machen wir, machen wir das Lab und da sprechen wir Tools. Wir geben
Ihnen Hintergründe
00:42:39.092 --> 00:42:44.095
und vermitteln ein paar Best Practices. Es ist in einer Art eines Tutoriums
gestaltet, also sie
00:42:44.095 --> 00:42:49.256
können Sie machen, das dann hier im Raum, und wir haben, nehmen Sie auf dem
Computer mit, weil sie
00:42:49.256 --> 00:42:54.259
dann wirklich hands on Sachen machen, Inhalt und Struktur ist nicht so ganz in
Stein gemeißelt,
00:42:54.259 --> 00:42:59.157
mittlerweile haben wir es so ungefähr raus, was wir machen müssen, wir wollen in
interaktiven
00:42:59.157 --> 00:43:03.371
Unterricht, wir wollen Fragen, Vorschläge und Rückmeldungen an jeder Stelle und.
00:43:03.931 --> 00:43:08.999
Und wir haben dieses Jahr vor wirklich auch assistieren in dem Raum zu haben, die
ihnen dann helfen
00:43:08.999 --> 00:43:14.016
können, damit sie sich nicht von uns bedrängt fühlen. Wenn wir dann rumlaufen und
ihre ihre Sachen
00:43:14.016 --> 00:43:18.930
sehen. Aber es ist wirklich einfach so ein Tutorial und wir besprechen da, wie man
mit mit Linux
00:43:18.930 --> 00:43:23.845
Shell umgeht und so weiter es geht einfach so ein bisschen um das, um das Hands on,
was sie eben
00:43:23.845 --> 00:43:28.759
über Code Expert hier nicht lernen, ist auch speziell für die Studierenden von
Rechnergestützten
00:43:28.759 --> 00:43:30.091
Wissenschaften konzipiert.
00:43:33.571 --> 00:43:39.395
Wir haben noch ein online Tutorial, dass Sie zum zum Einstieg durcharbeiten können.
Das können Sie
00:43:39.395 --> 00:43:45.219
durchgehen bis nächste Woche. Link ist auf der Webseite und letztendlich noch ein
Wort zur Prüfung
00:43:45.219 --> 00:43:46.051
der Prüfstopp.
00:43:46.131 --> 00:43:51.186
Auch für die Endprüfung schließt Vorlesungsinhalte und Übungsinhalte ein und die
Prüfung wird
00:43:51.186 --> 00:43:56.242
schriftlich sein. Am Computer, das heißt, Sie haben dann auch Code Experte und
können da eben
00:43:56.242 --> 00:44:01.516
Aufgaben entsprechend beantworten, dort wird Praktisches Wissen in erster Linie
gefragt, aber wir
00:44:01.516 --> 00:44:06.844
haben auch ein paar Fragen zum theoretischen Wissen, wir werden im Laufe der
Vorlesungsreihe ihnen
00:44:06.844 --> 00:44:12.063
das eine oder andere die eine oder andere alte Prüfung mal zeigen und dann, dann
sehen sie schon
00:44:12.063 --> 00:44:13.531
worum es, worum es da geht.
00:44:19.051 --> 00:44:24.252
Okay ich gehe noch mal ganz kurz zum zu diesem Teil hier zurück. Ich möchte nur
ganz kurz noch was
00:44:24.252 --> 00:44:29.400
sagen zu Programmiersprachen und dann kann Ralf letztendlich mit C plus Plus
übernehmen. Nach der
00:44:29.400 --> 00:44:34.547
Pause. Also wir haben ja gesehen, dass die Sprache, die der Computer versteht, sehr
primitiv sein
00:44:34.547 --> 00:44:39.642
kann, also das haben wir da an dem Boxcomputer gesehen und das heißt, wir müssen
eigentlich sehr
00:44:39.642 --> 00:44:43.411
einfache Operationen, extrem viele kleine Einzelschritte aufteilen und.
00:44:43.771 --> 00:44:49.261
Und die Sprache variiert noch von Computer zu Computer. Also dieses Handy hat einen
anderen
00:44:49.261 --> 00:44:55.234
Instruktionssatz als als dieser Computer und deswegen braucht man letztendlich
Programmiersprachen,
00:44:55.234 --> 00:45:01.087
um um eben ein ein Programm von so einer Pseudocode, also eigentlich von einer
Programmiersprache
00:45:01.087 --> 00:45:06.879
zu übersetzen in in Maschinencode. Ja gut, dann machen wir in einer Viertelstunde
weiter und wir
00:45:06.879 --> 00:45:12.491
überlegen zwischendurch, ob wir hier was überspringen oder ob wir das noch fertig
machen das.
00:45:13.131 --> 00:45:13.931
Aber nach der Pause?
00:45:15.435 --> 00:45:20.555
So machen wir weiter. Wir haben uns soeben verständigt, dass wir ihnen doch noch
kurz was zu
00:45:20.555 --> 00:45:25.898
Programmiersprachen sagen, also das haben wir jetzt kurz vor der Pause noch
besprochen, also man
00:45:25.898 --> 00:45:31.241
ja, es gibt eben, es gibt eben die Sprache, die der Computer versteht, die sehr
primitiv ist und
00:45:31.241 --> 00:45:36.695
auf der anderen Seite ist quasi dieser Heureka Moment, und dazwischen gibt es ein
paar Stufen, und
00:45:36.695 --> 00:45:42.038
Programmiersprachen sind eben so dazwischen, also die, die Programmiersprache ist
dafür gedacht,
00:45:42.038 --> 00:45:45.155
dass dass sie sowohl vom Computer als auch vom Computer.
00:45:46.235 --> 00:45:51.149
Benutzer vom Programmierer lesbar ist und dass sie auch so ein bisschen
abstrahiert, dass die
00:45:51.149 --> 00:45:56.222
verschiedenen Computer eben verschiedene Programmiersprachen intern sozusagen
haben. Jetzt haben
00:45:56.222 --> 00:46:01.454
wir in diesem Kurs die Programmiersprache C plus Plus und man kann sich natürlich
fragen, ja, warum
00:46:01.454 --> 00:46:06.632
wählen wir die, warum haben wir nicht Python genommen, warum haben wir nicht Java
Script genommen,
00:46:06.632 --> 00:46:09.275
warum benutzen wir nicht Java oder was auch immer.
00:46:10.315 --> 00:46:15.109
Und ich sage Ihnen kurz die Begründung, also eine Begründung ist, dass in Ihrem
Fall der
00:46:15.109 --> 00:46:20.122
Rechnergestützte Wissenschaften, das Departement, das Zieldepartement, also
rechnergestützte
00:46:20.122 --> 00:46:25.461
Wissenschaften, die Sprache haben wollte, weil sehr viel High Performance Computer
mit C plus plus
00:46:25.461 --> 00:46:30.638
gemacht wird auf Systemprogrammierung bedient letztendlich C oder C plus Plus, und
das ist eine
00:46:30.638 --> 00:46:36.032
Entscheidung sozusagen von ihrem Departement, aber wir stehen auch hinter dieser
Entscheidung, weil
00:46:36.032 --> 00:46:39.955
wir sagen, dass C plus plus viele Entscheidungen sehr explizit macht und
00:46:40.075 --> 00:46:45.300
und Programmierer eben dazu zwingt, explizit eine Wahl zu treffen. Also es fängt
schon mal damit an,
00:46:45.300 --> 00:46:50.213
dass C plus plus eben eine streng typisierte Sprache ist und dass es nicht, dass
sie nicht zur
00:46:50.213 --> 00:46:55.386
Laufzeit interpretiert wird, sondern dass es eben eine kompilierte Sprache ist. Und
all das erzeugt
00:46:55.386 --> 00:47:00.403
einen relativ starken, stark reglementierten Mechanismus, den sie befolgen müssen,
um ein C plus
00:47:00.403 --> 00:47:05.367
plus Programm zu schreiben, und wenn sie das einmal können, dann können sie später
auch relativ
00:47:05.367 --> 00:47:05.995
einfach auf.
00:47:06.635 --> 00:47:12.927
Simplere sprachen wie zum Beispiel Kompilierte, die interpretierte Sprachen wie
Python umzusteigen,
00:47:12.927 --> 00:47:18.965
also sie können. Die Analogie ist vielleicht, sie machen den Fahrausweis auf einem
Schaltwagen,
00:47:18.965 --> 00:47:25.067
aber später fahren sie Automatik, also das, das wäre so, die die Idee, vielleicht
jetzt noch ein
00:47:25.067 --> 00:47:29.835
bisschen Begriffsbildung, bevor dann Al Sasse hier mit C plus Plus beginnt.
00:47:30.955 --> 00:47:36.472
Wir werden des öfteren mal über Syntax und Semantik sprechen und ich will ganz kurz
diesen Begriff
00:47:36.472 --> 00:47:41.765
klären. Also Programme müssen so wie unsere Sprachen auch nach gewissen Regeln
geformt werden,
00:47:41.765 --> 00:47:47.170
sonst versteht sie der Computer nicht und da gibt es auf der einen Seite
syntaktische Regeln und
00:47:47.170 --> 00:47:52.406
auf der anderen Seite semantische Regeln und Syntax sind im Prinzip
Zusammenfügungsregeln für
00:47:52.406 --> 00:47:57.642
elementare Zeichen in der Sprache und die Semantik gibt einem Interpretationen
dazu, also was
00:47:57.642 --> 00:47:59.275
bedeutet das, was dort steht?
00:48:01.915 --> 00:48:07.609
Also, und es gibt eben entsprechende Regeln für für für Computer, die sind relativ
einfach, aber
00:48:07.609 --> 00:48:13.006
sind auch streng, denn Computer sind vergleichsweise dumm. Ich mache Ihnen hier ein
kleines
00:48:13.006 --> 00:48:18.107
Beispiel, also in der deutschen Sprache erstmal Syntax, also es werden eben
Buchstaben
00:48:18.107 --> 00:48:23.801
zusammengesetzt und die müssen irgendwie, wenn ein Wort zu Ende ist, dann hört man
mit einem mit
00:48:23.801 --> 00:48:27.835
einem Freizeichen auf und so weiter also das wäre jetzt alles so in.
00:48:28.235 --> 00:48:33.500
Wäre eine Regel in der Sprache. Und dann gibt es, gibt es Satzzeichen, die sagen
irgendwie in dem
00:48:33.500 --> 00:48:38.712
Fall, dass der Satz irgendwie aus 2 Teilen besteht und dann entsteht der Satz,
Alleen sind nicht
00:48:38.712 --> 00:48:44.032
gefährlich, Rasen ist gefährlich und sie können das Lesen und verstehen, sie können
es lesen, weil
00:48:44.032 --> 00:48:49.406
sie, weil eben die Syntax befolgt ist, und sie können es auch verstehen, weil es
irgendwie Semantik
00:48:49.406 --> 00:48:54.672
hat, die man, die man also interpretationsinterpretation auch hat. In dem Fall ist
es tatsächlich
00:48:54.672 --> 00:48:57.115
noch eine Mehrdeutigkeit, die hier mitspielt.
00:48:57.915 --> 00:49:04.683
Ja, und in C plus Plus, da ist die Syntax eben, gibt eben auch Syntax. Es gibt
sowas wie einen
00:49:04.683 --> 00:49:11.451
Zuweisungsoperator, es gibt sowas wie Multiplikation zwischen 2 Zeichen Sätze oder
eben solche
00:49:11.451 --> 00:49:18.507
Statements, Anweisungen müssen durch; Voneinander getrennt werden und so weiter und
das sind alles
00:49:18.507 --> 00:49:25.347
syntaktische Regeln, die beschreiben wieso ein Programm funktioniert und Semantik,
also was das
00:49:25.347 --> 00:49:27.435
eigentlich bedeutet, das ist.
00:49:29.195 --> 00:49:34.872
Das ist dann eigentlich etwas, was der Compiler, also der Übersetzer des Programms,
zuerst mal nicht
00:49:34.872 --> 00:49:40.493
unbedingt verstehen muss, in Teilen aber schon. Prüft. Also hier zum Beispiel ein
bisschen Semantik
00:49:40.493 --> 00:49:46.000
steht hier drin, das hier ist eine ganze Zahl, die hier deklariert wird, zu der
genauen Bedeutung
00:49:46.000 --> 00:49:51.450
von C plus Plus sagt ja dann der Ralf noch ein bisschen mehr, aber so
grundsätzlich, das ist mal
00:49:51.450 --> 00:49:52.075
Syntax und.
00:49:53.515 --> 00:49:58.896
Syntax beschreibt also, wann ist ein Text ein C plus plus Programm, ist es quasi
grammatikalisch
00:49:58.896 --> 00:50:04.278
korrekt und das kann vom Computer oder vom Compiler letztendlich übersetzt
überprüft werden. Der
00:50:04.278 --> 00:50:09.436
Compiler ist das Programm, was das Programm übersetzt und die Semantik ist. Was
bedeutet ein
00:50:09.436 --> 00:50:14.650
Programm, Was macht das Programm, wenn man es ausführt, welchen Algorithmus
implementiert ein
00:50:14.650 --> 00:50:15.155
Programm?
00:50:15.515 --> 00:50:21.159
Und das kann man eben nur begrenzt automatisiert überprüft überprüfen lassen.
Natürlich kann iki
00:50:21.159 --> 00:50:26.981
heute eine ganze Menge interpretieren und verstehen, aber das letztendliche
Übersetzungswerkzeug am
00:50:26.981 --> 00:50:32.449
Computer kann das nicht und deswegen muss man eben auch verstehen, was man schreibt
und diese
00:50:32.449 --> 00:50:38.153
Bedeutung, diese Semantik, da fängt eben dann, da fängt der Graubereich an, was der
Computer noch
00:50:38.153 --> 00:50:43.915
kann und was wir Menschen dann tun können, müssen, okay mit diesen Syntax,
Begriffsklärung, Syntax
00:50:43.915 --> 00:50:44.915
und Semantik und.
00:50:45.595 --> 00:50:51.244
Übergebe ich jetzt an den Ralf Sasse zum C Plus plus Programmierteil. Jetzt müssen
wir kurz die
00:50:51.244 --> 00:50:52.315
Computer wechseln.
00:50:56.125 --> 00:51:00.716
hat, da brauche ich jetzt nichts mehr zu sagen, wir schauen uns jetzt gemeinsam
unser erstes C plus
00:51:00.716 --> 00:51:05.168
plus Programm an und die Bestandteile davon vorab, vielleicht aber noch mal. Was
braucht es denn
00:51:05.168 --> 00:51:09.620
eigentlich zum Programmieren, ein paar Sachen davon wurden schon erwähnt, also ich
muss erst mal
00:51:09.620 --> 00:51:14.073
anfangen, ich muss es irgendwo reinschreiben, wenn ich es auf ein Blatt Papier
schreibe, das ist
00:51:14.073 --> 00:51:18.664
zwar vielleicht für mich selber ganz instruktiv, aber das kann ich dann noch nicht
ausführen lassen
00:51:18.664 --> 00:51:20.334
also ich habe erst mal ein Programm.
00:51:20.654 --> 00:51:25.724
Was ich nutze, um den Programmcode zu erfassen, speichern, editieren und so weiter
da gibt es
00:51:25.724 --> 00:51:30.795
natürlich wahnsinnig viele Möglichkeiten, wenn sie vielleicht schon mal mit Python
gearbeitet
00:51:30.795 --> 00:51:35.757
haben, haben Sie Tube Notebooks gesehen, wenn Sie anderweitig programmiert haben,
haben Sie
00:51:35.757 --> 00:51:41.101
vielleicht Eclipse, Visual Studio, Visual Studio Code, IMAX, Wim, was auch immer
sie genutzt haben
00:51:41.101 --> 00:51:46.281
wollen viele verschiedene Editoren, damit es hier keinen Wildwuchs gibt, nutzen wir
gleich Code
00:51:46.281 --> 00:51:50.534
expert, indem wir das Ganze machen, wo der Editor integriert ist. Es ist eine.
00:51:50.654 --> 00:51:55.931
Webbrowser Sie können also einen beliebigen Rechner benutzen, auf dem Halt ein
aktueller Webbrowser
00:51:55.931 --> 00:52:01.048
läuft, und schon können Sie das Ganze benutzen, ohne irgendwas installieren zu
müssen. Dort drin
00:52:01.048 --> 00:52:06.059
lebt auch schon direkt der Compiler, der sogenannte Übersetzer, der den von uns in
C plus plus
00:52:06.059 --> 00:52:11.230
geschriebenen Code in den nötigen passenden Maschinencode übersetzt, einfach auch
schon mit drin,
00:52:11.230 --> 00:52:16.401
das Ganze läuft dann in der sogenannten Cloud, die Cloud bedeutet nichts anderes
als der Computer
00:52:16.401 --> 00:52:17.414
von jemand anderem.
00:52:17.694 --> 00:52:22.362
In dem Fall ist es unser Computer, also hier an der ETH. Das heißt, da läuft es
drauf, da geht auch
00:52:22.362 --> 00:52:26.794
nichts verloren, hoffen wir meistens, aber eben ist es unter unserer Kontrolle, es
läuft nicht
00:52:26.794 --> 00:52:31.132
irgendwo bei jemand anderem, dort gibt es ja noch ein Betriebssystem, was für die
Verwaltung
00:52:31.132 --> 00:52:35.706
zuständig ist. Schauen wir uns in der Vorlesung hier nicht an, wenn sie das
interessiert, gibt es
00:52:35.706 --> 00:52:40.279
in der Informatik viele Vorlesungen dazu, aber sie sind ja in der
Rechnergeschützten Wissenschaft
00:52:40.279 --> 00:52:44.617
und wahrscheinlich da weniger interessiert, wir können das also einfach komplett
ignorieren,
00:52:44.617 --> 00:52:47.494
wunderbar genau, also eben wegen dieses Durcheinanders haben.
00:52:47.614 --> 00:52:53.260
Machen wir das Ganze in Code expert. Jetzt habe ich das schon mehrfach erwähnt. Was
ist Code expert,
00:52:53.260 --> 00:52:58.849
wie sieht Code Expert aus? Das sieht erstmal so aus, sie sehen es in den Übungen
noch viel genauer,
00:52:58.849 --> 00:53:04.270
wenn sie jetzt einen Bildschirm hätten von einer vernünftigen Größe, also hier 720
Pixel auf dem
00:53:04.270 --> 00:53:09.746
Projektor, das ist leider sehr wenig, dann können sie rechts immer eine
Beschreibung sehen, Links
00:53:09.746 --> 00:53:15.110
sehen Sie das Dateisystem was sie haben und in der Mitte ist der eigentliche Code
das ist jetzt
00:53:15.110 --> 00:53:16.014
erstmal relativ.
00:53:16.414 --> 00:53:21.103
Viel auf einmal. Ich mache das hier. Das hier können wir auch einmal weg machen.
Wir haben hier nur
00:53:21.103 --> 00:53:25.462
eine Datei in dieser einen Datei arbeiten wir auf der anderen Seite, ich weiß, was
ich Ihnen
00:53:25.462 --> 00:53:29.725
erzählen will, also machen wir das auch weg, sehr schön, jetzt haben wir hier nur
noch das
00:53:29.725 --> 00:53:34.321
eigentliche Programm, schauen wir uns noch nicht genau an, ich fange gleich
schrittweise bei 0 an
00:53:34.321 --> 00:53:39.011
beim leeren Programm, ich will es nur einmal gesagt haben, hier steht jetzt
irgendein Programm, das
00:53:39.011 --> 00:53:43.559
macht irgendwas, ich kann hier unten die Konsole aufklappen, ich kann das
Kompilieren, das heißt
00:53:43.559 --> 00:53:45.454
also ich kann dem Compiler sagen, bitte.
00:53:45.854 --> 00:53:52.017
Schau mal das Programm an. Klappt das? Das hat jetzt funktioniert, wenn ich hier
bla irgendwas
00:53:52.017 --> 00:53:58.508
reinfüge, dann sagt mir der Compiler direkt ja, also halt hier stimmt was nicht
okay also das heißt
00:53:58.508 --> 00:54:04.802
dieser Übersetzer macht erstmal diesen syntaktischen Check ob das ganze
funktioniert. Ich möchte
00:54:04.802 --> 00:54:10.638
nachher mit ihnen gemeinsam im Programm schreiben, was für ein für eine Eingabe AA
hoch 8
00:54:10.638 --> 00:54:11.294
berechnet.
00:54:11.614 --> 00:54:18.121
Das haben wir hier schon stehen. In der fertigen Lösung. Das funktioniert jetzt
auch, das fragt mich
00:54:18.121 --> 00:54:24.497
H Computer a hoch 8 vor a gleich 2 und sagt mir dann 2 hoch 8 ist 256 das ist
wunderbar, da wollen
00:54:24.497 --> 00:54:30.094
wir nachher hin, aber wir fangen jetzt vom Lernprogramm gemeinsam an, naja, fast
leer.
00:54:31.134 --> 00:54:36.835
Also sie sehen hier die verschiedenen Einzelteile zuerst. Das hier oben ist ein
Kommentar, das ist
00:54:36.835 --> 00:54:42.537
dann hier auch schön im Code Expert Editor eingefärbt. Diese 2 Schrägstriche am
Anfang oder in der
00:54:42.537 --> 00:54:48.123
Mitte einer Zeile sagen immer ab hier können Sie die Highlights sehen. Ja
vielleicht mach ich es
00:54:48.123 --> 00:54:53.708
noch ein bisschen größer lesbar auch hinten okay, also alles was immer nach so 2
Strichen kommt,
00:54:53.708 --> 00:54:58.654
das ist ein sogenannter Kommentar, das ist was was für uns Menschen bestimmt ist
und.
00:54:58.814 --> 00:55:05.753
Das ignoriert der Übersetzer wunderbar. Ich kann das auch anders machen. Ich kann
auch mit Stern,
00:55:05.753 --> 00:55:12.621
slash, das ist auch ein Kommentar, nur echt mit dem Vertipper, so kann ich auch
machen, dann ist
00:55:12.621 --> 00:55:19.632
alles was zwischen dem Stern und Stern slash ist ist ein Kommentar und dann kann
ich den auch über
00:55:19.632 --> 00:55:23.854
mehrere Zeilen verteilen, wenn ich das jetzt so möchte und.
00:55:24.174 --> 00:55:29.232
Also das hier ist ein Kommentar über viele Zeilen, aber für den Begieren reicht uns
erstmal
00:55:29.232 --> 00:55:34.625
wahrscheinlich dieser Kommentar, von dem bis Ende der Zeile, also in dem Fall
interessiert sich C
00:55:34.625 --> 00:55:39.850
plus plus auch für den
Ansonsten ist C plus plus relativ uninteressiert an zeilenumbrüchen ich
00:55:39.850 --> 00:55:45.298
zeige ihnen gleich das Beispiel, wie Sie das dann bitte nicht machen. In diesem
Programm haben wir
00:55:45.298 --> 00:55:50.746
am Anfang einfach so einen include io Stream. Das müssen Sie mir einfach mal
glauben, dass ich das
00:55:50.746 --> 00:55:51.414
brauche und.
00:55:51.694 --> 00:55:57.656
Das ist sowas wie ich habe jetzt gerne die Funktionalität, dass ich was auf die
Kommandozeile
00:55:57.656 --> 00:56:03.490
Kommandozeile, was ist das, das ist das hier unten, also diese Konsole, dass ich da
was hin
00:56:03.490 --> 00:56:09.773
ausgeben kann und was davon einlesen kann, das ist einfach eine Library, also eine
Bibliothek, mit
00:56:09.773 --> 00:56:15.799
der ich das Ganze dann machen kann. Okay, das glauben Sie mir so und der Rest
meines Programms
00:56:15.799 --> 00:56:19.454
sieht so aus Int Main und komische Klammern, was ist das?
00:56:19.774 --> 00:56:25.058
Der Einstiegspunkt eines jeden C plus plus Programms ist die sogenannte Main
Funktion, die
00:56:25.058 --> 00:56:30.694
Hauptfunktion. Es geht immer hier los, Funktionen schauen wir uns erst genauer in
Woche 4 oder 5
00:56:30.694 --> 00:56:36.448
an, aber jetzt genug gesagt, es gibt diese eine Main Funktion, das ist immer der
Einstiegspunkt in
00:56:36.448 --> 00:56:42.144
meinem Code gehen wir immer von oben nach unten wenn ich hier also verschiedene
Befehle habe hier
00:56:42.144 --> 00:56:46.254
Befehl 1 sondern Befehl 2 machen wir gleich richtig wird immer zuerst.
00:56:46.654 --> 00:56:52.758
Dieser Befehl, 1 ausgeführt und anschließend dann der Befehl 2. Also es geht von
oben nach unten,
00:56:52.758 --> 00:56:58.926
von links nach rechts, wie wir das auch beim normalen Lesen machen würden. Diese
Main Funktion hat
00:56:58.926 --> 00:57:05.030
hier vorne dran noch den Rückgabeparameter, auch das sehen wir bei Funktionen
genauer, das ist im
00:57:05.030 --> 00:57:10.254
Prinzip nur ein Statuscode, dass der Aufrufer informiert werden kann, Funktion hat.
00:57:10.734 --> 00:57:16.132
Normal gearbeitet oder nicht, das ist was, was das Betriebssystem interessiert, was
aber auch im Lab
00:57:16.132 --> 00:57:21.423
noch ein bisschen genauer anfangen, anschauen werden, was sie mit solchen
Statuscodes machen, wenn
00:57:21.423 --> 00:57:26.282
sie zum Beispiel auf dem Euler Supercomputer hier an der ETH arbeiten und da Remote
Sachen
00:57:26.282 --> 00:57:31.627
ausführen lassen, dass sie halt erfahren hat mein Programm irgendwie das gemacht,
was ich will, hat
00:57:31.627 --> 00:57:36.918
es korrekt beendet oder ist irgendwas schief gegangen, dafür können diese Dinge
nützlich sein, ist
00:57:36.918 --> 00:57:39.294
einfach so eingebaut, dass es das immer hat.
00:57:40.734 --> 00:57:46.030
Okay jetzt habe ich Ihnen schon diese ein und Ausgabe hier angepriesen. Sollte ich
jetzt vielleicht
00:57:46.030 --> 00:57:51.326
auch mal benutzen, aber zeige ich ihnen erst mal, was passiert, wenn ich dieses
Programm kompiliere
00:57:51.326 --> 00:57:56.569
kompiliert successful okay das heißt also ich habe noch keinen Fehler gemacht, ist
immer gut, wenn
00:57:56.569 --> 00:58:01.812
der Anfangszustand den wir vor uns haben noch nicht falsch ist. Was tut das
Programm also hier der
00:58:01.812 --> 00:58:06.574
Knopf, das ist kompilieren, das heißt es läuft nur die Übersetzung, der nächste
Knopf ist
00:58:07.334 --> 00:58:12.440
es läuft die Übersetzung und anschließend führe ich das Programm auf aus. Naja gut,
diese Main
00:58:12.440 --> 00:58:17.437
Funktion hat noch keinen Inhalt, das kann ich übersetzen und beim Ausführen
passiert einfach
00:58:17.437 --> 00:58:22.815
nichts, nicht weiter überraschend, da ist ja auch nichts drin, dieses dritte Symbol
hier unten, das
00:58:22.815 --> 00:58:28.029
ist um unsere automatischen Tests auszuführen, das heißt dann wird ihr Programm
übersetzt und es
00:58:28.029 --> 00:58:33.298
läuft dann gegen unsere Testmenge bei den Tests werden wir vermutlich hoffentlich
sowas haben wie
00:58:33.298 --> 00:58:34.494
ich soll verschiedene.
00:58:35.134 --> 00:58:41.288
Sachen richtig berechnen, das geht natürlich schief, weil naja, mein Programm macht
ja noch nichts.
00:58:41.288 --> 00:58:47.131
Also ich hätte jetzt erwartet, dass für den Input 2 die Ausgabe 256 rauskommt, aber
naja, mein
00:58:47.131 --> 00:58:53.099
Programm macht halt einfach nichts, das ist okay für den Moment, das wollen wir uns
jetzt einmal
00:58:53.099 --> 00:58:59.191
anschauen. Was kann ich denn machen mit der Eingabe und Ausgabe, vielleicht kennen
Sie schon sowas
00:58:59.191 --> 00:59:03.854
wie ein Print Kommando, hier kann ich jetzt dasselbe in C plus plus machen.
00:59:04.254 --> 00:59:10.009
Ich nutze Standard C out dieses Std:: lesen wir mal als Standard, das heißt in der
00:59:10.009 --> 00:59:16.888
Standardfunktionalität gibt es ein solches C out, das heißt ich gebe es raus auf
die Konsole, dann
00:59:16.888 --> 00:59:23.767
muss ich diese 2 kleiner Zeichen machen, das ist dann ein Operator wie das Plus wie
das gleich und
00:59:23.767 --> 00:59:30.154
danach kann ich jetzt einen beliebigen String, also eine Zeichenkette angeben
innerhalb von
00:59:30.154 --> 00:59:33.454
Anführungszeichen probieren wir das einmal aus.
00:59:35.454 --> 00:59:41.374
Ja, also Compilation Successful und Hello World hat funktioniert. Wenn ich nachher
Sachen schöner
00:59:41.374 --> 00:59:47.355
machen will, kann ich hier noch dieses Backslash n reintun für einen
Dann kann ich nachher weitere
00:59:47.355 --> 00:59:53.154
Sachen noch machen. Sie sehen jetzt noch der Cursor auf der nächsten Zeile, also
Programm start
00:59:53.154 --> 00:59:57.854
Punkt main ich gehe rein, ich füge die für diese erste Zeile direkt aus okay.
01:00:01.134 --> 01:00:10.026
Vielleicht statt Hello World schreibe ich an dem Punkt lieber sowas wie die
Beschreibung des ganzen
01:00:10.026 --> 01:00:11.374
Compute A hoch.
01:00:11.854 --> 01:00:14.294
Art for AE.
01:00:14.494 --> 01:00:20.942
E Kurs, damit ich quasi meinen Benutzer meine Benutzerin auffordere. Gib mir doch
bitte mal ein A,
01:00:20.942 --> 01:00:27.193
mit dem ich dann weiterrechnen kann, mache ich natürlich noch nicht, ich trickse
noch, ich gebe
01:00:27.193 --> 01:00:33.708
einfach mal nur diesen Text aus, jetzt möchte ich gerne was einlesen dafür,
zuallererst brauche ich
01:00:33.708 --> 01:00:35.814
irgendwie so eine Speicherzelle.
01:00:36.054 --> 01:00:42.053
Felix hatte vorhin in dem Boxcomputer die Linke und die rechte Hand, also solche
Register, aber er
01:00:42.053 --> 01:00:48.053
hat auch diese Speicherzellen Nummer 8 und Nummer 9. Genau so was mache ich, indem
ich den Namen A
01:00:48.053 --> 01:00:53.807
vergebe. Also A soll mein Variablenname sein, in der Sprache wie Python können Sie
einfach mit
01:00:53.807 --> 01:00:59.562
einem A anfangen und es geht sofort los. C plus Plus weigert sich, C Plus plus sagt
Ich möchte
01:00:59.562 --> 01:01:02.134
gerne wissen, was ist der Typ davon, also.
01:01:02.534 --> 01:01:08.391
Variablen haben immer einen Typ. Ich muss also sowas int hinschreiben wie int a.
Das heißt ich sage
01:01:08.391 --> 01:01:14.011
jetzt e plus plus, das ist eine Ganzzahl. Also wir haben jetzt eine neue
Speicherzelle erzeugt,
01:01:14.011 --> 01:01:19.690
diese Speicherzelle heißt a. Die Speicherzelle hat den Typ Ganzzahl, das heißt ich
kann da ganze
01:01:19.690 --> 01:01:25.488
Zahlen reinstecken und schauen wir uns einfach noch auf einer Folie genauer an,
aber jetzt brauche
01:01:25.488 --> 01:01:31.049
ich natürlich wieder einen; Mit diesem Programm habe ich jetzt nur so eine
Speicherzelle quasi
01:01:31.049 --> 01:01:32.174
bereitgestellt und.
01:01:34.214 --> 01:01:38.909
Unterschied, Warnung und Fehler. Ich bekomme jetzt hier eine Warnung, das ist gut,
das sagt mir,
01:01:38.909 --> 01:01:43.701
naja, ich habe hier eine variable A, die ich dann aber gar nicht benutze,
vermutlich ist das nicht
01:01:43.701 --> 01:01:48.396
ganz so die Absicht, wunderbarer Unterschied schon gleich zu sowas wie Python, wenn
sie da einen
01:01:48.396 --> 01:01:53.091
Variablennamen hinschreiben und der relativ lang ist und sie vielleicht ein anderes
Mal. Was ich
01:01:53.091 --> 01:01:57.689
beim Variablennamen Vertippen, das sind 2 verschiedene Variablen und das Python
sagt Ihnen gar
01:01:57.689 --> 01:01:59.254
nichts, viel Spaß beim Debuggen.
01:01:59.974 --> 01:02:06.291
Während hier würde der Compiler mir sofort sagen, im Moment mal, dass die Variable
ist vielleicht
01:02:06.291 --> 01:02:12.478
nicht deklariert oder dass sie da eben ein Problem haben, das kriegen Sie relativ
schnell raus.
01:02:12.478 --> 01:02:18.731
Also gut nutze ich diese Variable jetzt, ich habe jetzt hier ja gesagt, ich hätte
gerne so einen
01:02:18.731 --> 01:02:25.179
Input vom Benutzer, dann mache ich doch genau das und zwar hole ich mir jetzt vom
Eingabestrom also
01:02:25.179 --> 01:02:27.654
das hier ist die Ausgabe, das ist die.
01:02:28.054 --> 01:02:33.733
Eingabe jetzt nehmen wir doch was von dem Eingabedings Eingabestrom ist der
technische Begriff
01:02:33.733 --> 01:02:39.653
Eingabedings reicht für heute. Also ich lese das da rein in die variable A, das
heißt auf die eine
01:02:39.653 --> 01:02:45.634
Weise warte ich hier, also mein Programm wartet hier drauf, dass der Benutzer einen
Input Macht und
01:02:45.634 --> 01:02:51.072
was auch immer da reingeschrieben wird vom Benutzer oder Benutzerin wird in die
variable A
01:02:51.072 --> 01:02:56.630
gespeichert. Als Ganzzahl probieren wir das einmal kurz aus okay und jetzt darf ich
hier was
01:02:56.630 --> 01:02:57.174
eingeben.
01:02:57.814 --> 01:03:03.894
Ich sollte da wahrscheinlich keinen
Machen. Das ist vielleicht verwirrend nachher aber okay, da gebe
01:03:03.894 --> 01:03:09.244
ich jetzt 17 rein, was was passiert. Naja sie müssen mir glauben, dass das hier in
das A
01:03:09.244 --> 01:03:15.142
gespeichert wurde und naja dann mein Programm macht ja noch nicht mehr, aber
vielleicht geben wir
01:03:15.142 --> 01:03:21.039
das doch dann gerade noch mal aus, nur dass wir auch sicher sind, dass das das
getan hat, was ich
01:03:21.039 --> 01:03:26.694
ihnen versprochen habe Output a was meinen Sie, kommt da jetzt 17 raus, wenn ich 17
schreibe?
01:03:30.374 --> 01:03:38.843
Nein, ja, ich habe doch a hingeschrieben. Also es kommt in der Tat das warum hier
drin, es ist Teil
01:03:38.843 --> 01:03:47.312
des Strings, hier drin ist dieses A einfach wirklich nur der Buchstabe a. Aber ich
kann hier hinten
01:03:47.312 --> 01:03:50.734
nach das A auch noch ausgeben jetzt ist.
01:03:51.014 --> 01:03:56.986
Ist dieses A hier die Variable? Das heißt beim Ausgeben der Variable bekomme ich
nämlich den Wert,
01:03:56.986 --> 01:04:02.776
der hinter der Variable steckt. Also jetzt kann ich hier in meinem Programm die 17
eingeben und
01:04:02.776 --> 01:04:08.748
dann output a 17 also das heißt wir sehen mein Programm hat korrekterweise eine
variable A erzeugt
01:04:08.748 --> 01:04:14.416
vom richtigen Typ, dafür gibt es eine Speicherstelle wo das liegt, ich habe die
Zahl wirklich
01:04:14.416 --> 01:04:16.854
eingelesen und ich habe hier mit diesem.
01:04:17.094 --> 01:04:27.436
Kleinen, einfachen Test sehen können, dass das wirklich funktioniert hat. Jetzt
möchte ich ja aber
01:04:27.436 --> 01:04:37.674
im Endeffekt a hoch 8 berechnen, das kann ich natürlich machen, indem ich sage int.
Ich nenne die
01:04:37.674 --> 01:04:39.574
variable A hoch 8.
01:04:40.774 --> 01:04:49.172
Geht natürlich nicht. Da sagt mir der Compiler, das darf ich nicht. Ich könnte die
jetzt A 8 nennen,
01:04:49.172 --> 01:04:57.403
ich könnte die A underscore 8 oder a to the Ace nennen und das ist wie berechne ich
a hoch 8 a mal
01:04:57.403 --> 01:05:05.214
a, mal a, mal a, mal a, mal a. Ich weiß nicht, ob ich jetzt richtig gezählt habe,
ich vermute
01:05:05.214 --> 01:05:09.414
nicht, ich vermute das ist noch 72345 ja ach okay.
01:05:09.734 --> 01:05:14.214
Nah dran aber wär falsch. So, jetzt hab ich a to the ace berechnet.
01:05:15.334 --> 01:05:20.904
Und ich hab Ihnen jetzt hier schon quasi vorab vorgenommen, wie ich das richtige
Ergebnis dann
01:05:20.904 --> 01:05:23.334
nachher ausgebe. Also ich geb jetzt raus.
01:05:26.014 --> 01:05:29.134
The result are to the 8.
01:05:31.094 --> 01:05:36.134
Ah, vielleicht noch ein besserer Trick. Hier gebe ich das A.
01:05:39.334 --> 01:05:41.974
As the result, Midler Schlach, AH.
01:05:43.494 --> 01:05:51.344
Den Text weiter hoch 8, also auf die Hinweise, kommt dann nachher nicht a hoch 8,
sondern steht da
01:05:51.344 --> 01:05:59.115
wirklich welche Zahl ich reingegeben habe. Also der Unterschied ist, wenn ich
dieses A hier vorne
01:05:59.115 --> 01:06:06.885
reinschreibe, dann kriege ich halt den Buchstabe A hier, dazwischen kriege ich den
richtigen Wert
01:06:06.885 --> 01:06:13.134
davon, also gut a hoch 8 gleich und dann gebe ich einfach das A hoch 8 gleich.
01:06:13.934 --> 01:06:14.374
Dann gebe ich.
01:06:14.494 --> 01:06:18.614
Hinders are to the 8th house.
01:06:20.814 --> 01:06:25.332
Wenn ich mich nicht vertippt habe, und da dürfen sie mich immer gerne darauf
hinweisen. Und wenn ich
01:06:25.332 --> 01:06:29.398
hier strichpunkte vergessen habe, dürfen Sie mich da auch gerne darauf hinweisen.
Das wird
01:06:29.398 --> 01:06:33.781
vorkommen, aber vielleicht funktioniert das jetzt schon, dann schauen wir mal.
Compute are to the
01:06:33.781 --> 01:06:34.414
eight for ark.
01:06:35.734 --> 01:06:36.334
The result?
01:06:36.774 --> 01:06:41.214
OK, The result of the result.
01:06:41.494 --> 01:06:47.245
Das vielleicht irgendwie sowas auf die andere Weise kommt hier 2 auf 8 bis 256
raus, aber also
01:06:47.245 --> 01:06:53.179
Gesundheit. Das hier ist natürlich irgendwie blöd, vor allem das sind ja auch 7
Multiplikationen,
01:06:53.179 --> 01:06:59.114
das kann ich doch bestimmt besser machen. Das ist übrigens eine der Übungsaufgaben
die sie haben,
01:06:59.114 --> 01:07:04.681
wo sie, ich glaube 29 mal addieren oder multiplizieren sollen, aber das mit weniger
solchen
01:07:04.681 --> 01:07:09.454
Schritten machen können, hier ist der Trick dazu, wie mache ich das denn naja.
01:07:11.214 --> 01:07:17.367
Wie wäre es denn, wenn ich erstmal int b gleich a mal a und hier ist übrigens schon
das nächste mein
01:07:17.367 --> 01:07:23.152
Stil hier ist gerade fürchterlich, dass ich jetzt eine variable A und B und C und D
nenne, was
01:07:23.152 --> 01:07:29.244
mache ich da hinterher? Das ist nicht clever, das ist hin und wieder auf den Folien
nötig, weil wir
01:07:29.244 --> 01:07:35.090
nicht genug Platz haben, wenn ich hier versuche schnell zu tippen, sind so lange
Variablennamen
01:07:35.090 --> 01:07:39.214
natürlich auch ein bisschen ein Problem, aber okay, also int b ist.
01:07:39.694 --> 01:07:42.334
A mal a. Ich mach hier aber noch n Kommentar b ist.
01:07:42.574 --> 01:07:47.254
Squared it's going to be next and shruting in Zhang in C is.
01:07:48.334 --> 01:07:55.836
Naja B mal b, dann weiß ich C ist a hoch 4. Das heißt ich habe jetzt mit 2
Multiplikationen schon 3
01:07:55.836 --> 01:08:02.959
multiplikationen ersetzt und es wird jetzt noch besser wenn ich in D gleich C mal C
mache. Was
01:08:02.959 --> 01:08:10.006
bekomme ich jetzt? Das D ist in der Tat a hoch 8. Jetzt habe ich hiermit 3
multiplikationen 7
01:08:10.006 --> 01:08:17.054
multiplikationen ersetzt und ich muss nicht so deppert zählen wie ich es vorher
gemacht habe.
01:08:17.614 --> 01:08:24.807
Jetzt ist es natürlich hier nicht a to the eight, sondern d das Ganze sollte
hoffentlich noch
01:08:24.807 --> 01:08:32.079
funktionieren. Jawohl, funktioniert okay jetzt vielleicht die Frage, die sie
berechtigterweise
01:08:32.079 --> 01:08:39.350
stellen können? Ja, warum brauche ich denn hier diese? Diese ganzen Variablen?
Brauche ich die
01:08:39.350 --> 01:08:46.854
wirklich? Nö. Was ich stattdessen machen könnte ist, ich sage hier einmal in D ist
a mal a d ist.
01:08:47.294 --> 01:08:54.883
D mal D und hier unten d ist d mal d. Das heißt, dass sie sehen, ich kann so eine
variabel nicht nur
01:08:54.883 --> 01:09:02.094
einmal deklarieren und einmal befüllen, sondern wie der Name schon sagt variabel.
Ich kann das.
01:09:02.414 --> 01:09:07.662
Wiederholt überschreiben und verändern und das ganze Programm tut hier jetzt in dem
Fall immer noch
01:09:07.662 --> 01:09:12.750
das Gleiche. Warum ich A und D trennen will. Naja, weil ich hier unten ja diese
alte 2, die will
01:09:12.750 --> 01:09:17.998
ich noch ausgeben, wenn ich hier einfach direkt gesagt hätte, ja as a mal a as a
mal a und as a mal
01:09:17.998 --> 01:09:22.769
a hätte ich zwar auch a hoch 8 in a, aber hätte den Wert von a nicht mehr. Ich
könnte dann
01:09:22.769 --> 01:09:28.017
natürlich noch die 8. Wurzel ziehen, aber dann wird es doch irgendwie unnötig
kompliziert, also auf
01:09:28.017 --> 01:09:28.654
deren Weise.
01:09:29.134 --> 01:09:35.954
Funktioniert das hier so relativ gut und jetzt also insbesondere gesehen, wir
fangen von oben an,
01:09:35.954 --> 01:09:42.844
wir fügen einen Befehl nach dem anderen aus, wer hat denn alles schon Python
programmiererfahrung,
01:09:42.844 --> 01:09:49.313
was meinen Sie was passiert wenn ich hier alle möglichen Sachen auf eine Zeile tue
in Python
01:09:49.313 --> 01:09:56.063
funktioniert nichts mehr in C plus Plus kann ich übrigens dann auch noch das hier
so trennen und
01:09:56.063 --> 01:09:58.454
hier das ganze Mal so trennen und.
01:09:59.454 --> 01:10:05.636
Das funktioniert immer noch. Dem Compiler ist das egal. Der Übersetzungsmaschine
ist es wirklich
01:10:05.636 --> 01:10:11.755
egal, können Sie machen, tun Sie es bitte nicht, wenn Sie das in den Übungen
abgeben und ihr TA
01:10:11.755 --> 01:10:17.937
Ihnen dann sagt, ja ist mir egal, das ist vollkommen okay, da stehen wir hinter dem
TA und sagen
01:10:17.937 --> 01:10:24.185
ja, schau dir das nicht an, das ist witzlos, also tun sie das nicht, sie können es.
Der; Hier ist
01:10:24.185 --> 01:10:27.534
jeweils UPS der; Hier ist jeweils die Begrenzung der
01:10:27.934 --> 01:10:33.016
ich mache hier mal eine Menge Andoos, dass das wieder einigermaßen gescheit wird.
Gut, der; Beendet
01:10:33.016 --> 01:10:37.945
jeweils das Kommando, sie können mehrere solche auf eine Zeile schreiben, das ist
alles okay gar
01:10:37.945 --> 01:10:43.028
kein Problem, tun sie es in der Praxis natürlich nicht, nutzen sie vernünftige
einrückungen ach so,
01:10:43.028 --> 01:10:47.956
auch einrückungen sind hier vollkommen egal. Können Sie sich selber sehr gut mit
reinlegen, wenn
01:10:47.956 --> 01:10:52.937
sie also schon aus Python wissen, wie Sie eigentlich einrücken sollten, tun Sie das
auch hier, da
01:10:52.937 --> 01:10:54.734
tun Sie sich selber einen gefallen.
01:10:55.054 --> 01:11:02.745
Sie müssen nicht. C plus Plus ist da agnostisch. Unsere T as sind es nicht und die
sagen ihnen dann
01:11:02.745 --> 01:11:10.282
sorry, damit kann ich nichts anfangen. Gut, dann noch mal zurück auf die Folien und
dann ein paar
01:11:10.282 --> 01:11:17.507
Sachen gemeinsam anschauen. Also wir haben schon gesehen ich kann was einlesen hier
der Input
01:11:17.507 --> 01:11:22.014
Operator Standard Standard und einlesen in die variable A.
01:11:22.254 --> 01:11:27.428
Das heißt, das wird jetzt halt auch als Int. Als Ganzzahl interpretiert. Ich kann
dann eine
01:11:27.428 --> 01:11:33.001
Berechnung machen, ok, BSA mal a BSB, mal b und so weiter die ganzen Kommentare
hier oben, das ist
01:11:33.001 --> 01:11:38.176
Beiwerk, das ist gut, wenn sie das hinzufügen, damit sie, wenn Sie in einem halben
Jahr zur
01:11:38.176 --> 01:11:43.294
Prüfungsvorbereitung sich den Code noch mal anschauen, noch wissen, was Sie gemacht
haben,
01:11:43.294 --> 01:11:48.697
vielleicht nicht bei so einem einfachen Programm, aber gewöhnen Sie sich das ruhig
an, ihr habt
01:11:48.697 --> 01:11:50.574
Kommentare ja Doppel slash prima.
01:11:52.174 --> 01:11:58.361
Das hier ist einfach eine andere Version von dem, was ich Ihnen gerade gezeigt
habe. Ich kann das
01:11:58.361 --> 01:12:04.548
ganze Zeilen brechen und so weiter das ist das gleiche Programm wie das das hier
können Sie lesen
01:12:04.548 --> 01:12:10.735
das hier naja okay vielleicht vielleicht auch nicht uns nicht tun Sie es also
nicht, das ist ihre
01:12:10.735 --> 01:12:17.049
einmalige Warnung dazu schön Beiwerk inklude habe ich Ihnen gesagt, müssen Sie
einfach kurz glauben
01:12:17.049 --> 01:12:20.494
das das muss man machen damit man hinterher eben auch.
01:12:20.814 --> 01:12:26.428
Ein und Ausgabe verwenden kann also hier das und das zusammen mit diesen ein und
ausgabeströmen die
01:12:26.428 --> 01:12:32.043
Main Funktion. Ah, ich habe die geschweiften Klammern gar nicht weiter gesagt, also
alles hier drin
01:12:32.043 --> 01:12:37.658
lebt zwischen dieser öffnenden geschweiften Klammer und wenn ich scrollen kann hier
unten in dieser
01:12:37.658 --> 01:12:43.046
schließenden geschweiften Klammer die ganze Main Funktion muss dazwischen leben,
also sie haben
01:12:43.046 --> 01:12:47.414
dann am Ende der Funktion eben immer sowas als Abschluss generell können sie.
01:12:47.494 --> 01:12:52.868
Die Dinge auch Verschachteln und verschiedene Blöcke da drin haben. Was das
technisch genauer
01:12:52.868 --> 01:12:58.532
bedeutet und Blöcke als Ganzes. Schauen wir uns nächste Woche oder die Woche drauf
an, bin ich mir
01:12:58.532 --> 01:13:04.138
jetzt nicht ganz sicher, aber da kommen wir dann auch noch dazu. Also das ist
einfach wie man das
01:13:04.138 --> 01:13:05.294
ganze Auftrennt gut.
01:13:06.814 --> 01:13:11.721
Auch wie, wie Felix sagte, Wenn sie Fragen haben oder Kommentare. Sie dürfen mich
gerne
01:13:11.721 --> 01:13:17.081
unterbrechen, die Gruppe hier ist nicht zu groß, das sollte also kein ganz großes
Problem sein.
01:13:17.081 --> 01:13:22.440
Melden Sie sich also gerne, insbesondere wie gesagt, wenn da irgendwas schief ging.
Ja, das ist
01:13:22.440 --> 01:13:25.374
total okay darf ich auf Deutsch antworten oder okay?
01:13:32.094 --> 01:13:33.054
Yeah, OK.
01:13:33.094 --> 01:13:33.414
So.
01:13:33.614 --> 01:13:39.438
Das ist ich habe Ihnen absichtlich als mein Programm alles richtig gemacht habe und
ich sie
01:13:39.438 --> 01:13:45.710
überzeugt hatte, hier für 2 hoch 8, dass das funktioniert, habe ich ihnen natürlich
nicht gezeigt.
01:13:45.710 --> 01:13:51.662
Ich kann das auch für 3 hoch 8 machen, das ist prima, ich kann das natürlich auch
für größere
01:13:51.662 --> 01:13:57.998
Zahlen machen wie 14, da müssen Sie mir glauben, dass das das richtige Ergebnis
ist. Die spannenden
01:13:57.998 --> 01:14:02.094
Ergebnisse, die kommen, wenn ich hier 15 eingebe, negative Zahl.
01:14:03.134 --> 01:14:09.272
Und noch besser 16 das hat damit zu tun, dass sie in Ganzzahlen nur beschränkt
große Zahlen
01:14:09.272 --> 01:14:15.951
darstellen können. Das schauen wir nächste Woche ganz kurz noch mal an, was das für
ein Problem mit
01:14:15.951 --> 01:14:22.629
sich bringt und in Woche 8 schauen wir dann noch genauer hinter die Kulissen, wie
das funktioniert,
01:14:22.629 --> 01:14:28.094
hier in dem Fall. Unsere Tests sind gemein, ich werde nur 4 von 5 Tests bestehen.
01:14:28.814 --> 01:14:35.083
Weil der fünfte Test eben absichtlich mit einer heißt auch unfair Test. Also sie
sehen dann, ich
01:14:35.083 --> 01:14:41.483
habe Test 123 104 bestanden. Unfair Test habe ich nicht bestanden, weil diese 256
naja das ist die
01:14:41.483 --> 01:14:47.948
erwartete die erwartete Ausgabe, die ist viel viel größer als das was ich in der
Ganzzahl speichern
01:14:47.948 --> 01:14:51.214
kann und ja 256 auf 8 ist übrigens auch 0 bei mir.
01:14:52.574 --> 01:14:57.469
Wenn Sie darüber nachdenken wollen, wo da vielleicht die 0 herkommt. Wie gesagt,
schauen wir uns
01:14:57.469 --> 01:15:02.416
dann noch genauer an. Aber danke für den Hinweis, dass in dem Fall gab es diese
gemeinen gemeinen
01:15:02.416 --> 01:15:07.261
Tester extra, also Main Funktion war deklariert okay mit dem Int davor, das heißt
die gibt noch
01:15:07.261 --> 01:15:12.004
eine Ausgabe zurück, ich habe das hier vollkommen ignoriert, ich hätte hinten
eigentlich noch
01:15:12.004 --> 01:15:17.053
return 0 hinschreiben können oder sollen einfach nur sagen okay jetzt ist die
Funktion am Ende, ich
01:15:17.053 --> 01:15:21.694
gebe meinem Aufrufer dem Betriebssystem diese 00 ist der Statuscode für das ist
alles okay.
01:15:22.574 --> 01:15:28.881
Ja, und da könnte ich auch andere Statuscodes zurückgeben, wenn irgendwas schief
geht, mache ich
01:15:28.881 --> 01:15:35.122
jetzt hier nicht Anweisung, mach was also Ausdruck, ich lese hier was ein, Ich gebe
da oben was
01:15:35.122 --> 01:15:41.495
aus, ich mache hier so eine Berechnung unten die Rückgabe dieses Return, das
schauen wir uns dann
01:15:41.495 --> 01:15:47.934
in ein paar Wochen, wenn wir uns mit Funktionen beschäftigen, schauen wir uns das
noch genauer an.
01:15:49.214 --> 01:15:54.321
Die Anweisungen werden immer sequentiell ausgeführt. Habe ich alles schon gesagt,
Enden mit
01:15:54.321 --> 01:15:59.821
Semikunden und sie haben den sogenannten Effekt, also der Effekt war ich gebe aus,
Bitte geben sie
01:15:59.821 --> 01:16:05.210
mir was ein, der Effekt war hier ist 2 hoch, 8 ist gleich diese Zahl der Effekt war
ich lese was
01:16:05.210 --> 01:16:10.598
ein, das sind Effekte, ja das ist hier nochmal genauer beschrieben, deklarationen
kann ich auf 2
01:16:10.598 --> 01:16:16.042
Arten haben, ich kann einfach nur so eine Variable deklarieren und noch nicht
initialisieren oder
01:16:16.042 --> 01:16:17.614
in einem Schritt hier unten.
01:16:18.174 --> 01:16:24.612
Die variable B vom Typ Ganzzahl direkt initialisieren, das ist beides möglich.
Genau eine Variable
01:16:24.612 --> 01:16:30.788
habe ich schon gesagt, aber zeig es nochmal, damit wir uns da auch ganz einig sind,
die können
01:16:30.788 --> 01:16:37.161
wechselnde Werte haben, ich hatte ja dieses D. Das hatte dann dreimal verschiedenen
Wert, so eine
01:16:37.161 --> 01:16:43.534
Variable hat erstmal den Namen, also ABCDA to the a wie ich es genannt habe, ein
Typ Ganzzahl den
01:16:43.534 --> 01:16:45.374
Wert den ich reinstecke und.
01:16:45.934 --> 01:16:52.166
Die liegen im Speicher, die haben eine Adresse, das ist das, was Felix vorhin auf
dem Boxcomputer
01:16:52.166 --> 01:16:58.271
als 8. Oder 9, also Zelle 8 oder 9 bezeichnet hat. Und wenn sie jetzt also
hinschreiben, Int a;
01:16:58.271 --> 01:17:04.182
Dann haben Sie eine neue Variable, der Name klar ist a der Typ naja klar ist int
die Adresse
01:17:04.182 --> 01:17:10.479
bestimmt, der Compiler muss sich gar nicht genau anschauen, aber der wert ist
vorerst undefiniert,
01:17:10.479 --> 01:17:14.014
der Wert ist nicht 0, der Wert ist einfach undefiniert.
01:17:14.494 --> 01:17:20.101
Rechnen Sie also jetzt nicht mit so einem Int. A und dann rechnen Sie damit los.
Jetzt rechnen sie
01:17:20.101 --> 01:17:25.709
mal A plus a oder a mal A und geben das dann aus, da kommt halt irgendwas
beliebiges raus, das ist
01:17:25.709 --> 01:17:31.260
auch eine der Spezialitäten von C plus plus, sie können undefiniertes Verhalten
provozieren, also
01:17:31.260 --> 01:17:36.810
hier dieser Wert ist undefiniert, wenn ich den ausgebe oder da kommt halt irgendwas
raus, das ist
01:17:36.810 --> 01:17:39.214
halt im Zweifelsfall nicht sinnvoll, also.
01:17:39.694 --> 01:17:46.207
Schauen Sie, dass sie, bevor Sie eine Variable immer verwenden, die eben auch
selber mit einem Wert
01:17:46.207 --> 01:17:52.590
initialisiert haben oder eben später durch einen Wert gefüllt haben, genau ein
Ausdruck berechnet
01:17:52.590 --> 01:17:59.104
jetzt was, und zwar primärer Ausdruck ist. Einfach nur ein B oder zusammengesetzt B
mal b oder dann
01:17:59.104 --> 01:18:05.618
mit mehr Operatoren zusammen. Also das Mal ist ein Operator, die Zuweisung, das =
das ist nicht das
01:18:05.618 --> 01:18:06.934
mathematische = und.
01:18:07.214 --> 01:18:13.278
Ob 2 Sachen gleich sind, sondern natürlich die Zuweisung links wird rechts
zugewiesen, das heißt
01:18:13.278 --> 01:18:19.405
also, das linke Ding nimmt den Wert vom Rechten an. All das sind Operatoren und die
haben jeweils
01:18:19.405 --> 01:18:25.090
einen Typ und einen Wert, im Prinzip haben sie hier einen Baukasten, sie können die
Sachen
01:18:25.090 --> 01:18:31.028
zusammenstöpseln, wie es Ihnen beliebt, also hier einfach nochmal der variable Name
a primärer
01:18:31.028 --> 01:18:32.734
Ausdruck, Adresse und Name.
01:18:33.494 --> 01:18:38.709
Zusammen Literale sollte ich kurz erwähnen, also diese Zahl 0 ist ein sogenanntes
Literal. Es hat
01:18:38.709 --> 01:18:43.871
einfach den Wert 0, hat selber keine Adresse, weil brauche ich nicht im Speicher
ist einfach ein
01:18:43.871 --> 01:18:48.817
Wert und ist auch ein primärer Ausdruck und dann kann ich zusammensetzen. Also ich
nehme den
01:18:48.817 --> 01:18:54.140
Ausgabestrom, den Operator und diese Zeichenkette dahinter mache ich zum
zusammengesetzten Ausdruck
01:18:54.140 --> 01:18:59.248
und hier unten haben wir eben einen vierfach verschachtelten Ausdruck, alles kein
Problem damit
01:18:59.248 --> 01:19:03.174
machen sie die Berechnung eben entweder primär oder zusammengesetzt oder?
01:19:03.454 --> 01:19:09.442
Und haben da drin variablen Operatoren und so weiter sie können immer Klammern
nutzen, also sie
01:19:09.442 --> 01:19:15.367
können beliebig viele, auch zu viele menschlich unlesbar, viele Klammern hinein
tun, das macht
01:19:15.367 --> 01:19:21.356
keinen Unterschied. Dem Compiler ist auch das wieder egal. Oftmals können Sie das
Nutzen um für
01:19:21.356 --> 01:19:27.470
sich selber einen Ausdruck besser verständlich zu machen, aber übertreiben sie mit
der Klammerung
01:19:27.470 --> 01:19:31.694
nicht und ja, die haben also typwert und einen potenziellen Effekt.
01:19:32.494 --> 01:19:39.014
A mal a. Das ist jetzt ein Ausdruck, der den Typ Int unter der Annahme des A ein
Ganzzahl war. Der
01:19:39.014 --> 01:19:45.602
Wert ist natürlich das Produkt und der Effekt ist, ich habe das berechnet und
wieder verworfen, hat
01:19:45.602 --> 01:19:52.189
also keinen Effekt, ich habe das mal gemacht okay hier hingegen b ist B mal B unter
der Annahme des
01:19:52.189 --> 01:19:58.777
B eben vom Typ Ganzzahles, dann hat auch das am Ende den Typ Int und hat den Wert
Produkt von B und
01:19:58.777 --> 01:20:00.574
B und den Effekt ich weise.
01:20:01.214 --> 01:20:07.502
B, also der Speicherstelle auf die B zeigt, da schreibe ich b mal b. Also das
Ergebnis dieser
01:20:07.502 --> 01:20:14.196
Multiplikation hinein. Der Typ ist fest, aber Wert und Effekt werden dann erst
durch die Auswertung
01:20:14.196 --> 01:20:20.889
des Ausdrucks am Ende bestimmt. Literal habe ich gerade ganz kurz gesagt zur 0. Ja
gut, Literal ist
01:20:20.889 --> 01:20:27.516
einfach ein konstanter Wert, hat Typ und wert sind einfach syntaktische Werte, also
sie können die
01:20:27.516 --> 01:20:30.694
Zahl 1742 0 können sie alle hinschreiben, also.
01:20:31.134 --> 01:20:37.487
Also 0 hat den Typ Ganzzahl und den Wert für uns. 0 verschiedene andere Beispiele
auch noch die
01:20:37.487 --> 01:20:43.707
Operatoren und Operanten. Naja wir haben Links Standards out, wir haben rechts den
String und
01:20:43.707 --> 01:20:49.993
dazwischen den Ausgabeoperator, genauso wie sie das Multiplikationssymbol zwischen
2 Variablen
01:20:49.993 --> 01:20:55.812
schreiben können können oder in dem Fall müssen Sie diesen Ausgabeoperator zwischen
den
01:20:55.812 --> 01:21:00.494
Ausgabestrom und was halt ausgegeben werden soll dazwischen schreiben.
01:21:02.974 --> 01:21:09.246
Genauso beim Eingabebeispiel Wir haben Links den Eingabestrom ziehen, haben die
Zeichen umgedreht,
01:21:09.246 --> 01:21:15.582
also kleiner, kleiner ist das was ich ausgebe, größer, größer ist das, was ich
einlese und ja, dann
01:21:15.582 --> 01:21:21.534
kommt da das, was eingelesen wird, eben in die rechte Variable, in diesen Operand
rechts rein
01:21:21.534 --> 01:21:27.742
zuweisungsoperator wie gesagt = ist nicht ein Vergleich ob die gleich sind wie in
der Mathematik,
01:21:27.742 --> 01:21:29.214
sondern eine Zuweisung.
01:21:29.934 --> 01:21:35.803
Zudem muss ich hier noch kurz was sagen, nämlich so ein Zuweisungsoperator hat
immer einen Linken,
01:21:35.803 --> 01:21:41.553
einen rechten Operanten, das haben wir ja gerade gesehen, das gilt ja auch schon
hier, wir haben
01:21:41.553 --> 01:21:47.362
hier einen linken Operand, einen rechten UPS 1 zu weit, einen rechten Operand hier
und dazwischen
01:21:47.362 --> 01:21:52.094
einfach den Operator, der Zuweisungsoperator hat genauso hier beim Beispiel BS.
01:21:52.494 --> 01:21:55.134
Be my B links to spare.
01:21:55.534 --> 01:22:01.775
Rechts dieses B, mal b. Der wichtige Unterschied ist, dass das was Links steht, das
muss etwas sein,
01:22:01.775 --> 01:22:07.517
was ein sogenannter L wert ist. Das muss was sein, was ich links hinschreiben darf,
was eine
01:22:07.517 --> 01:22:13.571
Adresse hat. Also ich kann nicht zum Beispiel auf die linke Seite schreiben 17
gleich a, weil was
01:22:13.571 --> 01:22:19.563
soll ich da machen, dem Literal der Zahl 17 soll ich den Wert von A zuweisen das
das geht nicht,
01:22:19.563 --> 01:22:24.494
das heißt hier links muss immer was stehen was im Speicher liegt, also deshalb.
01:22:25.134 --> 01:22:31.204
B 17 hingegen, das ist vollkommen okay. Naja, vielleicht mit dem; Weil jetzt nehme
ich einfach
01:22:31.204 --> 01:22:37.598
dieses Literal diesen Wert und stecke den in diese Speicherzelle b rein, also l
wert linker Operand
01:22:37.598 --> 01:22:43.991
muss eine Adresse haben auf der rechten Seite kann ich immer auch einen L wert
nehmen, also jeder L
01:22:43.991 --> 01:22:50.255
wert ist ein r wert aber nicht umgekehrt, rechts kann ich eben die 17 hinschreiben,
aber ich kann
01:22:50.255 --> 01:22:53.614
auch genauso gut BA hinschreiben, das ist auch okay.
01:22:54.334 --> 01:22:59.495
Also ich muss nicht auf der rechten Seite irgendwie immer ja a mal a oder
vielleicht sowas wie a
01:22:59.495 --> 01:23:04.764
plus 0, damit ich das machen darf. Nein, ich darf also immer was ich links
hinschreiben kann, kann
01:23:04.764 --> 01:23:09.818
ich auch rechts hinschreiben, aber nicht umgekehrt. Und was ist der Effekt? Naja
ich weise dem
01:23:09.818 --> 01:23:15.087
linken Operanden, also der Adresse der Variablen oder was auch immer da steht weiß
ich den Wert zu
01:23:15.087 --> 01:23:17.614
der da rechts bei der Berechnung rauskommt und.
01:23:19.294 --> 01:23:25.615
Ja, hier also die Falle unser Operator gleich ist mathematisch, das: ist gleich und
natürlich nicht
01:23:25.615 --> 01:23:31.809
der Vergleichsoperator. Wenn Sie bei uns den Vergleichsoperator haben wollen, das
ist einfach 2 =
01:23:31.809 --> 01:23:38.131
hintereinander werden wir dann sehen. Ja im Handout haben sie dann noch weitere
Erläuterungen zum L
01:23:38.131 --> 01:23:44.197
und R wert und weitere Operatoren, wenn das relevant ist. Gut also links ausdrucken
mit Adresse
01:23:44.197 --> 01:23:47.454
Inhalt an der Speicheradresse entsprechend dem Typ.
01:23:48.654 --> 01:23:54.859
Der kann den Wert ändern, wenn sie so eine Zuweisung machen, dann hat sich unser B
was initial a
01:23:54.859 --> 01:24:00.742
Quadrat war verändert zu a hoch 4 verändert zu a hoch 8 okay also das klassische
kanonische
01:24:00.742 --> 01:24:07.141
Beispiel hier ist der variable Name, rechts ist alles was halt also l Werte sind
erlaubt, aber halt
01:24:07.141 --> 01:24:13.024
auch alles was nicht erlaubt ist. Also sowas wie literal 0. Wie gesagt, Jedes was
ich Links
01:24:13.024 --> 01:24:17.614
schreiben darf kann ich auch rechts hinschreiben, aber nicht umgekehrt.
01:24:18.414 --> 01:24:23.193
Also jedes E Bike kann als normales Fahrrad benutzt werden, ist aber ein bisschen
mühsam, aber nicht
01:24:23.193 --> 01:24:27.876
umgekehrt. Ich habe auf einem normalen Fahrrad nicht plötzlich einen Motor zur
Verfügung, wenn ich
01:24:27.876 --> 01:24:32.560
das möchte, während ich am e Bike den Motor einfach abschalten kann. Habe dann
natürlich ein recht
01:24:32.560 --> 01:24:37.291
schweres Bike, aber gut und der R wert hat eben die Eigenschaft, der kann sich so
nicht ändern, das
01:24:37.291 --> 01:24:40.494
heißt den kann ich nicht speichern, da kann ich nichts dran machen.
01:24:42.494 --> 01:24:48.195
Gut, dann noch zuletzt den Compiler als meinen guten Freund. Also auch wenn ich
Ihnen vorhin gezeigt
01:24:48.195 --> 01:24:53.840
habe, ja der Compiler gibt mir solche unfreundlichen Mitteilungen wie hier ist eine
Warnung oder da
01:24:53.840 --> 01:24:59.313
kommt gleich ein Fehler, das funktioniert ja nicht, ist ja doof, der Compiler kann
mir aber auch
01:24:59.313 --> 01:25:04.787
sehr gut helfen, in dem Fall kann ich zum Beispiel Variablen als konstant
deklarieren, also eine
01:25:04.787 --> 01:25:08.094
konstant ist eine Variable mit einem Unveränderbaren wert.
01:25:09.214 --> 01:25:16.086
Was macht das für einen Sinn? Naja, ich könnte eine variable Speed of Light nennen,
die ist vom Typ
01:25:16.086 --> 01:25:22.751
Ganzzahl und dann schreibe ich hier davor const, das heißt diese Variable ist
konstant, die kann
01:25:22.751 --> 01:25:29.554
ich jetzt hier initial einmal setzen und nie wieder verändern und dann ist das hier
in der Tat die
01:25:29.554 --> 01:25:36.358
Geschwindigkeit in Meter pro Sekunde 299000001 bisschen mehr, das heißt also ich
verwende hier das
01:25:36.358 --> 01:25:38.094
const vor der Definition.
01:25:38.734 --> 01:25:44.672
Das ist prima, denn jetzt hilft mir der Compiler und unterstützt mich dabei, wenn
ich irgendwo
01:25:44.672 --> 01:25:50.927
später in meinem Programm hingehe und die Lichtgeschwindigkeit verändere. Abgesehen
davon, dass die
01:25:50.927 --> 01:25:57.055
Physiker nicht nicht glücklich wären mit mir, geht das nicht, sagt der Compiler,
nein, können sie
01:25:57.055 --> 01:26:02.994
nicht machen warum? Naja, der Compiler kann einfach überprüfen, kommt diese
Konstante irgendwo
01:26:02.994 --> 01:26:05.774
links vor, wenn ja Fehler ist verboten also.
01:26:06.134 --> 01:26:12.085
Es sind Hilfsmittel zur Vermeidung von Fehlern, die Konstanten erlauben die
garantierte Einhaltung.
01:26:12.085 --> 01:26:18.037
Davon zeige ich Ihnen vielleicht einfach in unserem Programm hier, wenn ich dieses
D hier als Kunst
01:26:18.037 --> 01:26:23.809
deklariere, dann darf ich es hier einmal initialisieren, das ist mir es erlaubt,
aber ich kriege
01:26:23.809 --> 01:26:26.094
dann den Fehler in Zeile 9, hoffe ich.
01:26:28.734 --> 01:26:36.065
Ja, sehr schön. Dann können wir uns auch gleich nämlich anschauen, wie lese ich das
Ganze hier denn
01:26:36.065 --> 01:26:43.323
überhaupt, also was sagt mir der, der erzählt mir irgendwas var LIP cx run project
Files ignoriere
01:26:43.323 --> 01:26:50.432
ich mal alles aha main cpp aha in Main cpp da ist irgendwas los und zwar in der
Funktion mit dem
01:26:50.432 --> 01:26:54.654
mit der Signatur int main aha was ist da los main cpp 95.
01:26:55.774 --> 01:27:01.782
Also was mir das sagen will ist in der Datei Main cpp wie erwähnt, ich habe hier
die Projektdateien,
01:27:01.782 --> 01:27:07.731
hier sehe ich nur Main CPP in meiner Lösung sehe ich noch einen Haufen andere
Dateien die sie nicht
01:27:07.731 --> 01:27:13.439
sehen würden, aber da könnten mehr Dateien sein, deshalb ist es relevant, dass mir
der Compiler
01:27:13.439 --> 01:27:19.207
sagt welche Datei ist es 9: 5 das ist Zeile 9 spalte 5 also Zeile 9 hier vorne sehr
nett Zeile 9
01:27:19.207 --> 01:27:23.534
hier ist 1 das ist ein Tab, das kann ich natürlich nicht zählen so also.
01:27:24.214 --> 01:27:29.904
Also hier 12345 Aha, hier dieses Assignment das ist das Problem, das sagt mir der
Compiler auch
01:27:29.904 --> 01:27:35.475
Fehler. Also jetzt ist es ein Error, nicht eine Warnung, eine Warnung kann ich
ignorieren und
01:27:35.475 --> 01:27:41.046
einfach mal riskieren was passiert, das ist nicht gut, aber kann ich ein Error,
dann hört der
01:27:41.046 --> 01:27:46.497
Compiler auf und das ganze Programm kann nicht mehr ausgeführt werden und zwar sagt
mir das
01:27:46.497 --> 01:27:48.654
Assignment of Read only variable de.
01:27:49.454 --> 01:27:55.147
Read only weil ich hier cons davor geschrieben habe. Dann zeigt mir der Compiler
netterweise hier ja
01:27:55.147 --> 01:27:55.774
mit diesem.
01:27:56.534 --> 01:28:00.414
Squiggly lines or don't hear them not cursor other than them heads that's.
01:28:00.534 --> 01:28:05.196
Ich mir gedacht, dieses Gleiche ist das Problem und der ist auch nett. Der least
noch weiter sagt
01:28:05.196 --> 01:28:09.954
mir und übrigens du hast denselben Fehler gerade in der Zeile drunter noch mal.
Also sie sehen hier
01:28:09.954 --> 01:28:14.521
ich kann mehrere Fehler bekommen wenn sie viele Fehler haben, irgendwann schneidet
der Compiler
01:28:14.521 --> 01:28:19.231
vielleicht dann auch mal ab und zeigt ihnen nicht unbedingt alle Fehler, aber sie
sehen jetzt hier
01:28:19.231 --> 01:28:23.894
mal eine Auswahl von Fehlern, die muss ich beheben bevor ich weitermachen darf,
also in dem Fall.
01:28:24.294 --> 01:28:29.744
Warum jetzt das d konstant sein soll weiß ich auch nicht, aber wenn es eben
sinnvoll ist, können sie
01:28:29.744 --> 01:28:35.140
damit garantieren, dass das Ganze so funktioniert. Also das garantiert jetzt, dass
dieser Wert sich
01:28:35.140 --> 01:28:40.427
nicht mehr ändern kann. Im Prinzip können Sie sich das so vorstellen, dass
Konstanten so eine Art
01:28:40.427 --> 01:28:45.768
ja Variable hinter Glas sind, also wir haben normale Variablen hier vorne, das ist
so eine Box, da
01:28:45.768 --> 01:28:51.164
können Sie beliebige Zahlen reinstecken und verändern und hier hinten haben sie
diese Konstante, da
01:28:51.164 --> 01:28:52.854
ist diese Zahl auch drin, aber.
01:28:53.254 --> 01:28:58.741
Sie können die immer lesen und zugreifen und schauen, ja, sie können durchs Glas
durchschauen, aber
01:28:58.741 --> 01:29:04.229
sie können da nicht mehr reingreifen, sie können das nicht mehr verändern oder im
Zweifelsfall eben
01:29:04.229 --> 01:29:08.996
nicht kaputt machen. Das ist die Idee davon dazu von uns legen wir Ihnen ans Herz,
die
01:29:08.996 --> 01:29:14.484
Kunstrichtlinie, dass sie bei jeder Variable einfach drüber nachdenken, es muss die
sich im Verlauf
01:29:14.484 --> 01:29:18.254
des Ganzen ändern oder nicht, wenn die sich nicht ändern soll, dann.
01:29:18.614 --> 01:29:23.098
Dann schreiben Sie doch bitte das Schlüsselwort const davor. Und wenn sie dann
später im Programm
01:29:23.098 --> 01:29:27.675
merken, ah, ich muss die Variable doch ändern, kriegen Sie den Fehler, den wir
gerade gesehen haben
01:29:27.675 --> 01:29:32.160
und sie können dann zurückgehen und sagen okay ja, jetzt habe ich verstanden, diese
Variable muss
01:29:32.160 --> 01:29:36.598
sich leider doch ändern können und nehmen es dann weg, und zwar wenn sie das
richtig machen, ein
01:29:36.598 --> 01:29:39.974
Programm, welches diese Richtlinie befolgt, das heißt dann const korrekt.
01:29:40.534 --> 01:29:45.323
Und damit sind wir am Ende der heutigen Vorlesung. Beachten Sie, dass wir nächste
Woche uns montags
01:29:45.323 --> 01:29:50.016
um 8 zur Vorlesung treffen und dienstags um 10, also zu dieser Zeit hier das Lab
stattfindet, bis
01:29:50.016 --> 01:29:50.694
nächste Woche.