===== Notentabelle =====
==== Warm-Up ====
Zusammen lösen: [[https://docs.google.com/spreadsheets/d/1oeX5W9aZWa_PfqaZHjAAqE-c6_0qSKF0zniK-WRw434/edit?usp=sharing|Warm-Up]]
==== Aufgabe B: Notentabelle ====
Erstelle in eine Notentabelle, ähnlich zu derjenigen, die dir die Schule zur Verfügung stellt.
* Starte mit dem **Template** unten. Die Noten darfst du natürlich anpassen. Am besten nimmst du gleich deine aktuellen Noten, dann kannst du immer mit der offiziellen Notentabelle vergleichen.
* Die Aufgabe besteht aus **mehreren Teilen**.
* Studiere in jedem Teil zuerst die angegebene **Theorie** ...
* ... und bearbeite dann das Template so, dass es wie im **Screenshot angezeigt aussieht**.
* Stelle sicher, dass deine Lösung alle **Kriterien** in der Tabelle erfüllt.
**Template:** [[https://docs.google.com/spreadsheets/d/1y55z7KOoprLzAGtoBHnN7jDsqGQrEfxDi_KK8EWYGsw/edit?usp=sharing|Aufgabe B: Notentabelle]]
=== Teil I ===
{{ :gf_informatik:daten_sca:notentabelle_teil_1.png?600 |}}
== Ziele ==
* Mittelwerte berechnen
* Werte runden
* Tabelle schön gestalten (Schrifgrössen, Farbe, Ränder, Zellenbreite- & Höhe, Ausrichtung ...)
== Hinweise ==
* Kümmere dich erst um die Inhalte, dann um die Formatierung.
* Die Durchschnittsberechnung soll sich auf alle 20 möglichen Noten des Fachs beziehen – *nicht* nur auf diejenigen, die aktuell in der Tabelle stehen.
* Bei Fächern, bei denen noch keine Noten stehen, tritt bei den Notenberechnungen die Fehlermeldung "#DIV/0!" auf. Um diese kümmern wir uns später.
== Kriterien ==
^ **KRITERIEN** ^ **ERFÜLLT?** ^
| **Darstellung** ||
| Schriftgrösse, normal/fett stimmen überein | $\square$ |
| gewisse Zellen eingefärbt | $\square$ |
| passende Zeilenhöhe & Spaltenbreite | $\square$ |
| Spalten für einzelne Noten haben alle *gleiche* Breite | $\square$ |
| Zelleninhalte horizontal richtig (z.T. links, z.T. mittig) ausgerichtet | $\square$ |
| Zelleninhalte vertikal mittig ausgerichtet | $\square$ |
| passende Rahmen mit untersch. Dicken | $\square$ |
| Durchschnitt mit 2 NKS angezeigt (Stichwort: Zelle formatieren) | $\square$ |
| **Logik** ||
| für jedes Fach einzeln Mittelwert berechnet | $\square$ |
| Mittelwert-Berechnung funktioniert für 1-20 Noten (also nicht nur für die aktuell eingetragenen) | $\square$ |
| Zeugnisnote auf 0.5 Noten *gerundet*, Noten wie $5$ werden ohne NKS dargestellt (Formatierung "Automatisch") | $\square$ |
== Theorie ==
* einzelne Spalte/Zeile: oben/links zw. zwei Spalten/Zeile -> mit Maus verschieben
* mehrere Spalten/Zeilen mit *gleicher* Breite/Höhe: ganze Spalte/Zeile markieren -> dann mit Maus verschieben
{{ :gf_informatik:daten_sca:google_sheets_spaltenbreite.png?400 |}}
* Alternative: Mehrere Spalten/Zeilen markieren und via Rechtsklick eine bestimmte Breite/Höhe in px eingeben.
Berechne mit `=AVERAGE(...)` (dt. `=MITTELWERT()`) den **Mittelwert** oder **Durchschnitt** mehrerer Zellen.
Folgende zwei Befehle zum Runden sind sehr praktisch:
* `=ROUND()`: **normales Runden**, z.B. `=ROUND(3.14159,2)` rundet auf 2 Nachkommastellen
* `=MROUND(...)` (de: `=VRUNDEN(...)`): **Runden auf Vielfaches** von Zahl, z.B. `=MROUND(5.28,0.5)` rundet auf $5.5$
=== Teil II ===
{{ :gf_informatik:daten_sca:notentabelle_teil_2.png?600 |}}
== Ziele ==
* Verzweigungen (IF) verwenden
* mit bedingten Formatierungen arbeiten
* Berechnungen nur ausführen, wenn dafür benötigte Zellen Werte beinhalten (COUNT)
== Hinweise ==
* Liegen in einem Fach keine Note vor, sollen die Zellen "Durchschnitt" und "Zeugnisnote" leer sein und nicht den Fehler "#DIV/0" anzeigen.
* Verwende dazu die COUNT-Funktion (siehe Tipps unten). Du kannst zum Beispiel zählen, wie viele Noten vorliegen. Wenn keine Note vorliegt (Wert also 0 ist), so gibst du den leeren String `""` aus. Anderenfalls berechnest du den Durchschnitt. Für diese Fallunterscheidung benötigen wir die IF-Funktion (siehe Theorie unten), In Pseudocode sieht das etwa wie folgt aus: `=IF(,"",).`
== Kriterien ==
^ **Darstellung** ^ **Erfüllt?** ^
| die gerundeten Zeugnisnoten mit formatierten Bedingungen einfärben (rot falls UG, grün falls G) | |
^ **Logik** ^ **Erfüllt?** ^
| Berechnete Noten werden nur angezeigt, wenn Noten vom Fach vorhanden sind | $\square$ |
| Mittelwerte von "Durchschnitte" und "Zeugnisnoten" der einzelnen Fächer berechnen | $\square$ |
| Berechnung der Plus- und Minuspunkte | $\square$ |
| Berechne Summe der Plus- und Minuspunkte | $\square$ |
| Berechnete Werte werden nur angezeigt, wenn überhaupt Noten vorliegen | $\square$ |
== Theorie ==
Du kannst Zellen abhängig vom Inhalt formatieren – zum Beispiel könntest du sagen, dass die Zelle rot wird, falls der Wert darin kleiner als 4 ist.
Vorgehen: Zelle(n) markieren -> "Format" -> "Bedingte Formatierung" -> Einstellungen vornehmen
Soll der Inhalt einer Zelle von einer Bedingung abhängen, verwenden wir die **IF-Funktion** (dt. WENN). Diese hat immer die Form:
`=IF(,,< Zelleninhalt falls nicht>`
Dies entspricht dem **if-else** in Python (siehe unten).
Beispiel: `=IF(B2>=4,"Genügend","Ungenügend")`, in der Zelle wird "Genügend" oder "Ungenügend" angezeigt, je nachdem, welchen Wert die Zelle B2 hat.
Für eine Verzweigung mit **mehreren Bedingungen** verwendet man die **IFS-Funktion:**
`IFS(,,,,...)`
Beachte: Hier wird im Gegensatz zu den meisten Programmiersprachen ein *einfaches Gleichheitszeichen* verwendet, um Gleichheit zu überprüfen.
Das IF in Spreadsheets, entspricht in etwa dem if-else in Python:
if :
# Code falls Bedingung erfüllt
else:
# Code falls Bedingung nicht erfüllt
Mit dem folgenden Befehl zählt man, wie viele der angegebenen Zellen Zahlen beinhalten:
`=COUNT()`
Dies ist besonders nützlich, wenn du eine Berechnung nur dann durchführen will, wenn die dafür benötigten Zellen nicht leer sind.
=== Teil III ===
{{ :gf_informatik:daten_sca:notentabelle_teil_3.png?600 |}}
== Ziele ==
* Zellen verbinden
* Benutzerdefinierte Zellenformatierungen
* Verknüpfen von zwei Bedingungen mit AND, OR
== Kriterien ==
^ **KRITERIEN** ^ **ERFÜLLT?** ^
| **Darstellung**||
| Zellen bei "Promotion", in Legende und bei Name/Klasse/Semester passend zu grossen Zellen verbunden | $\square$ |
| Text "(KEINE) PROMOTION" wird vertikal dargestellt | $\square$ |
| Legende eingefärbt | $\square$ |
| Farbe der Zellen zur "Promotion" mit bedingter Formatierung grün / rot eingefärbt | $\square$ |
| Für Anzahl UGs wird benutzerdefinierte Zellenformatierungen verwendet | $\square$ |
|**Logik**||
| Anzahl UG (siehe Theorie zu COUNTIF unten) | $\square$ |
| Bei "Promotion" wird je nach Noten "PROMOTION" oder "KEINE PROMOTION" angezeigt (siehe Tipps unten) | $\square$ |
| | $\square$ |
Bemerkungen:
* In einer ersten, vereinfachten Version unterscheiden wir nur zwischen den beiden Fällen "PROMOTION" und "KEINE PROMOTION":
* "PROMOTION": Punktzahl 0 oder positiv (d.h. alle Minuspunkte doppelt kompensiert) und höchstens 3 UG.
* "KEINE PROMOTION": sonst, also falls Punktzahl negativ oder mehr als 3 UG (eine der beiden Bedingungen reicht, so dass Promotion nicht erfüllt).
* Tipp: Dazu benötigt man AND oder OR (siehe Theorie unten).
* Den Fall "KNAPP PROMOVIERT" implementieren wir später.
== Theorie ==
Mit den **logischen Operatoren AND, OR und XOR** kann man mehrere Bedingungen miteinander verknüpfen. Der folgende Ausdruck nimmt den Wert "True" ("False") an, falls beide Bedingungen erfüllt sind:
`=AND(,`
Den OR-Operator benutzt man genau gleich, nur reicht es hier, dass eine der Bedingungen erfüllt ist. Typischerweise verwendet man diese logischen Operatoren in der IF-Funktion.
Beispiel: Mit dem folgenden Befehl kann man ermitteln, ob in beiden Zellen A1 und B1 positive Zahlen stehen:
=IF(AND(A1>=0,B1>=0),"beide Zellen positiv","mind. eine Zelle negativ")
Erinnerung: Diese logischen Operatoren entsprechen `and`, `or` und `^` in Python.
Mit den Befehl **COUNTIF** kann man in einem Bereich die Anzahl Zellen zählen, die eine bestimmte Bedingung erfüllen:
=COUNTIF(,)
Zum Beispiel zählt man mit dem Befehl `=COUNTIF(A1:A10,">0")` die Anzahl Zellen im Bereich A1:A10, welche Werte grösser Null beinhalten.
=== Teil IV (optional) ===
{{ :gf_informatik:daten_sca:notentabelle_teil_4.png?600 |}}
== Ziele ==
* Fallunterscheidungen mit mehr als zwei Fällen
* Bedingte Formatierungen mit benutzerdefinierten Formeln
== Kriterien ==
^ **KRITERIEN** ^ **ERFÜLLT?** ^
| **Darstellung**||
| Bedingte Formatierung für alle drei Fälle der Promotion | $\square$ |
| Zelle Z6 mit Überschrift "Promotion" wird auch bedingt formatiert (siehe Theorie unten) | $\square$ |
|**Logik**||
| Auch Fall "KNAPP PROMOVIERT" implementiert | $\square$ |
== Theorie ==
Die Formatierung einer Zelle kann vom Inhalt einer anderen Zelle abhängen. Verwende dazu eine bedingte Formatierung mit "Benutzerdefinierte Formel ist". Ins Formel-Feld kann dann eine Formel getippt werden, die von einer anderen Zelle abhängt, in der Form `=IF(,1,0)`. Falls die Bedingung (nicht) erfüllt ist, nimmt nimmt der Befehl den Wert 1 (0) an und die bedingte Formatierung wird (nicht) aktiviert.
== Erweiterungen ==
Erweitere deine Notentabelle weiter, z.B.:
* Gewichtungen implementieren (wie in KSR-Notentabelle)
* eigene Ideen
===== Zusatzaufgaben =====
==== Geburtstagsrechner ====
Mit Spreadsheets kann man ganz einfach Rechnungen mit Daten machen. Damit kannst du Fragen wie die folgenden ganz einfach beantworten.
* Wie viele Tage lebe ich bereits?
* Wie viele Tage ist meine Mama älter als ich?
* An welchem Datum wird (oder war) mein Papa genau doppelt so alt wie ich?
* Wie alt bin ich am 4.2.2042?
* Zahlen können als **Daten interpretiert** werden. Die Zahl $42$ entspricht dem Datum 10.02.1900, da dieses der 42. Tag nach dem Datum 30.12.1899 ist.
* Mit Nachkommazahlen kann man weiter Uhrzeiten der Daten angeben.
* Die Funktion `=TODAY()` gibt den Wert des heutigen Datums an (ändert sich jeden Tag).
Beispiel: Der 17.04.2023 entspricht der Zahl $45033$. Addiert man nun $365$ zu dieser Zahl, entspricht diese dem Datum 16.04.2024 (weil 2024 ein Schaltjahr ist).
Schreibe nun ein Programm, in dem man die Geburtsdaten zweier Personen eintippen kann: Person 1 ist älter als Person 2. Der Code berechnet und gibt aus:
* Altersunterschied in Tagen
* Altersunterschied in Jahren
* Anzahl Tage, die Person 1 schon lebt
* Datum, wann Person 1 doppelt so alt war/sein wird wie Person 2