Ăbungsaufgaben â alle gelöst
Status: GEPRĂFT. Aufgabentexte wörtlich aus âBeispiele Klausuraufgaben V4.1â (Prof. Mehler, OLAT), Lösungen aus der offiziellen Musterlösung. Jeder Python-Codeblock wurde mit Python 3.12 ausgefĂŒhrt und die Ausgabe verglichen.
Prof. Mehler empfiehlt diese Aufgaben ausdrĂŒcklich als Hauptvorbereitung. Reihenfolge und Punktzahlen wie im Original.
def ungerade(n):
â summe = 0
â i = 1
â while i <= n:
â â summe = summe + i
â â i = i + 2
â return summe
print(ungerade(10)) # Ausgabe: 251 def summe(a, b=0):2 return a + b + c4 resultat1 = summe()5 resultat2 = summe(3)6 resultat3 = summe(3, 2, 1)8 def summe3(a int, b int, c float = 0.0) -> float9 return "Ergebnis: " + a + b + c11 print(summe3(3.5, 2, 1))13 def hallo(vorname, nachname):14 print("Hallo ", vorname + " " + nachname)16 hallo("Jane", "Doe")17 hallo(vorname="Du", nachname="Da")18 hallo(nachname="Da", vorname="Du")19 hallo(nachname = "Du", "Da")21 def zeigeliste(eineliste: list[int]):22 while element in eineliste:23 print(element)25 zeigeliste(1, 2, 3)26 zeigeliste([1, 2, 3])27 zeigeliste([1,2.5,3])| Zeile | Fehler / Korrektur |
|---|---|
| 2 | return a + b + c: kein c (Variable existiert nicht) |
| 4 | summe(): mindestens ein Argument nötig |
| 6 | summe(3, 2, 1): kein 3. Argument erlaubt |
| 8 | Doppelpunkte fehlen: a: int, b: int; und : am Zeilenende |
| 9 | keine String-Addition mit Zahlen ("Ergebnis: " + a geht nicht) |
| 11 | falscher Wert 3.5 (float statt int fĂŒr a) |
| 19 | hallo(nachname = "Du", "Da"): 2. Parameter muss auch benannt werden |
| 22 | for statt while |
| 25 | zeigeliste(1, 2, 3): Listenklammern fehlen, richtig ist [1, 2, 3] |
| 27 | [1, 2.5, 3]: kein 2.5 (float in list[int]) |
Die Zeilen 5, 16, 17, 18, 26 sind korrekt.
| Ausdruck | Ergebnis | Datentyp |
|---|---|---|
not ((20 + 17) == 40) |
True |
bool |
((3.3 + 7.7) != 5) and True |
True |
bool |
11 // 2 + 2.1 |
7.1 |
float |
(3 < 3) or (3 >= 3) |
True |
bool |
(True and (x == x)) or False |
True |
bool |
6.6 / 3.3 == 1.8 + 0.2 |
True |
bool |
3 // 2 * 2 |
2 |
int |
3 / 2 * 2 |
3.0 |
float |
(13 // 3 - 3) * 10 |
10 |
int |
3 + -2 * -2 % 5 |
7 |
int |
menge1 is menge2 (mit {1,2} je) |
False |
bool |
menge1 in menge2 |
False |
bool |
Merke: / liefert immer float · % bindet so stark wie * â -2*-2%5 = 4%5 = 4 · is vergleicht Objekt-IdentitĂ€t, == den Inhalt.
feld = [3, 9, -2, 5]
maxi = feld[0]
for element in feld:
â if element > maxi:
â â maxi = element
print(maxi) # 9
# Standard-Funktion:
print(max(feld)) # 9zahl = int(input("Ganze Zahl eingeben: "))
if zahl < 0:
â print("Vorzeichen -")
elif zahl == 0:
â print("kein Vorzeichen")
else:
â print("Vorzeichen +")liste = ["Apfel", "Ananas", "Apfel"] · liste[2] = "Kiwi" · liste.append("Birne") · dann Ausgaben von liste, liste.index("Apfel"), liste.count("Apfel"), einer List Comprehension [n / 2 for n in range(5)], deren Durchschnitt, [n for n in range(1, 9) if n % 2 == 0] und Slice, sowie einem Dictionary lager = {"Stift": 300, "Schraube": 1_000, "Nagel": 300} mit .keys(), .values(), .get(), .update(), .pop() und einer Dictionary-Comprehension.liste = ["Apfel", "Ananas", "Apfel"]
liste[2] = "Kiwi"
liste.append("Birne")
print(liste) # ['Apfel', 'Ananas', 'Kiwi', 'Birne']
print(liste.index("Apfel")) # 0
print(liste.count("Apfel")) # 1
zahlen = [n / 2 for n in range(5)]
print(zahlen) # [0.0, 0.5, 1.0, 1.5, 2.0]
durchschnitt = sum(zahlen)/len(zahlen)
print(f"Durchschnitt: {durchschnitt}") # Durchschnitt: 1.0
werte = [n for n in range(1, 9) if n % 2 == 0]
print(werte) # [2, 4, 6, 8]
print(werte[1:3]) # [4, 6]
lager = {"Stift": 300, "Schraube": 1_000, "Nagel": 300}
print(lager.keys()) # dictkeys(['Stift', 'Schraube', 'Nagel'])
print(lager.values()) # dictvalues([300, 1000, 300])
duebel = lager.get("Duebel")
print("Anzahl Duebel: ", duebel) # Anzahl Duebel: None
print(lager.get("Schraube")) # 1000
duebel = duebel - 50 if duebel != None else 0
lager.update({"Duebel": duebel, "Dichtung": 500})
lager.pop("Schraube")
print(lager) # {'Stift': 300, 'Nagel': 300, 'Duebel': 0, 'Dichtung': 500}
temperaturen = {x: x + 20 for x in range(1, 5)}
print(temperaturen) # {1: 21, 2: 22, 3: 23, 4: 24}class Punkt mit __init__(self, xkoord, ykoord) und __str__.)class Rechteck:
â def __init__(self, startpunkt, breite, hoehe):
â â self.startpunkt = startpunkt
â â self.breite = breite
â â self.hoehe = hoehe
â
â def berechne_flaeche(self):
â â return self.breite * self.hoehe
s = Punkt(1, 1)
rechteck = Rechteck(startpunkt=s, breite=1, hoehe=2)
print("Flaeche: ", rechteck.berechne_flaeche()) # Flaeche: 2def teilen(n, m):
â anzahldurchlaeufe = 0
â while n >= 5:
â â n = n // m
â â anzahldurchlaeufe += 1
â â print(f"n ist: {n}, anzahldurchlaeufe ist: {anzahldurchlaeufe}")
â return n, anzahldurchlaeufe
ergebnis, iterationen = teilen(33, 2)
print(f"Ergebnis der Division: {ergebnis} Anzahl Iterat.: {iterationen}")Ausgabe: n ist: 16 âŠ1 / n ist: 8 âŠ2 / n ist: 4 âŠ3 / Ergebnis der Division: 4 Anzahl Iterat.: 3
# (a) Zahlen 10â40, durch 3 teilbar
start = 12
while start <= 39:
â print(start)
â start = start + 3
for i in range(12, 40, 3): # stop lÀuft bis 1 davor
â print(i)
werte = [n for n in range(12, 40) if n % 3 == 0]
print(werte)
# (b) Erste 7 Zweierpotenzen
expo = 0; basis = 2
while expo <= 6:
â print(basis**expo)
â expo += 1
for i in range(0, 7):
â print(basis**i)
werte = [basis**n for n in range(0, 7)]
print(werte)anlage = 10_000
zins = 0.04
print("Anlagesumme: ", anlage)
print("Zinssatz: ", zins)
betrag = anlage
jahr = 1
while jahr <= 10:
â zinsen = betrag * zins
â betrag = betrag + zinsen
â print("Jahr:", jahr, " hat Anlagewert:", round(betrag, 2))
â jahr += 1Alternative als for jahr in range(1, 11): mit gleichem Rumpf.
def summe(n: int) -> int:
â ergebnis = 0
â i = 1
â while i <= n:
â â vorzeichen = +1
â â if i % 2 == 0:
â â â vorzeichen = -1
â â ergebnis += i * vorzeichen
â â i += 1
â return ergebnis
print(summe(3)) # 2Trick fĂŒr âabwechselndâ: i % 2 == 0 unterscheidet gerade/ungerade â Vorzeichenwechsel.
class Kunde:
â def __init__(self, name, ort):
â â self.name = name
â â self.ort = ort
k1 = Kunde("Jane", "Bingen")
k2 = Kunde("Alex", "Mainz")
liste = [k1, k2]
for kunde in liste:
â print(kunde.name) # Jane / AlexFormel: netto · 1,19 = brutto â netto = brutto / (1 + mwst)
def nettorechnung(brutto, mwst):
â netto = brutto / (1 + mwst)
â mwstbetrag = brutto - netto
â return mwstbetrag, netto
brutto = 100
mwst = 0.19
mwstbetrag, netto = nettorechnung(brutto, mwst)
print("Brutto:", round(brutto, 2), "MWSt-Betrag:", round(mwstbetrag, 2),
"Netto:", round(netto, 2))
# Brutto: 100 MWSt-Betrag: 15.97 Netto: 84.03zahl = int(input("Zahl eingeben: "))
i = 1
teiler = []
while i <= zahl:
â if zahl % i == 0:
â â teiler.append(i)
â i += 1
print("Alle Teiler:", teiler) # Alle Teiler: [1, 2, 4, 8]
# Alternativ als List Comprehension:
liste = [i for i in range(1, zahl + 1) if zahl % i == 0]zuordn = {"ProduktA": 2.00, "ProduktB": 2.50}
for key in zuordn:
â print(key + " " + str(zuordn[key]))
werte = zuordn.values()
print("Durchschnitt:", sum(werte) / len(werte)) # 2.25
zuordn.update({"ProduktC": 1.50})
print(zuordn)dauer = 3
print("Jahr Kapital Zinsen Endkapital")
aktjahr = 1
aktkap = k
while aktjahr <= dauer:
â zinsen = aktkap * p
â neueskap = aktkap + zinsen
â print(f"{aktjahr} {aktkap} {zinsen} {neueskap}")
â aktkap = neueskap
â aktjahr += 1from random import randint
VERSUCHE = 600
liste = [randint(1, 6) for elem in range(VERSUCHE)]
anzahl6 = 0
augensumme = 0
for elem in liste:
â augensumme += elem
â if elem == 6:
â â anzahl6 += 1
print("Anzahl Sechsen:", anzahl6)
print("Durschnittl. Summe:", augensumme / VERSUCHE)Schritt 1: Vorkommazahl 18, Divisionsmethode (Reste von unten nach oben):
18 : 2 = 9 Rest 0 (= letzte Ziffer)
9 : 2 = 4 Rest 1
4 : 2 = 2 Rest 0
2 : 2 = 1 Rest 0
1 : 2 = 0 Rest 1 (= erste Ziffer)
â Vorkommazahl: 10010
Schritt 2: Nachkommazahl 0,8, Multiplikationsmethode
0,8 · 2 = 1,6 â notiere 1, weiter mit 0,6
0,6 · 2 = 1,2 â notiere 1, weiter mit 0,2
0,2 · 2 = 0,4 â notiere 0
0,4 · 2 = 0,8 â notiere 0
0,8 · 2 = 1,6 â notiere 1
0,6 · 2 = 1,2 â notiere 1
0,2 · 2 = 0,4 â notiere 0
â 0,8 dezimal = 0,1100 1100 ⊠binĂ€r (periodisch)
Gesamt: 18,8 = 10010,11001100âŠâ
Beziehungen: Handwerker n:m Baustelle (auflösen) · Baustelle n:1 Bauleiter · Bauleiter n:1 Unternehmen.
Handwerker(HandwerkerID [PS], Name)
Einsatz(HandwerkerID [FS·PS], BaustellenID [FS·PS]) â n:m aufgelöst
Baustelle(BaustellenID [PS], Bezeichnung, BauleiterID [FS])
Bauleiter(BauleiterID [PS], Name, UnternehmenID [FS])
Unternehmen(UnternehmenID [PS], Bezeichnung)
Freiberufler â UnternehmenID bleibt leer. Alternativ eigene Klasse âFreiberufâ mit BauleiterID und 1:1-Beziehung (ebenfalls korrekt).
Beziehungen: Kunde 1:n Adresse · Kunde 1:1 Warenkorb · Warenkorb n:m Artikel (auflösen).
Kunde(KundeID [PS], Name)
Adresse(AdressID [PS], StraĂe, Ort, KundeID [FS])
Warenkorb(WarenkorbID [PS], KundeID [FS])
Warenkorbposition(WarenkorbID [FS·PS], ArtikelNr [FS·PS], Menge) â n:m aufgelöst
Artikel(ArtikelNr [PS], Bezeichnung, Preis)
Die Zuordnungstabelle kann entweder einen eigenen PS (z. B. ZuordnungsID) + 2 FS haben oder (Musterlösung) beide FS zusammen als zusammengesetzten PS â beide unterstreichen.