CUBE.CODES: Beispiele aus der Zahlentheorie (Klasse 5): Unterschied zwischen den Versionen
Zeile 71: | Zeile 71: | ||
* [https://ide.cube.codes/app/?init=loadFromUrl&url=https://share-repository.cube.codes/v1/appStates/92646f96-9155-4909-aee3-2cdbf9220e5c Verbesserung: Anzahl der Teiler ausgebeben] (Was ist mit Quadratzahlen?) | * [https://ide.cube.codes/app/?init=loadFromUrl&url=https://share-repository.cube.codes/v1/appStates/92646f96-9155-4909-aee3-2cdbf9220e5c Verbesserung: Anzahl der Teiler ausgebeben] (Was ist mit Quadratzahlen?) | ||
* [https://ide.cube.codes/app/?init=loadFromUrl&url=https://share-repository.cube.codes/v1/appStates/e9dd6cbe-30af-4762-95f9-683ca887862a Ganze Liste mit Zahlen und ihrer jeweiligen Teileranzahl] | * [https://ide.cube.codes/app/?init=loadFromUrl&url=https://share-repository.cube.codes/v1/appStates/e9dd6cbe-30af-4762-95f9-683ca887862a Ganze Liste mit Zahlen und ihrer jeweiligen Teileranzahl] | ||
+ | |||
+ | ===Programm 3: Die Vielfachenmenge - Die Zählschleife - Ein beliebiges Einmaleins ausgeben=== | ||
+ | >>> [https://ide.cube.codes/app/?init=loadFromUrl&url=https://share-repository.cube.codes/v1/appStates/c51ff0e7-497a-402d-9349-c527736ded0e Direkt zu CUBE.CODES]<br> | ||
+ | |||
+ | Eine klitzekleine Formulierung mit '''if''', eine sogenannte '''bedingte Anweisung''' ermöglicht es, die unwichtigen Ergebnisse (mit Kommazahlen als Quotienten) einfach wegzulassen und schon haben wir nur die Teiler auf dem Schirm. | ||
+ | |||
+ | '''Tipp:''' Das Prozentzeichen ist einfach der Rest bei ganzzahliger Teilung. Denkt an die Grundschule. Da hattet Ihr noch keine Kommazahlen. Auf die Frage: ''"Was ist 12 geteilt durch 5?", habt Ihr "2 Rest 2" geantwortet. Diese Antwort '''Rest = 2''' ist das Ergebnis der Rechnung '''12%5'''. Damit können wir leicht nachsehen, ob die Teilung '''12/5''' aufgeht. Nachdem das '''= Zeichen''' reserviert ist für '''Zuweisung''' (x = 12; bedeutet ja: speichere 12 in der Speicherzelle (Variablen) x ab!), müssen wir für das '''=''' im Sinne eines Vergleichs eine andere Bezeichnung einführen, sonst gibt's Kuddelmuddel! In JavaScript ist das vergleichende '''=''' einfach das Doppelistgleich '''=='''. | ||
+ | |||
+ | Zahl=12; | ||
+ | Teiler=1;<br> | ||
+ | while(Teiler<=Zahl) { | ||
+ | if(Zahl%Teiler==0) UI.log("Zahl: " + Zahl + ", Teiler: " + Teiler + ", Quotient: " + (Zahl/Teiler)); | ||
+ | Teiler=Teiler+1; | ||
+ | } | ||
===Die Möglichkeiten des menschlichen Rechnens kommen an ihre Grenzen: Primzahlen=== | ===Die Möglichkeiten des menschlichen Rechnens kommen an ihre Grenzen: Primzahlen=== |
Version vom 22. April 2021, 06:46 Uhr
Inhaltsverzeichnis
- 1 Einfache Schleifen: Vielfachenmenge und Teilermenge
- 2 Programm 1: Erste Schleife: Teilercheckliste ausgeben
- 3 Programm 2: Verbesserung: Unwichtige Ergebnisse bei der Ausgabe unterdrücken
- 4 Mehr Aufgaben und Verbesserungen
- 5 Programm 3: Die Vielfachenmenge - Die Zählschleife - Ein beliebiges Einmaleins ausgeben
- 6 Die Möglichkeiten des menschlichen Rechnens kommen an ihre Grenzen: Primzahlen
Einfache Schleifen: Vielfachenmenge und Teilermenge
Ein einfaches, aber mächtiges Sprachelement jeder Programmiersprache ist die Wiederholungsschleife. Damit lassen wir die Möglichkeiten von Taschenrechner und Tabellenkalkulation weit hinter uns. Schon kleine Aufgaben aus der 5. Klasse werden schnell zu unlösbaren Problemen, wenn die Zahlen etwas größer werden. Die Berechnung der Teilermenge von 12 lässt sich zum Beispiel ganz problemlos durchführen: Wir teilen einfach die 12 durch alle möglichen Teiler (von 1 bis 12) und schauen eben, ob die Quotienten Ganzzahlen oder Kommazahlen sind oder wir wenden 12 Teilbarkeitsregeln an. Eigentlich easy!
Interessiert uns aber die Teilermenge von 5.000, dann sind es schon 5.000 Rechnungen. Interessiert uns eine Übersichtsliste über alle Teilermengen von 1 bis 5000, dann sind es im Schnitt schon 2.500*5.000, also ca. 12 Mio Rechnungen und die Klärung der Frage wird auf einmal zur Wochenarbeit.
In JavaScript können wir Aufgaben einfach mit Variablen formulieren und beliebig oft wiederholen lassen:
Programm 1: Erste Schleife: Teilercheckliste ausgeben
Zahl=12; Teiler=1;
while(Teiler<=Zahl) { UI.log("Zahl: " + Zahl + ", Teiler: " + Teiler + ", Quotient: " + (Zahl/Teiler)); Teiler=Teiler+1; }
In weniger als einer Sekunde erhalten wir das Ergebnis:
[23:24:04] Program starting ... [23:24:05] Program running ... Zahl: 12, Teiler: 1, Quotient: 12 Zahl: 12, Teiler: 2, Quotient: 6 Zahl: 12, Teiler: 3, Quotient: 4 Zahl: 12, Teiler: 4, Quotient: 3 Zahl: 12, Teiler: 5, Quotient: 2.4 Zahl: 12, Teiler: 6, Quotient: 2 Zahl: 12, Teiler: 7, Quotient: 1.7142857142857142 Zahl: 12, Teiler: 8, Quotient: 1.5 Zahl: 12, Teiler: 9, Quotient: 1.3333333333333333 Zahl: 12, Teiler: 10, Quotient: 1.2 Zahl: 12, Teiler: 11, Quotient: 1.0909090909090908 Zahl: 12, Teiler: 12, Quotient: 1 [23:24:05] Program finished successfully
Wir müssen die Teiler mit ganzzahligen Quotienten nur ablesen und haben unsere Teilermenge. Da der PC bei der sturen Wiederholung von Rechenschritten recht schmerzfrei ist, stört es kein bisschen, die Zuordnung Zahl=12; durch Zahl=5000; zu ersetzen und in weniger als einer Sekunde haben wir die Teiler von 5000 - zugegebenermaßen etwas mühsam ablesbar!
Programm 2: Verbesserung: Unwichtige Ergebnisse bei der Ausgabe unterdrücken
Eine klitzekleine Formulierung mit if, eine sogenannte bedingte Anweisung ermöglicht es, die unwichtigen Ergebnisse (mit Kommazahlen als Quotienten) einfach wegzulassen und schon haben wir nur die Teiler auf dem Schirm.
Tipp: Das Prozentzeichen ist einfach der Rest bei ganzzahliger Teilung. Denkt an die Grundschule. Da hattet Ihr noch keine Kommazahlen. Auf die Frage: "Was ist 12 geteilt durch 5?", habt Ihr "2 Rest 2" geantwortet. Diese Antwort Rest = 2 ist das Ergebnis der Rechnung 12%5. Damit können wir leicht nachsehen, ob die Teilung 12/5 aufgeht. Nachdem das = Zeichen reserviert ist für Zuweisung (x = 12; bedeutet ja: speichere 12 in der Speicherzelle (Variablen) x ab!), müssen wir für das = im Sinne eines Vergleichs eine andere Bezeichnung einführen, sonst gibt's Kuddelmuddel! In JavaScript ist das vergleichende = einfach das Doppelistgleich ==.
Zahl=12; Teiler=1;
while(Teiler<=Zahl) { if(Zahl%Teiler==0) UI.log("Zahl: " + Zahl + ", Teiler: " + Teiler + ", Quotient: " + (Zahl/Teiler)); Teiler=Teiler+1; }
Das Ergebnis ist jetzt deutlich schöner lesbar:
[23:24:04] Program starting ... [23:24:05] Program running ... Zahl: 12, Teiler: 1, Quotient: 12 Zahl: 12, Teiler: 2, Quotient: 6 Zahl: 12, Teiler: 3, Quotient: 4 Zahl: 12, Teiler: 4, Quotient: 3 Zahl: 12, Teiler: 6, Quotient: 2 Zahl: 12, Teiler: 12, Quotient: 1 [23:24:05] Program finished successfully
Tipp: Und schon macht es Spaß, mathematisch zu experimentieren und uns kreativeren Fragen zuzuwenden als ständig zu rechnen. Wir haben jetzt ja einen Rechenknecht, dier die ...arbeit für uns erledigt: Große Zahlen haben nicht zwangsläufig lange Teilerlisten. Probiert mal kleine Zahlen zu finden, die trotzdem lange Teilerlisten haben oder umgekehrt große (möglichst krumme) Zahlen, die aber kurze Teilerlisten haben!
Mehr Aufgaben und Verbesserungen
- Beobachtung: (Doppelt gemoppelt) Die Quotienten sind auch Teiler (von unten nach oben gelesen)
- Verbesserung: Doppelte Ausgabe weglassen, Quotienten als Gegenteiler bezeichnen
- Verbesserung: Anzahl der Teiler ausgebeben (Was ist mit Quadratzahlen?)
- Ganze Liste mit Zahlen und ihrer jeweiligen Teileranzahl
Programm 3: Die Vielfachenmenge - Die Zählschleife - Ein beliebiges Einmaleins ausgeben
Eine klitzekleine Formulierung mit if, eine sogenannte bedingte Anweisung ermöglicht es, die unwichtigen Ergebnisse (mit Kommazahlen als Quotienten) einfach wegzulassen und schon haben wir nur die Teiler auf dem Schirm.
Tipp: Das Prozentzeichen ist einfach der Rest bei ganzzahliger Teilung. Denkt an die Grundschule. Da hattet Ihr noch keine Kommazahlen. Auf die Frage: "Was ist 12 geteilt durch 5?", habt Ihr "2 Rest 2" geantwortet. Diese Antwort Rest = 2 ist das Ergebnis der Rechnung 12%5. Damit können wir leicht nachsehen, ob die Teilung 12/5 aufgeht. Nachdem das = Zeichen reserviert ist für Zuweisung (x = 12; bedeutet ja: speichere 12 in der Speicherzelle (Variablen) x ab!), müssen wir für das = im Sinne eines Vergleichs eine andere Bezeichnung einführen, sonst gibt's Kuddelmuddel! In JavaScript ist das vergleichende = einfach das Doppelistgleich ==.
Zahl=12; Teiler=1;
while(Teiler<=Zahl) { if(Zahl%Teiler==0) UI.log("Zahl: " + Zahl + ", Teiler: " + Teiler + ", Quotient: " + (Zahl/Teiler)); Teiler=Teiler+1; }