===== 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