PDF-Datei

Werbung
hue01-ml
November 23, 2016
Bitte tragen Sie Ihre Matrikelnummern und E-Mail-Adressen zeilenweise in die Zelle oberhalb
dieser Zelle ein. Beachten Sie: Die Abgabe muss mit Ihrem Gruppenaccount erfolgen, den Sie
in der Präsenzübung erhalten haben! Abgaben, die über Ihren Einzelaccount erfolgen, werden
ignoriert. Achten Sie dabei streng auf die Formatierung, denn die Auswertung erfolgt automatisch. Benutzen Sie keine Leerzeilen. Nur zwischen Matrikelnummer und E-Mail-Adresse darf ein
Leerzeichen stehen.
Format:
MatrikelNummer E-Mail-Adresse
z.B.:
123456 [email protected]
Abgabe: 6.11., 23:59
0.1
Aufgabe 1: Boolesche Variablen und Vergleiche
a) (1 Punkt) Die Variablen a, b und c sind boolesche Variablen unbekannter Belegung.
Verkürzen Sie folgende boolesche Ausdrücke so weit wie möglich und geben Sie die Zwischenschritte an:
( (True or a ) and ( False or b) )
( (a or b ) or ( False or b) )
(a or b) and (a or c)
(a and (a or b)) and True
a and b or b and c and (b or c)
( (True or a) and (False or b) )
= True and b
= b
( (a or b ) or ( False or b ) )
= ( a or b ) or b
= a or b
( a or b ) and ( a or c )
= a or (b and c )
(a and (a or b)) and True
= ((a and a) or (a and b)) and True
= (a or (a and b)) and True
1
= a and True
= a
a
=
=
=
and b or b and c and (b or c)
(a and b) or ((b and c) and (b or c))
(a and b) or (b and c)
b and (a or c)
b) (1 Punkt) Nehmen Sie an, dass die Variablen a, b und c die folgenden Werte haben:
a = True
b = True
c = False
Welche Werte werden die Variablen d,e,f und g nach Ausführung des folgenden Codes haben?
Versuchen Sie, die Aufgabe ohne Hilfe von Python zu lösen.
d
e
f
g
=
=
=
=
b and c
b or c
not a and c
(b and c) or not a
d = False
e = True
f = False
g= False
c) (2 Punkte) Nehmen Sie die folgende Belegung an:
a =
b =
c =
d =
foo
2
-1
"2"
0
= "foo"
Welche der folgenden Bedingungen sind wahr?
a < b
(a < b) and d
(a > b) or d
b <= a
b >= b
b > d
a != b
b == -1
a == c
c == "2"
foo == "foo"
2
a < b
(a < b) and d
(a > b) or d
b <= a
b >= b
b > d
a != b
b == -1
a == c
c == "2"
foo == "foo"
0.2
False
False
True
True
True
False
True
True
False
True
True
Aufgabe 2: Variablen
a) (2 Punkte) Welche der folgenden Namen für Variablen sind in Python gültig? Begründen
Sie Ihre Antwort:
or
_or
var
var2
2var
my_var
dein-var
• or Ist nicht gültig. or ist ein Schlüsselwort und darf nicht als Variablennamen verwendet
werden.
• 2var Ist nicht gültig, da es mit eine Zahl beginnt.
• dein-var Ist kein gültiger Variablenname. Das “-” Zeichen darf nicht innerhalb eines Variablennamens verwendet werden.
• Alle andere Variablennamen sind gültig.
b) (2 Punkte) Benennen Sie die Typen der folgenden Variablen:
a
b
c
d
e
f
g
=
=
=
=
=
=
=
type(a)
type(b)
type(c)
type(d)
type(e)
type(f)
type(g)
4
4.0
'4.0'
False
'True'
'Test'
int
=
=
=
=
=
=
=
int
float
str
bool
str
str
type
3
c) (2 Punkte) Führen Sie die folgenden Anweisungen hintereinander in Python aus und identifizieren Sie, welche falsch sind. Begründen Sie Ihre Antwort.
1d = 2
x = 2
y = X + 4
c = 4**3**2**3
_ = ((c-454)*c + 64))
rabat = 12%
menge = 120.preis = 150e
email = [email protected]
and
Haltbarkeitsdatum = 01.Nov.2017
class = 'Medizin, gr 2"
continue_ = x > 0
1d = 2
# falsche Anweisung. Ein Variablenname
# darf als erstes Zeichen keine Ziffer haben.
x = 2
# richtige Anweisung
y = X + 4
# falsche Anweisung, statt eines kleinen x
# wurde ein großes X verwendet.
# X ist hier nicht definiert.
c = 4**3**2**3
# richtige Anweisung. Doppelte * definiert Potenzen
_ = ((c-454)*c + 64))
# falsche Anweisung. Eine Klammer zuviel gesetzt.
rabat = 12%
# falsche Anweisung. Syntaxverletzung.
# Das Prozentzeichen ist vom Datentyp str
menge = 120.-
# falsche Anweisung. Syntaxverletzung.
preis = 150e
# falsche Anweisung. Das e-Zeichen darf nicht
# direkt an einen int Wert geschrieben werden.
email = [email protected]
# falsche Anweisung. Syntaxverletzung.
# Eine Mail Adresse muss vom Typ str sein und
# in Anführungszeichen geschrieben werden.
and
# falsche Anweisung. Syntaxverletzung.
# Das Schlüsselwort "and" muss zwischen
# zwei Ausdrücken stehen.
Haltbarkeitsdatum = 01.Nov.2017 # falsche Anweisung. Syntaxverletzung.
# 01.Nov.2017 ist vom Datentyp str und
4
# muss in Anführungszeichen geschrieben werden.
class = 'Medizin, gr 2"
'# falsche Syntax. Es fehlt ein schließendes
# einfaches Anführungszeichen.
# oder es wurde ein einfaches Anführungszeichen
# mit einem doppelten verwechselt.
# Zudem ist "class" ein Schlüsselwort und
# darf nicht als Variablenname verwendet werden
continue_ = x > 0
# richtige Anweisung. x ist definiert,
# continue_ ist vom Typ bool und hat den Wert True
0.3
Aufgabe 3: Mathematische Operationen
Mit Python kann man mathematische Ausdrücke auswerten lassen. Das wird durch die folgenden
mathematischen Operatoren: +, -, *, /, Potenz (**) und Modulo (%) unterstützt.
a) (2 Punkte) Sie möchten das Produkt von zwei Variablen a und b berechnen. Benennen Sie
alles, was an der folgenden Implementierung falsch ist und erklären Sie kurz, wie man dies
korrigieren kann:
c = a*b
a = 20
b = 66974
print(C)
In [1]: a = 20
b = 66974
c = a*b
print(c)
1339480
b) (2 Punkte) Schreiben Sie ein Programm, welches das Gesamtvermögen nach 3 Jahren bei
einem Startkapital von 1000 Euro und einem Zinssatz von 5 % berechnet. Das Gesamtvermögen rechnet man mit der folgenden Formel aus:
p n
K 1+
,
100
wobei K, n und p entsprechend das Startkapital, Anzahl der Jahren und der Zinssatz sind.
In [2]: K = 1000.00
n = 3
p = 5
# Startkapital
# Anzahl der Jahre
# Zinssatz
G = K * ((1+(5/100)) * (1+(5/100)) * (1+(5/100)))
print("Gesamtvermögen nach", n, "Jahren bei einem Startkapial von",
K, "e und einem Zinssatz von",p, "% ist:", G)
5
Gesamtvermögen nach 3 Jahren bei einem Startkapial von 1000.0 e und einem Zinssatz
c) (2 Punkte) Die folgende Funktion:
"
#
1 x−m 2
1
exp −
f (x) = √
2
s
2·π
ist eine sehr wichtige Funktion in der Wahrscheinlichkeitstheorie und wird oft zur Beschreibung zufälliger Vorgänge benutzt (die Dichte einer normalverteilten Zufallsvariablen). Berechnen
Sie diese Funktion in Python für die folgenden Parameter: m = 0, s = 1 und x = 10.
√
Hinweis: Approximieren Sie π ≈ 3.14, exp(x) = 2.718x und für die x-Operation benutzen
Sie
x**0.5
in Python.
In [3]: m = 0
s = 1
x = 10
pi = 3.14
exp_part = 2.718**(-1/2*((x-m)/s)**2)
f = (1/(2*pi)**0.5)*exp_part
print("Ergebniss:",f)
Ergebniss: 7.736553948565042e-23
d) (2 Punkte) Sie möchten die folgenden Gleichungen in Python überprüfen:
(a + b)2 = a2 + 2ab + b2
(a − b)2 = a2 − 2ab + b2
Ein Kollege von Ihnen hat dazu den folgenden Code geschrieben:
a = 4.5
b = 7.7
sum_eq1 = a^2 + 2ab + b^2
sum_eq2 = a^2 - 2ab + b^2
pow_eq1 = (a + b)^2
pow_eq2 = (a - b)^2
print('Erste Gleichung:', sum_eq1, '=?', pow_eq1)
print('Zweite Gleichung:', sum_eq2, '=?', pow_eq2)
6
Finden Sie die Fehler und schreiben Sie den korrigierten Code auf.
In [4]: a = 4.5
b = 7.7
sum_eq1 = a**2 + 2*a*b + b**2
sum_eq2 = a**2 - 2*a*b + b**2
pow_eq1 = (a + b)**2
pow_eq2 = (a - b)**2
print('Erste Gleichung:', sum_eq1, '=?', pow_eq1)
print('Zweite Gleichung:', sum_eq2, '=?', pow_eq2)
print('Erste Gleichung ist gleich: ',
round(sum_eq1,2) == round(pow_eq1,2))
print('Zweite Gleichung ist gleich: ',
round(sum_eq2,2) == round(pow_eq2,2))
Erste Gleichung: 148.84 =? 148.83999999999997
Zweite Gleichung: 10.240000000000009 =? 10.240000000000002
Erste Gleichung ist gleich: True
Zweite Gleichung ist gleich: True
e) (2 Punkte) Die Lösungen der quadratischen Gleichung ax2 + bx + c = 0 kann man durch die
folgende Formel finden:
√
−b ± b2 − 4ac
x1,2 =
.
2a
Finden Sie die Fehler in der folgenden Implementierung und schreiben Sie sie fehlerfrei:
a = 2; b = 1; c = 2
D= (b**2 - 4*a*c)*0.5;
x_1 = (-b + D)/2*a;
x_2 = -(b + D)/2*a;
print(x_1, x_2)
In [5]: a, b, c = 2, 1, 2
D= (b**2 - 4*a*c)**0.5;
x_1 = (-b + D)/(2*a);
x_2 = -(b + D)/(2*a);
print(x_1, x_2)
(-0.24999999999999994+0.9682458365518543j) (-0.25000000000000006-0.9682458365518543
7
Herunterladen