i

Übungen

Aufgabe 1: einfache Funktionsdefinitionen erstellen

Ziel dieser Aufgabe ist es, Funktionen zur Bestimmung geometrischer Größen zu entwickeln.

Zunächst entwickelt man eine Funktionsdefinition, wie z.B.:

def aRechteck(laenge, breite):
    flaecheninhalt = laenge * breite
    return flaecheninhalt

Eine solche Funktionsdefinition muss anschließend getestet werden. Am einfachsten geht das, indem man Funktionsaufrufe im Ausführfenster eingibt und vom Python-Interpreter ausführen lässt, Z.B.:

>>> aRechteck(2, 5)
10
>>> aRechteck(7, 4)
28

(a) Entwickle analog eine Funktionsdefinition für eine der folgenden geometrischen Größen:

  • Umfang eines Rechtecks
  • das Volumen eines Quaders
  • die Oberfläche eines Quaders

(b) Oft kann man bereits definierte Funktionen benutzen, wenn man weitere Funktionen entwickelt:

def aRechteck(laenge, breite):
    flaecheninhalt = laenge * breite
    return flaecheninhalt

def aQuadrat(seite):
    flaecheninhalt = aRechteck(seite, seite)
    return flaecheninhalt

Kannst du selbst ein entsprechendes Beispiel angeben?

Aufgabe 2: einfache Funktionsdefinitionen erstellen

Funktionen können in den unterschiedlichsten Situationen auftreten. Ziel dieser Aufgabe ist es, geeignete Funktionsdefinitionen zu entwickeln. Du musst dir dabei genau überlegen, welche Daten übergeben und welches berechnete Ergebnis zurückgegeben werden soll. Am besten, du erstellst erst einmal ein Black-Box-Diagramm zur Verdeutlichung der Datenverarbeitung. Entwickle anschließend eine Funktionsdefinition und teste sie mit geeigneten Funktionsaufrufen.

(a) Body-Mass-Index:

Der Body-Mass-Index (kurz: BMI) ist eine Zahl, mit der man abschätzen kann, ob man Unter-, Normal oder Übergewicht hat. Man berechnet diese Zahl nach der folgenden Formel:

          Gewicht
BMI = ---------------
       Größe * Größe

Dabei wird das Gewicht in kg und die Größe in m angegeben.

(b) optimaler Puls:

Der optimale Puls bei Ausdauersportarten hängt vom Alter ab. Er lässt sich mit der Formel P = 165 - 0.75*A bestimmen. Schreibe ein Programm, das folgenden Dialog ermöglicht:

Alter: 18
optimaler Puls:  151.5

(c) Anhalteweg:

In der Fahrschule lernt man folgende Faustformeln zur Berechnung von Anhaltewegen:

Reaktionsweg (in Metern) = (Geschwindigkeit (in km/h) geteilt durch 10) mal 3

Bremsweg (in Metern) = (Geschwindigkeit (in km/h) geteilt durch 10) mal (Geschwindigkeit (in km/h) geteilt durch 10)

Anhalteweg (in Metern) = Reaktionsweg plus Bremsweg

Aufgabe 3: komplexere Funktionsdefinitionen erstellen

(a) Gegeben ist die folgende Funktionsdefinition.

def summe(n):
    zaehler = 0
    zwischensumme = 0
    while zaehler < n:
        zaehler = zaehler + 1
        zwischensumme = zwischensumme + zaehler
    return zwischensumme

Was leistet diese Funktion? Versuche erst einmal, das Verhalten durch Analyse des Quelltextes herauszufinden. Führe anschließend interaktive Tests durch, indem du Funktionsaufrufe wie den folgenden ausführen lässt.

>>> summe(17)
153

Entwickle in Analogie eine Funktion, die bei Übergabe einer natürlichen Zahl n das Produkt 1*2*...*n berechnet und zurückgibt.

(b) Gegeben ist die folgende Funktionsdefinition.

def quadratzahl(n):
    i = 0
    while i*i < n:
        i = i + 1
    if i*i == n:
        ergebnis = True
    else:
        ergebnis = False
    return ergebnis

