Skip to content

Commit

Permalink
ÜBUNG YUP DUP
Browse files Browse the repository at this point in the history
  • Loading branch information
MrDiver committed Sep 30, 2024
1 parent f919b09 commit 8f50a7e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 292 deletions.
211 changes: 19 additions & 192 deletions exercises/Aufgabe2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,22 @@
\end{solution}
\end{subtask*}
\begin{subtask*}[points=0]{Assignment}
Ergänzt im folgenden Listing die fehlenden Variablenzuweisungen, so dass keine Fehler auftreten und am Ende {\ttfamily variable7} zu {\ttfamily true}, {\ttfamily variable2} zu {\ttfamily 5} und {\ttfamily variable5} zu {\ttfamily \verb+"abc"+} auswertet.
Ergänzt im folgenden Listing die fehlenden Variablenzuweisungen, so dass keine Fehler auftreten und am Ende {\ttfamily variable7} zu {\ttfamily True}, {\ttfamily variable2} zu {\ttfamily 5} und {\ttfamily variable5} zu {\ttfamily \verb+"abc"+} auswertet.
\begin{codeBlock}[]{minted language=python}
variable1 = // hier Zuweisung 1 einsetzen
variable1 = # hier Zuweisung 1 einsetzen
variable2 = 3
variable3 = // hier Zuweisung 2 einsetzen
variable2 += variable1
variable3 = # hier Zuweisung 2 einsetzen
variable2 = variable2 + variable1
if variable3 > 5:
variable2 = 0
else:
variable2 *= variable3
variable4 = // hier Zuweisung 3 einsetzen
variable5 = // hier Zuweisung 4 einsetzen
variable5 += variable4
variable6 = // hier Zuweisung 5 einsetzen
variable4 = # hier Zuweisung 3 einsetzen
variable5 = # hier Zuweisung 4 einsetzen
variable5 = variable5 + variable4
variable6 = # hier Zuweisung 5 einsetzen
variable7 = variable6 > variable2 * 2
variable5 += "c"
variable5 = variable5 + "c"
print(variable7)
print(variable2)
print(variable5)
Expand All @@ -90,19 +90,19 @@
\begin{subtask*}[points=0]{Operatoren}
Es seien die folgenden Variablen deklariert und initialisiert:
\begin{codeBlock}[]{title=\codeBlockTitle{asdf},minted language=python}
x : int = 6
y : int = 7
z : int = 0
a : int = False
x: int = 6
y: int = 7
z: int = 0
a: int = False
\end{codeBlock}
Welchen Wert enthält die Variable \pythoninline{b} jeweils nach Ausführung der folgenden Anweisungen?
\begin{enumerate}
\item \pythoninline{b : bool = x > 5 || y < 7 && z != 0}
\item \pythoninline{b : bool = x * y != y * x && x / z == 0}
\item \pythoninline{b : bool = !(x == y) && z <= 0}
\item \pythoninline{b : bool = x >= 11 || x < 9 && !(y == 2) && x + y * z > 0 || a}
\item \pythoninline{b : bool = z != z || !a && x - y * z <= 0}
\item \pythoninline{b : bool = !a && z < y - x}
\item \pythoninline{b: bool = x > 5 or y < 7 and z != 0}
\item \pythoninline{b: bool = x * y != y * x and x / z == 0}
\item \pythoninline{b: bool = not (x == y) and z <= 0}
\item \pythoninline{b: bool = x >= 11 or x < 9 and not(y == 2) and x + y * z > 0 or a}
\item \pythoninline{b: bool = z != z or not a and x - y * z <= 0}
\item \pythoninline{b: bool = not a and z < y - x}
\end{enumerate}
\begin{solution}
Expand Down Expand Up @@ -152,178 +152,5 @@
\end{codeBlock}
\end{solution}
\end{subtask*}
\begin{subtask*}[points=0]{Taschenrechner}
In dieser Aufgabe soll ein sehr einfacher Taschenrechner implementiert werden, wobei wir uns dabei auf die Grundrechenarten beschränken wollen. Euer Programm soll nacheinander drei Eingaben entgegennehmen, zwei Operanden (\textbf{ganze Zahlen}) und einen Operator ({\ttfamily +, -, *, /}). Schließlich soll der Taschenrechner eine Ausgabe mit dem entsprechenden Ergebnis liefern. Vergesst nicht, euer Programm zu testen.
\begin{solution}
\begin{codeBlock}[]{minted language=python}
op1 : int = int(input("Wie lautet der erste Operand: "))
op2 : int = int(input("Wie lautet der zweite Operand: "))
op : str = input("Wie lautet der Operator: ")
ergebnis : 0 = 0
ergebnisOk : bool = True
if op == "+":
ergebnis = op1 + op2
elif op == "-":
ergebnis = op1 - op2
elif op == "*":
ergebnis = op1 * op2
elif op == "/":
if op2 == 0:
ergebnisOk = False
print("Division durch 0 ist nicht erlaubt!")
else:
ergebnis = op1 / op2
else:
ergebnisOk = False
print("Keine gültige Eingabe!")
if ergebnisOk:
print(f"Das Ergebnis ist: {ergebnis}")
\end{codeBlock}
\end{solution}
\end{subtask*}
\end{task}
\begin{task}[points=auto]{Zum Weiterdenken \stage3}
\begin{subtask*}[points=0]{Entscheidungsbaum}
Wenn große Mengen von Daten verarbeitet werden müssen, geht es oft darum, diese in bestimmte Gruppen bzw. Klassen einzuteilen, zum Beispiel sollen häufig fehlerhafte Daten von korrekten getrennt werden. Eine mögliche Klassifikationsmethode, die für Tabellendaten genutzt werden kann, ist ein Entscheidungsbaum.\\
\\
Entscheidungsbäume funktionieren so, dass man für einen Datenpunkt (also eine Tabellenzeile) nach und nach die Spalteneinträge überprüft, bis man an einem Punkt ankommt, wo man sicher die Klasse festlegen kann. Das kann je nach dem, in welcher Reihenfolge man die Spalten betrachtet, unterschiedlich kompliziert sein (manchmal reicht sogar eine einzelne Spalte, um sicher zu wissen, welche Klasse es ist).\\
\\
Deine Aufgabe ist es, mit den Daten in der folgenden Tabelle einen Entscheidungsbaum zu konstruieren, der euch ausgibt, wann es sich lohnt, ins Freibad zu gehen (so, wie es in der Tabellenspalte ganz rechts festgelegt ist). Lege dazu am Besten pro Spalte eine Variable an, wo du dann Zeile für Zeile die Werte nacheinander durchprobieren kannst, um deine Implementierung zu testen.
\begin{table}[ht]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
Wettervorhersage & Temperatur & Luftfeuchtigkeit & Wind & Freibad \\\hline
sonnig & 29 & hoch & false & Ja \\\hline
sonnig & 29 & mittel & true & Ja \\\hline
regen & 13 & mittel & true & Nein \\\hline
bewölkt & 22 & mittel & false & Ja \\\hline
regen & 13 & hoch & false & Nein \\\hline
bewölkt & 29 & mittel & false & Ja \\\hline
sonnig & 14 & mittel & true & Nein \\\hline
bewölkt & 27 & hoch & true & Ja \\\hline
bewölkt & 14 & hoch & true & Nein \\\hline
sonnig & 20 & mittel & false & Ja \\\hline
regen & 27 & mittel & false & Nein \\\hline
bewölkt & 14 & mittel & false & Nein \\\hline
regen & 20 & mittel & true & Nein \\\hline
sonnig & 22 & hoch & true & Ja \\\hline
sonnig & 14 & hoch & false & Ja \\\hline
bewölkt & 22 & mittel & true & Nein \\\hline
regen & 29 & mittel & true & Nein \\\hline
regen & 22 & hoch & false & Nein \\\hline
\end{tabular}
\end{table}
\newpage
Wenn du überprüfen möchtest, ob dein Entscheidungsbaum gut funktioniert, kannst du auch noch diese Datenpunkte ausprobieren:
\begin{table}[ht]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
Wettervorhersage & Temperatur & Luftfeuchtigkeit & Wind & Freibad \\\hline
bewölkt & 15 & hoch & false & Nein \\\hline
sonnig & 28 & mittel & false & Ja \\\hline
sonnig & 21 & hoch & false & Ja \\\hline
regen & 27 & hoch & false & Nein \\\hline
regen & 20 & mittel & false & Nein \\\hline
bewölkt & 28 & hoch & false & Ja \\\hline
sonnig & 13 & hoch & true & Nein \\\hline
bewölkt & 21 & hoch & false & Ja \\\hline
regen & 27 & hoch & true & Nein \\\hline
\end{tabular}
\end{table}
\textit{Hinweis: Euer Programm soll am Ende so funktionieren, dass ihr die Eckdaten (also Wettervorhersage, Temperatur, Luftfeuchtigkeit und Wind) eingebt, und das Programm dann Antwortet, ob ihr ins Freibad gehen solltet oder nicht.}
\begin{solution}
\begin{codeBlock}[]{minted language=python}
// hier die Werte eintragen
wettervorhersage : string = "regen"
temperatur : int = 27
luftfeuchtigkeit : string = "hoch"
windig : bool = True
// Die Zahlenwerte, gegen die verglichen wird,
// können von den hier eingetragenen abweichen.
// Eure Lösung kann auch anders vorgehen, wenn die Testdaten
// korrekt erkannt werden, stimmt sie wahrscheinlich trotzdem.
freibad : bool = False
if wettervorhersage == "regen":
freibad = False
elif temperatur > 24:
freibad = True
elif wettervorhersage == "sonnig":
freibad = !(temperatur < 18 && windig)
else:
freibad = temperatur >= 18 && !windig
if freibad:
print("Geh ins Freibad")
else:
print("Bleib zu Hause")
\end{codeBlock}
\end{solution}
\end{subtask*}
\begin{subtask*}[points=0]{Ein einfacher Prozessor}
Prozessoren bestehen im allgemeinen aus einer kleinen Anzahl von Registern, mit denen die eigentlichen Berechnungen durchgeführt werden. Im Folgenden sollt ihr das Verhalten eines kleinen Prozessors in Python simulieren. \\
Der Prozessor soll aus 4 Registern bestehen, die beliebige Werte speichern können (Diese könnt ihr als Variablen modellieren). Außerdem kann der Prozessor grundlegende Berechnungen ({\ttfamily +, -, *, /, \%}) auf seinen Registern durchführen und Werte in Registern vergleichen (\textbf{Achtung:} Ihr müsst also nach jeder einzelnen Rechung oder einem Vergleich das Ergebnis in eines der Register speichern, und dürft nicht mehrere Rechnungen nacheinander ausführen (Also statt \pythoninline{a = 2 + 3 * 4} müsstet ihr \pythoninline{b = 3 * 4} gefolgt von \pythoninline{a = 2 + b} schreiben. If-Abfragen sind auf diese Art möglich: \pythoninline{if (a)}, also kein \pythoninline{else} und ihr müsst den Wahrheitswert, den ihr mit if überpfürt, zuerst in ein Register schreiben.)) \\
In den Berechnungen dürft ihr außer den Registern auch Zahlenwerte verwenden, jedoch nicht das Register in das das Ergebnis geschrieben wird.\\
Erstellt nun mit diesen Randbedinungen ein Programm, dass das folgende tut: \\
\begin{codeBlock}[]{minted language=python}
lese eine Ganzzahl a ein
lese eine Ganzzahl b ein
lese eine Ganzzahl c ein
verdoppele a und addiere 3 hinzu
lese eine Ganzzahl d ein
gib b und c aus
wenn a > d gilt, setze d = a
wenn a < d gilt, speichere Wert c = d - a, sonst speichere Wert c = 0
setze a = c * d + a * a
setze Wert b = a + d
setze c = b + d
gib a,b,c und d aus
\end{codeBlock}
\begin{solution}
\begin{codeBlock}[]{minted language=python}
a : int = int(input("Ganzzahl a: "))
b : int = int(input("Ganzzahl b: "))
c : int = int(input("Ganzzahl c: "))
a *= 2
a += 3
d : int = int(input("Ganzzahl d: "))
print(b)
print(c)
b = a > d
if b:
d = a
b = a < d
if b:
c = d - a
b = !(b)
if b:
c = 0
b = a * a
a = int(b)
b = c * d
c = a + int(b)
a = c
b = a + d
c = int(b) + d
print(a)
print(b)
print(c)
print(d)
\end{codeBlock}
\end{solution}
\end{subtask*}
\end{task}
\end{document}
Loading

0 comments on commit 8f50a7e

Please sign in to comment.