SJ 21/22: Klasse 9d: Unterschied zwischen den Versionen
Zeile 65: | Zeile 65: | ||
Gegenteilertrick: 400: 1 2 4 5 8 10 16 20 || 20 25 40 50 80 100 200 400 | Gegenteilertrick: 400: 1 2 4 5 8 10 16 20 || 20 25 40 50 80 100 200 400 | ||
+ | Wir wollen mit diesem Trick unseren Algorithmus beschleunigen ... | ||
+ | |||
+ | //Teiler ermitteln | ||
+ | x=9174711173; | ||
+ | teiler=1; | ||
+ | while(teiler<=x) { | ||
+ | if(x%teiler==0) UI.log(teiler); | ||
+ | teiler=teiler+1; | ||
+ | } | ||
+ | UI.log("bye bye!"); | ||
+ | |||
+ | ... dauert fast 5 Minuten: | ||
+ | |||
+ | [11:04:54] Program running ... | ||
+ | 1 | ||
+ | 21991 | ||
+ | 417203 | ||
+ | 9174711173 | ||
+ | bye bye! | ||
+ | [11:08:29] Program finished successfully | ||
+ | |||
+ | ... aber fast 100% der Rechenzeit "verplempern wir" mit Rechnungen jenseits des nötigen (wenn wir bei Wurzel von 9174711173 aufhörenwürden)! | ||
+ | |||
+ | Und so rechnen wir eben nur noch < 1 Minute :-) | ||
+ | |||
+ | //Teiler ermitteln | ||
+ | x=9174711173; | ||
+ | obergrenze=Math.floor(Math.sqrt(x)); | ||
+ | UI.log(obergrenze); | ||
+ | teiler=1; | ||
+ | while(teiler<=obergrenze) { | ||
+ | if(x%teiler==0) UI.log(x+" = "+teiler+" * "+ x/teiler); | ||
+ | teiler=teiler+1; | ||
+ | } | ||
+ | UI.log("bye bye!"); | ||
+ | |||
+ | [11:03:22] Program starting ... | ||
+ | [11:03:23] Program running ... | ||
+ | 95784 | ||
+ | 9174711173 = 1 * 9174711173 | ||
+ | 9174711173 = 21991 * 417203 | ||
+ | bye bye! | ||
+ | [11:03:23] Program finished successfully | ||
+ | |||
+ | Oder noch extremer: 10.000 so groß (so lange) ergibt 5min * 10.000 ist ungefähr einige Wochen ... | ||
//Teiler ermitteln | //Teiler ermitteln | ||
Zeile 76: | Zeile 121: | ||
} | } | ||
UI.log("bye bye!"); | UI.log("bye bye!"); | ||
+ | |||
+ | [10:56:37] Program starting ... | ||
+ | [10:56:38] Program running ... | ||
+ | 9578471 | ||
+ | 91747111730317 = 1 * 91747111730317 | ||
+ | 91747111730317 = 181 * 506890120057 | ||
+ | bye bye! | ||
+ | |||
+ | ... immer noch unter einer Sekunde! |
Version vom 6. Mai 2022, 10:16 Uhr
Spanisch-Zweig (einstündig - IT Wahlpflichtfächergruppe IIIa)
Bezeichnung in der SchulApp: IT_1/9d_s
>>> zurück zur Klassenübersicht
Inhaltsverzeichnis
Ausgewählte Themenblöcke
- Themenblock: TXT1: Der tabellarische Lebenslauf
- Projektarbeit: BODY-Painting - Johannes Stöttner
- Leitfach Deutsch: Elisabeth Leidl
Blog
Projekt
- Email: https://web.de/ Account: 9ddmrs@web.de Passwort: 9ddmrs-endedesschreckens-schlussstrich
- Abdobe Express: https://www.adobe.com/de/express/ Account: 9ddmrs@web.de Passwort: Mrs-endedesschreckens-schlussstrich
- Projektbewertungen: Media: Projektbewertungen9d.odt
Themenblock: CUBE.CODES (Programmierung)
- Erste Schritte: UI.log
- CUBE.CODES: Einfache EVA-Programme
- 13. Januar 2022:
Fahrenheit=1000; UI.log((Fahrenheit-32)/1.8);
Hausi: Bei welcher Temparatur in US kocht das Wasser? Ein Programm für die Umkehrfunktion schreiben: Celsius >> Fahrenheit
//Teiler ermitteln x=3000; teiler=1; while(teiler<=x) { if(x%teiler==0) UI.log(teiler); teiler=teiler+1; } UI.log("bye bye!");
[08:24:31] Program starting ... [08:24:32] Program running ... 1 43 1181 50783 59077 2540311 69769937 3000107291 bye bye! [08:25:13] Program finished successfully
Unsere größte Primzahl der Stunde war:
//Teiler ermitteln x=917471; teiler=1; while(teiler<=x) { if(x%teiler==0) UI.log(teiler); teiler=teiler+1; } UI.log("bye bye!");
>>> CUBE.CODES blank
Gegenteilertrick: 400: 1 2 4 5 8 10 16 20 || 20 25 40 50 80 100 200 400 Wir wollen mit diesem Trick unseren Algorithmus beschleunigen ...
//Teiler ermitteln x=9174711173; teiler=1; while(teiler<=x) { if(x%teiler==0) UI.log(teiler); teiler=teiler+1; } UI.log("bye bye!");
... dauert fast 5 Minuten:
[11:04:54] Program running ... 1 21991 417203 9174711173 bye bye! [11:08:29] Program finished successfully
... aber fast 100% der Rechenzeit "verplempern wir" mit Rechnungen jenseits des nötigen (wenn wir bei Wurzel von 9174711173 aufhörenwürden)!
Und so rechnen wir eben nur noch < 1 Minute :-)
//Teiler ermitteln x=9174711173; obergrenze=Math.floor(Math.sqrt(x)); UI.log(obergrenze); teiler=1; while(teiler<=obergrenze) { if(x%teiler==0) UI.log(x+" = "+teiler+" * "+ x/teiler); teiler=teiler+1; } UI.log("bye bye!");
[11:03:22] Program starting ... [11:03:23] Program running ... 95784 9174711173 = 1 * 9174711173 9174711173 = 21991 * 417203 bye bye! [11:03:23] Program finished successfully
Oder noch extremer: 10.000 so groß (so lange) ergibt 5min * 10.000 ist ungefähr einige Wochen ...
//Teiler ermitteln x=91747111730317; obergrenze=Math.floor(Math.sqrt(x)); UI.log(obergrenze); teiler=1; while(teiler<=obergrenze) { if(x%teiler==0) UI.log(x+" = "+teiler+" * "+ x/teiler); teiler=teiler+1; } UI.log("bye bye!");
[10:56:37] Program starting ... [10:56:38] Program running ... 9578471 91747111730317 = 1 * 91747111730317 91747111730317 = 181 * 506890120057 bye bye!
... immer noch unter einer Sekunde!