Was leistet diese Funktion? Versuche erst einmal, das Verhalten durch Analyse des Quelltextes herauszufinden. Führe anschließend interaktive Tests durch, indem du Funktionsaufrufe wie den folgenden ausführen lässt.

>>> quadratzahl(17)
...

Entwickle in Analogie eine Funktion, die bei Übergabe einer natürlichen Zahl n überprüft, ob es es sich bei dieser Zahl um eine Kubikzahl / eine Summe der Gestalt 1+2+... handelt.

(c) Hier weitere Beispiele für etwas kompliziertere Funktionen:

  • eine Funktion zur Bestimmung der Anzahl der Teiler einer natürlichen Zahl
  • eine Funktion zur Überprüfung, ob eine vorgegebene natürliche Zahl eine Primzahl ist
  • eine Funktion zur Bestimmung der nächsten Primzahl, die größer als eine vorgegebene natürliche Zahl ist

Aufgabe 4: Funktionen mit und ohne Rückgabedaten

Betrachte die beiden folgenden Funktionsdefinitionen.

def bruchAlsZeichenkette(bruch):
    (zaehler, nenner) = bruch
    zeichenkette = str(zaehler) + '/' + str(nenner)
    return zeichenkette

def printBruch(bruch):
    (zaehler, nenner) = bruch
    zeichenkette = str(zaehler) + '/' + str(nenner)
    print(zeichenkette)

(a) Teste sie durch Funktionsaufrufe wie die folgenden:

>>> bruchAlsZeichenkette((4, 5))
'4/5'
>>> printBruch((4, 5))
4/5
>>> print(bruchAlsZeichenkette((4, 5)))
4/5

(b) Worin unterscheiden sich die Funktionen. Verdeutliche den Unterschied auch anhand eines Black-Box-Diagramms?

(c) Welche Vor- und Nachteile haben die beiden Funktionsversionen?

Aufgabe 5: Funktionen ohne Übergabedaten

Gegeben ist die folgende Funktionsdefinition.

from random import randint

def wuerfeln():
    augen = randint(1, 6)
    return augen

(a) Was leistet die Funktion wuerfeln?

(b) Teste diese Funktion mit geeigneten Funktionsaufrufen.

Aufgabe 6: Prozeduren entwickeln

(a) Was leistet die folgende Funktion ohne Rückgabedaten (Prozedur)? Versuche es erst einmal durch Analyse des Quelltextes herauszufinden.

def zahlen_ausgeben(anfang, ende):
    zahl = anfang
    while zahl <= ende:
        print(zahl)
        zahl = zahl + 1

Überprüfe anschließend deine Vermutung mit interaktiven Tests wie dem folgenden:

>>> zahlen_ausgeben(4, 11)

Was wird ausgegeben, wenn beide aktuellen Parameter gleich sind? Was wird ausgegeben, wenn der zweite aktuelle Parameter kleiner als der erste ist?

(b) Modifiziere das Programm in Aufgabe 3 so, dass sämtliche Quadratzahlen in einem vorgegebenen Intervall ausgegeben werden.

Zusatz: Statt Quadratzahlen sollen die Primzahlen im vorgegebenen Intervall ausgegeben werden.

Aufgabe 7: Prozeduren entwickeln

Mit Hilfe einer Prozedur sollen Rechteckmuster der folgenden Gestalt erzeugt werden:

Muster 1:

********
********
********
********

Muster 2:

OOOO
OOOO
OOOO

Entwickle und teste eine geeignete Prozedur.

Zusatz: Es soll nur der Rand des Rechtecks mit Zeichen dargestellt werden. Du kannst dir auch selbst ein neues Muster ausdenken.

Suche

v
6.3.2.11.4
dev.inf-schule.de/imperative-programmierung/python/konzepte/funktion/uebungen
dev.inf-schule.de/6.3.2.11.4
dev.inf-schule.de/@/page/GiBRseMHEDsLIift

Rückmeldung geben