Zum Skriptum
Skriptum 02 · Abschnitt 7

Notenrechner

Funktionen, Arrays und eingebaute PHP-Funktionen kombinieren

Hinweis zur Bearbeitung

Erstelle eine neue Datei notenrechner.php in deinem htdocs/-Ordner und öffne sie über http://localhost/notenrechner.php. Versuche zuerst selbst – die Lösung gibt es zum Kontrollieren.

Was du in dieser Aufgabe übst

Eigene Funktion

Parameter entgegennehmen, Ergebnis mit return zurückgeben

Array als Parameter

Eine Funktion kann ein ganzes Array entgegennehmen

Eingebaute Funktionen

count(), array_sum(), round()

notenrechner.php – Startgerüst zum Kopieren
<?php
// ...
?>

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title>Notenrechner</title>
</head>
<body>
    <h1>Notenrechner</h1>

    <form method="post" action="">
        <label>Punkte 1: <input type="number" name="p0" min="0" max="100" required></label><br>
        <label>Punkte 2: <input type="number" name="p1" min="0" max="100" required></label><br>
        <label>Punkte 3: <input type="number" name="p2" min="0" max="100" required></label><br>
        <label>Punkte 4: <input type="number" name="p3" min="0" max="100" required></label><br>
        <label>Punkte 5: <input type="number" name="p4" min="0" max="100" required></label><br>
        <br>
        <button type="submit">Berechnen</button>
    </form>

    <?php
    // ...
    ?>

</body>
</html>
Aufgabe 1

Durchschnitt berechnen

Einfach

Schreibe eine Funktion berechneDurchschnitt($punkteArray), die den Durchschnitt eines Arrays von Punktzahlen berechnet und als gerundeten Wert (1 Dezimalstelle) zurückgibt.

  1. Die Funktion bekommt ein Array mit Zahlen als Parameter.
  2. Ist das Array leer, gibt sie den String "Keine Daten vorhanden" zurück.
  3. Andernfalls berechnet sie den Durchschnitt und gibt ihn auf 1 Dezimalstelle gerundet zurück.
  4. Teste die Funktion mit: [88, 72, 95, 61, 84] → Erwartet: 80.0
count($array)

Liefert die Anzahl der Elemente

array_sum($array)

Liefert die Summe aller Elemente

round($zahl, 1)

Rundet auf 1 Dezimalstelle

<?php
function berechneDurchschnitt($punkteArray) {
    $anzahl = count($punkteArray);
    $summe = array_sum($punkteArray);

    if ($anzahl == 0) {
        return "Keine Daten vorhanden";
    }

    $durchschnitt = round($summe / $anzahl, 1);
    return $durchschnitt;
}

// Test
$punkte = [88, 72, 95, 61, 84];
$schnitt = berechneDurchschnitt($punkte);
echo "Durchschnitt: " . $schnitt . " Punkte";
// Ausgabe: Durchschnitt: 80 Punkte
?>
Aufgabe 2

Notenstufe bestimmen

Mittel

Schreibe eine zweite Funktion punkteZuNote($punkte), die eine Punktzahl als Zahl entgegennimmt und die passende Notenstufe als String zurückgibt.

PunkteNote
90 – 100Sehr Gut (1)
75 – 89Gut (2)
60 – 74Befriedigend (3)
50 – 59Genügend (4)
0 – 49Nicht Genügend (5)
  1. Rufe beide Funktionen kombiniert auf: erst berechneDurchschnitt(), dann das Ergebnis an punkteZuNote() übergeben.
  2. Ausgabe: „Durchschnitt: 80 Punkte → Note: Gut (2)"
<?php
function berechneDurchschnitt($punkteArray) {
    $anzahl = count($punkteArray);
    $summe = array_sum($punkteArray);
    if ($anzahl == 0) return "Keine Daten vorhanden";
    return round($summe / $anzahl, 1);
}

function punkteZuNote($punkte) {
    if ($punkte >= 90) return "Sehr Gut (1)";
    elseif ($punkte >= 75) return "Gut (2)";
    elseif ($punkte >= 60) return "Befriedigend (3)";
    elseif ($punkte >= 50) return "Genügend (4)";
    else return "Nicht Genügend (5)";
}

// Funktionen kombiniert aufrufen
$punkte = [88, 72, 95, 61, 84];
$schnitt = berechneDurchschnitt($punkte);
$note = punkteZuNote($schnitt);
echo "Durchschnitt: " . $schnitt . " Punkte → Note: " . $note;
// Ausgabe: Durchschnitt: 80 Punkte → Note: Gut (2)
?>

Der Rückgabewert einer Funktion kann direkt als Argument einer anderen Funktion übergeben werden: punkteZuNote(berechneDurchschnitt($punkte)) funktioniert genauso – PHP führt die innere Funktion zuerst aus.

Aufgabe 3

Notenrechner mit POST-Formular

Herausforderung

Erweitere die Lösung aus Aufgabe 1 & 2 um ein POST-Formular. Die Studierenden sollen ihre eigenen Punkte eingeben können.

  1. Das Formular hat 5 Zahlenfelder (je eine Punktzahl, 0–100).
  2. Nach dem Absenden werden die Werte als Array zusammengefasst und an berechneDurchschnitt() übergeben.
  3. Das Ergebnis wird an punkteZuNote() weitergegeben und beides ausgegeben.
  4. Validierung: Jedes Feld muss eine Zahl zwischen 0 und 100 sein. Ungültige Werte = Fehlermeldung.

Sicherheit

Alle POST-Werte mit (int) casten und auf den Bereich 0–100 prüfen, bevor sie ins Array kommen. Niemals rohe Benutzereingaben in Berechnungen verwenden.

<?php
function berechneDurchschnitt($punkteArray) {
    $anzahl = count($punkteArray);
    $summe = array_sum($punkteArray);
    if ($anzahl == 0) return null;
    return round($summe / $anzahl, 1);
}

function punkteZuNote($punkte) {
    if ($punkte >= 90) return "Sehr Gut (1)";
    elseif ($punkte >= 75) return "Gut (2)";
    elseif ($punkte >= 60) return "Befriedigend (3)";
    elseif ($punkte >= 50) return "Genügend (4)";
    else return "Nicht Genügend (5)";
}

$fehler = "";
$ausgabe = "";
$werte = ["", "", "", "", ""]; // Sticky Form

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $punkte = [];
    for ($i = 0; $i < 5; $i++) {
        $wert = (int) $_POST["p" . $i];
        $werte[$i] = $wert;
        if ($wert < 0 || $wert > 100) {
            $fehler = "Alle Punkte müssen zwischen 0 und 100 liegen.";
            break;
        }
        $punkte[] = $wert;
    }
    if (!$fehler) {
        $schnitt = berechneDurchschnitt($punkte);
        $note = punkteZuNote($schnitt);
        $ausgabe = "Durchschnitt: " . $schnitt . " Punkte → Note: " . $note;
    }
}
?>
<!DOCTYPE html>
<html lang="de"><body>
    <form method="post" action="">
        <?php for ($i = 0; $i < 5; $i++): ?>
            <label>Punkte <?= $i+1 ?>:
            <input type="number" name="p<?= $i ?>"
                   min="0" max="100" required
                   value="<?= $werte[$i] ?>"></label><br>
        <?php endfor; ?>
        <button type="submit">Berechnen</button>
    </form>
    <?php if ($fehler) echo "<p style='color:red'>" . $fehler . "</p>"; ?>
    <?php if ($ausgabe) echo "<p><strong>" . $ausgabe . "</strong></p>"; ?>
</body></html>

Dynamische Webseiten 2 | eduhigh.net | Seminarunterlagen