0% fanden dieses Dokument nützlich (0 Abstimmungen)
8 Ansichten65 Seiten

Inf V1

In dieser Informatik-Vorlesung, geleitet von Felix Friedrich und Ralf Sass, wird eine Einführung in die Informatik gegeben, wobei Programmiererfahrung nicht erforderlich ist. Der Kurs konzentriert sich auf die Automatisierung geistiger Tätigkeiten und die Lösung von Problemen mit Algorithmen und der Programmiersprache C++. Ein zentraler Begriff der Informatik, der Algorithmus, wird als schrittweise Handlungsanweisung zur Lösung von Problemen definiert.

Hochgeladen von

Max Schaffner
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als TXT, PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
8 Ansichten65 Seiten

Inf V1

In dieser Informatik-Vorlesung, geleitet von Felix Friedrich und Ralf Sass, wird eine Einführung in die Informatik gegeben, wobei Programmiererfahrung nicht erforderlich ist. Der Kurs konzentriert sich auf die Automatisierung geistiger Tätigkeiten und die Lösung von Problemen mit Algorithmen und der Programmiersprache C++. Ein zentraler Begriff der Informatik, der Algorithmus, wird als schrittweise Handlungsanweisung zur Lösung von Problemen definiert.

Hochgeladen von

Max Schaffner
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als TXT, PDF, TXT herunterladen oder online auf Scribd lesen

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.

Das könnte Ihnen auch gefallen