Hans Krailsheimer (1888-1958): "Talente finden Lösungen, Genies entdecken Probleme."
Ein Modell ist ein "wirklichkeitsnahes" Abbild eines "realen" Systems . Ein System ist als Teil eines umfassenden Ganzen stets auch ein Teilsystem. Zu den Teilstrukturen eines System gehören eingebettete Substrukturen und deren Modellierungen. Kein "Super-Modell" kann die gesamte, alles umfassende Wirklichkeit abgeschlossen und vollständig abbilden ( siehe z.B. Fraktale ).
In diesem Sinn entspricht in der Informatik die objektorientierte Programmierung eine Modellierung von Hardware. Die Systemtheorie beinhaltet die Analyse von Strukturen, Dynamiken/Wechselwirkungen/Funktionen und möchte das Systemverhalten aufgrund von Modellbeschreibungen simulieren/vorhersagen/austesten, wie z.B. die Probabilistische Testtheorie .
In gewisser Weise können Pseudo-Zufallszahlen das "Unvorhersehbare zufällig simulieren".
Es sind eigene Algorithmen für Zufallszahlen zu entwerfen und und mehrere robuste Pseudo- Zufallszahlengeneratoren , zu entwickeln ( Plagiate sind out ).
Pseudo-Zufallszahlen sind auch ein wesentlicher Bestandteil von Sicherheitsarchitekturen und werden nachfolgend in dieser Veranstaltung benötigt. Pseudo-Zufallszahlen werden gebraucht für Strings, Texte, /dev/random als zeichen-orientierte virtuelle Gerätedatei, Nonces, One-Pad, Password, Time, Erzeugung kryptographischer Schlüssel, Hash, List Randomizer, "aus Quanten-Zufällen", Integer, Sequence, DNA Protein Sequence, Sets, Gaussian, Stochastik, zentrale Grenzwertsatz, Color-Code, Audio-Noise, Pregenerated Files, Geographic-Coordinate, usw. Siehe z.B. Sicherheit+Kryptologie und ECMAScript-Beispiele zu Zufallszahlen .
Komplexe Simulationen brauchen i.a. viele/vielschichtige Eingabewerte. Beliebige Werte aus kontinuierlichen Zahlenbereichen können ( näherungsweise ) mit Pseudo-Zufallszahlen durchgeführt werden.
- Generatoren für kryptologisch sichere Pseudozufallszahlen ( de.wikipedia ) basieren z.B. auf mathematisch "unknackbaren" Problemen oder/und auf sicheren Hash-Funktionen oder/und auf Block- oder Stromverschlüsselungen.
Liegt hinreichendes Wissen zu den folgenden Punkten vor:
ECMAScript verwendet intern stets 64 Bit Fließkommazahlen ( double, IEEE 754 ). Browser-ECMAScript hat eigebaute Pseudo-Zufallsfunktion Math.random() meist ohne Argument und es gibt i.a. keine "Seeds" für eine determinierte Folge von gewünschten Zufallszahlen. Ein Aufruf von Math.random() liefert eine positive Zahl ( 0 <= Zahl < 1 ) zurück. Die erzeugten Pseudo-Zufallszahlen haben unterschiedliche Gleichverteilungen und sind abhängig von den Browser-Imlementierungen.
Für die Entwicklung von "self-made" Generatoren für Zufallszahlen können die folgenden Bemerkungen hilfreich sein.
function zuf_float( min, max ) { return min + (max - min) * rnd(); } function zuf_int ( min, max ) { return Math.floor( min + (max - min + 1) * rnd() ); } function zuf_char ( min, max ) { return String.fromCharCode( zuf_int(min, max) ); }
Bei Browsern entspricht rnd() dem Bibliothek-Aufruf Math.random(). Mit <a href="javascript:void(0)" onclick="alert(my_random(100,200))"> teste my_random(100,200) </a> können mehrere Aufrufe getestet werden.
Siehe auch Polar-Methode .
var dez_num = 69069, // liefert dez_num = 69069, bin_str = dez_num.toString(2), // liefert bin_str = 10000110111001101, bin_num = parseInt(bin_str,2); // liefert bin_num = 69069
In gewisser Weise können Zufallszahlen das "Unvorhersehbare zufällig simulieren" ( siehe z.B. de.wikipedia Zufallszahlengeneratoren ). Zufallszahlen werden generiert z.B. für:
Strings, Texte, /dev/random als zeichen-orientierte virtuelle Gerätedatei, Nonces, One-Pad, Password,
Time, Erzeugung kryptographischer Schlüssel, Hash, List Randomizer, "aus Quanten-Zufällen",
Integer, Sequence, DNA Protein Sequence, Sets, Gaussian, Stochastik, zentrale Grenzwertsatz,
Color-Code, Audio-Noise, Pregenerated Files, Geographic-Coordinate, usw.
Mögliche Problemstellungen für die self-made-App sind:
Die Yi-Silbenzeichen des Unicodes sind:
ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟꀠꀡꀢꀣꀤꀥꀦꀧꀨꀩꀪꀫꀬꀭꀮ ꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝ ꁞꁟꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸꁹꁺꁻꁼꁽꁾꁿꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌ ꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟꂠꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻ
Eine Zufallsfunktion kann z.B. 600 zufällige Yi-Silbenzeichen aus dem Yi-Unicode-Block auswählen und als Zeichen-Block mit 10 Zeilen und 60 Zeichen je Zeile darstellen. Die Yi-Silbenzeichen könnten eine "Geheimschrift" verwendet werden ( falls invertierbar ). Zufällige Yi-Silbenzeichen sind z.B.:
ꋀꁴꌦꄬꃩꃌꉐꉫꎀꎈꋨꊠꉙꂀꎸꇐꂛꎰꈝꊐꏿꁾꂀꄐꊑꄠꀞꁆꈀꎀꍤꎠꉶꅰꀡꊰꁀꁌꂍꈀꈣꊩꋀꑤꌐꊇꌁꅐꆣꐸꌐꁷꀾꋐꆗꌃꄠꍒꀠ ꂞꐑꁀꂆꄰꂕꎺꅠꃊꄰꍥꋚꃀꑄꌀꌰꀊꅐꊳꎯꃀꀴꃈꋠꅲꆻꑐꊳꎳꎀꈨꑐꉃꐀꁐꀉꎰꄽꅰꌁꋬꌠꂎꃳꐰꐉꄠꎮꂐꈯꃱꐠꁞꑐꎣꄠꀆꎁꂀꌸ ꁰꋀꄤꊉꐰꎵꂚꀐꄗꄠꎎꐀꑀꄼꁰꍑꉢꈐꍷꃒꌰꏭꋐꍻꎇꄠꄎꄠꎞꏀꁴꅰꏁꁼꑐꌃꁒꏰꆹꋐꉃꈽꂠꐦꌚꀐꃻꉠꋶꐐꋇꋐꃋꈷꋐꋫꍝꅐꆓꆠ ꐶꈓꃠꍒꇷꇠꑂꑉꌰꎅꄀꋰꅘꇐꋛꉻꀐꑗꏿꆰꋹꈃꉠꍂꑀꇈꁠꁚꇽꊀꄤꎫꃐꎫꋴꋰꆹꃠꏂꄊꒀꐘꌞꋰꎻꇺꌰꈕꅙꏰꅉꌁꁰꌁꂰꌭꈪꑰꆱꄀ ꏐꀰꋥꂐꉟꂀꍀꇀꌤꀠꀮꐦꉐꃧꐜꆠꄆꏰꂹꄄꊰꀻꃻꏠꃒꈠꉞꂀꃖꉄꐠꀾꇍꀠꅮꌰꁅꈘꍀꐼꄽꊀꎈꃹꅐꐃꉉꁠꆪꑐꉓꁏꉠꐊꎠꋐꑛꅾꅠꁪ ꇏꄰꂵꀐꆇꉝꋠꆒꀏꋐꁛꃠꆂꇶꉐꋛꅚꉠꉺꏱꇰꅡꋾꌐꑷꆠꂦꐹꉀꃬꍠꍚꎠꀦꍲꂐꀏꀃꐠꍐꃮꂰꇹꀞꌠꐎꍵꒀꁼꂶꎰꉭꑣꆀꑨꎼꂀꐈꑓꎠ ꅦꄭꊐꄯꊗꅰꄹꏰꌷꁒꍀꆌꎌꊠꎶꄐꂗꉠꈊꇐꄻꊅꋠꇒꃰꉥꉣꉐꉳꄰꐅꈰꎕꍐꅣꁃꀰꒅꑱꀠꏮꐢꃐꃣꎰꐍꇀꅴꃐꃋꈠꄞꊍꋠꇢꃰꄉꎠꍶꌛ ꈰꀥꈽꐠꂎꄤꋀꄺꒀꍨꄭꏠꌒꀃꆐꌃꄅꏐꄛꀀꊰꀐꊇꎌꀠꋎꈮꍀꀜꁞꐀꇀꁂꉀꊜꍠꍚꊀꆘꊀꏈꈠꊞꆭꍠꍪꎠꐖꃸꇠꐒꆮꐰꄥꑹꊠꄖꐃꆠꉆ ꅰꄡꃀꆔꂌꅐꂳꀎꄰꆕꉠꅚꌀꎬꁀꌌꌰꊅꂾꑀꂪꐀꑠꑊꂊꅰꊩꎻꇀꉄꎮꋠꆢꃐꆛꅸꁀꂌꅊꊐꃯꅾꉀꒌꂷꃰꈹꃰꋩꐐꏧꅀꉜꀐꍿꂮꀐꍷꐩꁀ ꌌꈠꁮꁠꋚꈡꁀꇜꀠꄀꃐꍟꃀꅔꁀꐼꋖꁀꉜꉸꈀꍐꂳꆰꎍꐃꍠꁺꌨꎐꑿꌇꃠꃲꐍꍸꃌꌰꐅꂈꅀꂼꄕꄘꏻꏀꍄꇀꇔꀀꂰꏸꄠꋞꋖꊀꂈꋒꉰꊁ
// Code: function zuf_zeichen_tab(min, max, anz) { var i, num, s = ''; for( i=0; i < anz; i += 1 ) { if((i % 60) === 0) { s += '<br />'; } num = Math.floor(Math.random() * (max - min + 1) + min); s += String.fromCharCode(num); } return s; }
teste ( mehrfach klicken ): zuf_zeichen_tab(41000,42124,600) lösche
ECMAScript-Beispiele zu Zufallszahlen .
... http://en.wikipedia.org/wiki/Numerical_Recipes ... https://www.random.org/widgets/integers/ ... Colour Scheme ...
// UNGETESTET UND OHNE GEWÄHR ... function zufall_datum(a, b) { var intervall_weite = b – a + 1; var z = new Date().getTime(); z = Math.floor(z / 10); z %= intervall_weite; // 0 <= z < intervall_weite z += a; // a <= z < b return z; }
// UNGETESTET UND OHNE GEWÄHR ... function pad(number, length) { var str = '' + number; while (str.length < length){ str = '0' + str; } return str; }
// UNGETESTET UND OHNE GEWÄHR ... function Comma(SS) { var T = "", S = String(SS), L = S.length - 1, C, j; for (j = 0; j <= L; j++) { T += (C = S.charAt(j)); if ((j < L) && ((L - j) % 3 == 0) && (C != "-")) { T += ","; } } return T; }
// UNGETESTET UND OHNE GEWÄHR ... // Bsp: wrapping at 2^32 mit 16-bit operationen function safe_add(x, y) { var msw, lsw = (x & 0xFFFF) + (y & 0xFFFF); msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }
Die ersten 258 Primzahlen:
var prims = [ // 258 Primzahlen 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621]; var von=11, bis=21, prim, bas, r = ["<table border><tr><th>"]; for( i = von; i < bis; i += 1 ) { prim = prims[i]; for( bas = 2; bas < 37; bas += 1 ) { r.push( prim.toString(bas) + '<sub>'+bas+'</sub>' ); } r.push("\n</th><th>\n"); } r = r.join("<br />") + "</th></tr></table>"; alert(r);Ausgabe von bin_str zu den Basen 2 ... 36:
111112 10113 1334 1115 516 437 378 349 3110 2911 2712 2513 2314 2115 1f16 1e17 1d18 1c19 1b20 1a21 1922 1823 1724 1625 1526 1427 1328 1229 1130 1031 v32 v33 v34 v35 v36 |
1001012 11013 2114 1225 1016 527 458 419 3710 3411 3112 2b13 2914 2715 2516 2317 2118 1i19 1h20 1g21 1f22 1e23 1d24 1c25 1b26 1a27 1928 1829 1730 1631 1532 1433 1334 1235 1136 |
1010012 11123 2214 1315 1056 567 518 459 4110 3811 3512 3213 2d14 2b15 2916 2717 2518 2319 2120 1k21 1j22 1i23 1h24 1g25 1f26 1e27 1d28 1c29 1b30 1a31 1932 1833 1734 1635 1536 |
1010112 11213 2234 1335 1116 617 538 479 4310 3a11 3712 3413 3114 2d15 2b16 2917 2718 2519 2320 2121 1l22 1k23 1j24 1i25 1h26 1g27 1f28 1e29 1d30 1c31 1b32 1a33 1934 1835 1736 |
1011112 12023 2334 1425 1156 657 578 529 4710 4311 3b12 3813 3514 3215 2f16 2d17 2b18 2919 2720 2521 2322 2123 1n24 1m25 1l26 1k27 1j28 1i29 1h30 1g31 1f32 1e33 1d34 1c35 1b36 |
1101012 12223 3114 2035 1256 1047 658 589 5310 4911 4512 4113 3b14 3815 3516 3217 2h18 2f19 2d20 2b21 2922 2723 2524 2325 2126 1q27 1p28 1o29 1n30 1m31 1l32 1k33 1j34 1i35 1h36 |
1110112 20123 3234 2145 1356 1137 738 659 5910 5411 4b12 4713 4314 3e15 3b16 3817 3518 3219 2j20 2h21 2f22 2d23 2b24 2925 2726 2527 2328 2129 1t30 1s31 1r32 1q33 1p34 1o35 1n36 |
1111012 20213 3314 2215 1416 1157 758 679 6110 5611 5112 4913 4514 4115 3d16 3a17 3718 3419 3120 2j21 2h22 2f23 2d24 2b25 2926 2727 2528 2329 2130 1u31 1t32 1s33 1r34 1q35 1p36 |
10000112 21113 10034 2325 1516 1247 1038 749 6710 6111 5712 5213 4b14 4715 4316 3g17 3d18 3a19 3720 3421 3122 2l23 2j24 2h25 2f26 2d27 2b28 2929 2730 2531 2332 2133 1x34 1w35 1v36 |
10001112 21223 10134 2415 1556 1317 1078 789 7110 6511 5b12 5613 5114 4b15 4716 4317 3h18 3e19 3b20 3821 3522 3223 2n24 2l25 2j26 2h27 2f28 2d29 2b30 2931 2732 2533 2334 2135 1z36 |
---|
Nützliche Funktionen ( auch für später ).
Übergang von UTF-8 nach byte_chrs:
function byte_chrs_from_utf8_str(utf8) { var byte_chrs = ''; try { byte_chrs = unescape(encodeURIComponent(utf8)); } catch (e) { } return byte_chrs; } function utf8_str_from_byte_chrs(byte_chrs) { var utf8 = ''; try { utf8 = decodeURIComponent(escape(byte_chrs)); } catch (e) {utf8 = ''; } return utf8; }
Übergang von byte_chrs nach hex-String
// Bsp: hex_chars_from_utf8_str("äöüÄÖÜß") liefert "c3a4c3b6c3bcc384c396c39cc39f" function hex_chars_from_utf8_str(utf8) { var i, c, byte_chrs = byte_chrs_from_utf8_str(utf8), hex_chars = ""; for (i = 0; i < byte_chrs.length; i += 1) { c = byte_chrs.charCodeAt(i).toString(16); if (c.length == 2) { hex_chars += c; } else if (c.length == 1) { hex_chars += "0" + c; } } return hex_chars; } // Bsp: utf8_str_from_hex_chrs("c3a4c3b6c3bcc384c396c39cc39f") liefert "äöüÄÖÜß" function utf8_str_from_hex_chrs(hex_chrs) { var byte_chrs = hex_chrs.replace(/([0-9a-f]{2})/g, function (a,c) { return String.fromCharCode(parseInt(c,16));}); return utf8_str_from_byte_chrs(byte_chrs); }
Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr