Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf4-23:intro-spreadsheet [2024/03/28 08:26] – [Einstiegsaufgaben mit Excel] Ivo Blöchliger | lehrkraefte:blc:informatik:glf4-23:intro-spreadsheet [2025/03/17 21:16] (current) – [Mit Python] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ====== Einstiegsaufgaben mit Excel ====== | ||
| + | <WRAP important> | ||
| + | < | ||
| + | |||
| + | Die Prüfung wird wieder OpenBook sein. | ||
| + | </ | ||
| + | |||
| + | <WRAP info> | ||
| + | Lernziele: | ||
| + | * Zellinhalte effizient kopieren. | ||
| + | * Formeln | ||
| + | * Arithmetische Folgen fortsetzen | ||
| + | * Zellbezüge als relative Bezüge begreifen. | ||
| + | * Zellen mit Namen versehen und als Variablen in Formeln verwenden. | ||
| + | * Ganzzahlige Zufallszahlen erzeugen. | ||
| + | </ | ||
| + | ===== Exponentielles Wachstum ===== | ||
| + | Wir werden exponentielles Wachstum am Beispiel von Corona-Fällen «simulieren». Das mathematische Modell dahinter ist natürlich viel zu simpel für brauchbare Prognosen. | ||
| + | ==== Einfachste Variante ==== | ||
| + | In der einfachsten Variante werden wir den Wachstumsfaktor fix einprogrammieren. Schauen Sie sich dazu folgendes [[https:// | ||
| + | |||
| + | ==== Variante 2: mit Namen für Zellen ==== | ||
| + | Der wöchentliche Wachstumsfaktor soll auch nachträglich einfach verändert werden können. Dazu vergeben wir der Zelle, die den Faktor enthält, einen Namen. | ||
| + | Hier gibt es das [[https:// | ||
| + | |||
| + | |||
| + | ===== Würfelsummen ===== | ||
| + | ==== 2 Würfel, mit Histogram ==== | ||
| + | Bauen Sie die Simulation der Summe zweier Würfel nach, inklusive Histogramm. Die Anleitung dazu gibt es als [[https:// | ||
| + | |||
| + | // | ||
| + | |||
| + | === 4 Würfel === | ||
| + | Bauen Sie die Simulation mit 2 Würfeln auf die Summe von 4 Würfeln aus (verändern Sie obige Simulation mit möglichst wenig Aufwand). | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Realistischere Epidemie-Simulation (optional, für Fortgeschrittene) ===== | ||
| + | Ich bin überhaupt kein Experte, was die Simulation von Epidemien angeht. Ich habe folgende Annahmen getroffen: | ||
| + | * Man geht von einer Anfangspopulation aus, die überhaupt am Infektionsgeschehen teilnehmen könnte. Diese Population wird im Laufe der Epidemie kleiner, weil mehr Menschen immun werden. | ||
| + | * Der R-Wert (wie viele Personen eine infizierte Person im Durchschnitt ansteckt) nimmt proportional zur verbleibenden Population ab, die noch angesteckt werden kann (vgl. https:// | ||
| + | * Man verfolgt den Infektionsverlauf und notiert sich für jeden Tag, wie viele Menschen gerade heute, gestern etc. angesteckt wurden. Wir können annehmen, dass die Personen zwischen dem 3. und 7. Tag nach der Infektion ansteckend sind. Die Gesamtheit dieser vier Personengruppe mal den R-Wert geteilt durch vier ergibt die Neuinfizierten für den nächsten Tag. Wobei der R-Wert der noch verbleibenden " | ||
| + | * Schauen Sie sich dabei den Anfang von folgendem [[https:// | ||
| + | |||
| + | |||
| + | ====== Mit Python ====== | ||
| + | Statt einer Tabellenkalkulation kann die Simulation auch in einer Programmiersprache programmiert werden. Die Daten werden dabei vorteilhaft als CSV-Datei ausgegeben, die dann mit einer Tabellenkalkulation grafisch dargestellt werden kann. | ||
| + | |||
| + | Testen und studieren Sie die folgenden Python-Programme (herunterladen mit «Rechtsklick, | ||
| + | |||
| + | Öffnen/ | ||
| + | |||
| + | <!-- | ||
| + | Zur Installtion der git-bash und der nötigen Einträge in die Datei ~/.bashrc gibt es jetzt ein [[lehrkraefte: | ||
| + | --> | ||
| + | ===== Exponentielles Wachstum ===== | ||
| + | |||
| + | <code python exp.py> | ||
| + | # Parameter festelegen | ||
| + | startwert = 1180 | ||
| + | wachstumsfaktor = 1.18 | ||
| + | |||
| + | |||
| + | # Aktueller Wert | ||
| + | wert = startwert | ||
| + | # Kopfzeile der Tabelle | ||
| + | csv = " | ||
| + | |||
| + | # Simulation | ||
| + | for zeit in range(11): | ||
| + | csv += f" | ||
| + | # Nächsten Wert berechnen | ||
| + | wert *= wachstumsfaktor | ||
| + | |||
| + | |||
| + | # CSV-Datei schreiben | ||
| + | with open(" | ||
| + | f.write(csv) | ||
| + | |||
| + | |||
| + | print(csv) | ||
| + | </ | ||
| + | |||
| + | ===== Würfelsummen ===== | ||
| + | <code python wuerfelsummen.py> | ||
| + | from random import randrange | ||
| + | |||
| + | wiederholungen = 1000 | ||
| + | anzahlwuerfel = 2 | ||
| + | |||
| + | # Liste mit Nullen gefüllt, der Länge anzahlwuerfel*6+1 | ||
| + | summen = [0 for i in range(anzahlwuerfel*6+1)] | ||
| + | |||
| + | for i in range(wiederholungen): | ||
| + | summe = 0 | ||
| + | for j in range(anzahlwuerfel): | ||
| + | summe += randrange(1, | ||
| + | summen[summe] += 1 | ||
| + | |||
| + | # Inhalt der CSV-Datei erstellen | ||
| + | csv = " | ||
| + | for summe in range(anzahlwuerfel, | ||
| + | csv += f" | ||
| + | |||
| + | # CSV-Datei schreiben | ||
| + | with open(" | ||
| + | f.write(csv) | ||
| + | |||
| + | print(csv) | ||
| + | </ | ||
| + | |||
| + | ===== Epidemie-Simulation ===== | ||
| + | |||
| + | <code python epidemie.py> | ||
| + | # Parameter | ||
| + | |||
| + | startpop = 4000000 | ||
| + | rwert = 1.2 # Anzahl Personen, die eine Infizierte Person im Schnitt ansteckt | ||
| + | immun = 0 # Anzahl immune Personen | ||
| + | |||
| + | # Zeitliche Parameter (an welchen Tagen nach der Ansteckung was passiert) | ||
| + | ansteckungstart = 4 | ||
| + | ansteckungende = 8 | ||
| + | immunitaet = 14 | ||
| + | |||
| + | # status[0] ist die Anzahl der heute Angesteckten, | ||
| + | # status[n] ist die Anzahl der vor n Tagen Angesteckten | ||
| + | # Erst mal alles mit dem Start der täglich infizierten füllen: | ||
| + | status = [100 for i in range(immunitaet+1)] | ||
| + | |||
| + | |||
| + | pop = startpop-sum(status) | ||
| + | |||
| + | csv = " | ||
| + | tag = 0 | ||
| + | while status[0]> | ||
| + | csv += f" | ||
| + | |||
| + | tag += 1 | ||
| + | |||
| + | # Ein Tag weiter (Einträge verschieben) | ||
| + | immun += status.pop() | ||
| + | |||
| + | ansteckend = sum(status[ansteckungstart: | ||
| + | # Neuinfizierte berechnen | ||
| + | neuinfiziert = ansteckend*rwert/ | ||
| + | # Vorne in Liste einfügen | ||
| + | status.insert(0, | ||
| + | |||
| + | # Ansteckbare vermindern | ||
| + | pop -= neuinfiziert | ||
| + | |||
| + | |||
| + | with open(" | ||
| + | f.write(csv) | ||
| + | |||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | |||