|
Die Programmiersprache Seite 2 |
|
|
|
| * | abcd | abdc | acbd | acdb | adbc | adcb | bacd | badc | bcad | bcda | bdac | bdca | cabd | cadb | cbad | cbda | cdab | cdba | dabc | dacb | dbac | dbca | dcab |
| abcd | abcd | abdc | acbd | acdb | adbc | adcb | bacd | badc | bcad | bcda | bdac | bdca | cabd | cadb | cbad | cbda | cdab | cdba | dabc | dacb | dbac | dbca | dcab |
| abdc | abdc | abcd | adbc | adcb | acbd | acdb | badc | bacd | bdac | bdca | bcad | bcda | dabc | dacb | dbac | dbca | dcab | dcba | cabd | cadb | cbad | cbda | cdab |
| acbd | acbd | acdb | abcd | abdc | adcb | adbc | cabd | cadb | cbad | cbda | cdab | cdba | bacd | badc | bcad | bcda | bdac | bdca | dacb | dabc | dcab | dcba | dbac |
| acdb | acdb | acbd | adcb | adbc | abcd | abdc | cadb | cabd | cdab | cdba | cbad | cbda | dacb | dabc | dcab | dcba | dbac | dbca | bacd | badc | bcad | bcda | bdac |
| adbc | adbc | adcb | abdc | abcd | acdb | acbd | dabc | dacb | dbac | dbca | dcab | dcba | badc | bacd | bdac | bdca | bcad | bcda | cadb | cabd | cdab | cdba | cbad |
| adcb | adcb | adbc | acdb | acbd | abdc | abcd | dacb | dabc | dcab | dcba | dbac | dbca | cadb | cabd | cdab | cdba | cbad | cbda | badc | bacd | bdac | bdca | bcad |
| bacd | bacd | badc | bcad | bcda | bdac | bdca | abcd | abdc | acbd | acdb | adbc | adcb | cbad | cbda | cabd | cadb | cdba | cdab | dbac | dbca | dabc | dacb | dcba |
| badc | badc | bacd | bdac | bdca | bcad | bcda | abdc | abcd | adbc | adcb | acbd | acdb | dbac | dbca | dabc | dacb | dcba | dcab | cbad | cbda | cabd | cadb | cdba |
| bcad | bcad | bcda | bacd | badc | bdca | bdac | cbad | cbda | cabd | cadb | cdba | cdab | abcd | abdc | acbd | acdb | adbc | adcb | dbca | dbac | dcba | dcab | dabc |
| bcda | bcda | bcad | bdca | bdac | bacd | badc | cbda | cbad | cdba | cdab | cabd | cadb | dbca | dbac | dcba | dcab | dabc | dacb | abcd | abdc | acbd | acdb | adbc |
| bdac | bdac | bdca | badc | bacd | bcda | bcad | dbac | dbca | dabc | dacb | dcba | dcab | abdc | abcd | adbc | adcb | acbd | acdb | cbda | cbad | cdba | cdab | cabd |
| bdca | bdca | bdac | bcda | bcad | badc | bacd | dbca | dbac | dcba | dcab | dabc | dacb | cbda | cbad | cdba | cdab | cabd | cadb | abdc | abcd | adbc | adcb | acbd |
| cabd | cabd | cadb | cbad | cbda | cdab | cdba | acbd | acdb | abcd | abdc | adcb | adbc | bcad | bcda | bacd | badc | bdca | bdac | dcab | dcba | dacb | dabc | dbca |
| cadb | cadb | cabd | cdab | cdba | cbad | cbda | acdb | acbd | adcb | adbc | abcd | abdc | dcab | dcba | dacb | dabc | dbca | dbac | bcad | bcda | bacd | badc | bdca |
| cbad | cbad | cbda | cabd | cadb | cdba | cdab | bcad | bcda | bacd | badc | bdca | bdac | acbd | acdb | abcd | abdc | adcb | adbc | dcba | dcab | dbca | dbac | dacb |
| cbda | cbda | cbad | cdba | cdab | cabd | cadb | bcda | bcad | bdca | bdac | bacd | badc | dcba | dcab | dbca | dbac | dacb | dabc | acbd | acdb | abcd | abdc | adcb |
| cdab | cdab | cdba | cadb | cabd | cbda | cbad | dcab | dcba | dacb | dabc | dbca | dbac | acdb | acbd | adcb | adbc | abcd | abdc | bcda | bcad | bdca | bdac | bacd |
| cdba | cdba | cdab | cbda | cbad | cadb | cabd | dcba | dcab | dbca | dbac | dacb | dabc | bcda | bcad | bdca | bdac | bacd | badc | acdb | acbd | adcb | adbc | abcd |
| dabc | dabc | dacb | dbac | dbca | dcab | dcba | adbc | adcb | abdc | abcd | acdb | acbd | bdac | bdca | badc | bacd | bcda | bcad | cdab | cdba | cadb | cabd | cbda |
| dacb | dacb | dabc | dcab | dcba | dbac | dbca | adcb | adbc | acdb | acbd | abdc | abcd | cdab | cdba | cadb | cabd | cbda | cbad | bdac | bdca | badc | bacd | bcda |
| dbac | dbac | dbca | dabc | dacb | dcba | dcab | bdac | bdca | badc | bacd | bcda | bcad | adbc | adcb | abdc | abcd | acdb | acbd | cdba | cdab | cbda | cbad | cadb |
| dbca | dbca | dbac | dcba | dcab | dabc | dacb | bdca | bdac | bcda | bcad | badc | bacd | cdba | cdab | cbda | cbad | cadb | cabd | adbc | adcb | abdc | abcd | acdb |
| dcab | dcab | dcba | dacb | dabc | dbca | dbac | cdab | cdba | cadb | cabd | cbda | cbad | adcb | adbc | acdb | acbd | abdc | abcd | bdca | bdac | bcda | bcad | badc |
| x | abcd | abdc | acbd | acdb | adbc | adcb | bacd | badc | bcad | bcda | bdac | bdca | cabd | cadb | cbad | cbda | cdab | cdba | dabc | dacb | dbac | dbca | dcab |
| Inverses | abcd | abdc | acbd | adbc | acdb | adcb | bacd | badc | cabd | dabc | cadb | dacb | bcad | bdac | cbad | dbac | cdab | dcab | bcda | bdca | cbda | dbca | cdba |
| * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 2 | 2 | 1 | 5 | 6 | 3 | 4 | 8 | 7 | 11 | 12 | 9 | 10 | 19 | 20 | 21 | 22 | 23 | 24 | 13 | 14 | 15 | 16 | 17 |
| 3 | 3 | 4 | 1 | 2 | 6 | 5 | 13 | 14 | 15 | 16 | 17 | 18 | 7 | 8 | 9 | 10 | 11 | 12 | 20 | 19 | 23 | 24 | 21 |
| 4 | 4 | 3 | 6 | 5 | 1 | 2 | 14 | 13 | 17 | 18 | 15 | 16 | 20 | 19 | 23 | 24 | 21 | 22 | 7 | 8 | 9 | 10 | 11 |
| 5 | 5 | 6 | 2 | 1 | 4 | 3 | 19 | 20 | 21 | 22 | 23 | 24 | 8 | 7 | 11 | 12 | 9 | 10 | 14 | 13 | 17 | 18 | 15 |
| 6 | 6 | 5 | 4 | 3 | 2 | 1 | 20 | 19 | 23 | 24 | 21 | 22 | 14 | 13 | 17 | 18 | 15 | 16 | 8 | 7 | 11 | 12 | 9 |
| 7 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 13 | 14 | 18 | 17 | 21 | 22 | 19 | 20 | 24 |
| 8 | 8 | 7 | 11 | 12 | 9 | 10 | 2 | 1 | 5 | 6 | 3 | 4 | 21 | 22 | 19 | 20 | 24 | 23 | 15 | 16 | 13 | 14 | 18 |
| 9 | 9 | 10 | 7 | 8 | 12 | 11 | 15 | 16 | 13 | 14 | 18 | 17 | 1 | 2 | 3 | 4 | 5 | 6 | 22 | 21 | 24 | 23 | 19 |
| 10 | 10 | 9 | 12 | 11 | 7 | 8 | 16 | 15 | 18 | 17 | 13 | 14 | 22 | 21 | 24 | 23 | 19 | 20 | 1 | 2 | 3 | 4 | 5 |
| 11 | 11 | 12 | 8 | 7 | 10 | 9 | 21 | 22 | 19 | 20 | 24 | 23 | 2 | 1 | 5 | 6 | 3 | 4 | 16 | 15 | 18 | 17 | 13 |
| 12 | 12 | 11 | 10 | 9 | 8 | 7 | 22 | 21 | 24 | 23 | 19 | 20 | 16 | 15 | 18 | 17 | 13 | 14 | 2 | 1 | 5 | 6 | 3 |
| 13 | 13 | 14 | 15 | 16 | 17 | 18 | 3 | 4 | 1 | 2 | 6 | 5 | 9 | 10 | 7 | 8 | 12 | 11 | 23 | 24 | 20 | 19 | 22 |
| 14 | 14 | 13 | 17 | 18 | 15 | 16 | 4 | 3 | 6 | 5 | 1 | 2 | 23 | 24 | 20 | 19 | 22 | 21 | 9 | 10 | 7 | 8 | 12 |
| 15 | 15 | 16 | 13 | 14 | 18 | 17 | 9 | 10 | 7 | 8 | 12 | 11 | 3 | 4 | 1 | 2 | 6 | 5 | 24 | 23 | 22 | 21 | 20 |
| 16 | 16 | 15 | 18 | 17 | 13 | 14 | 10 | 9 | 12 | 11 | 7 | 8 | 24 | 23 | 22 | 21 | 20 | 19 | 3 | 4 | 1 | 2 | 6 |
| 17 | 17 | 18 | 14 | 13 | 16 | 15 | 23 | 24 | 20 | 19 | 22 | 21 | 4 | 3 | 6 | 5 | 1 | 2 | 10 | 9 | 12 | 11 | 7 |
| 18 | 18 | 17 | 16 | 15 | 14 | 13 | 24 | 23 | 22 | 21 | 20 | 19 | 10 | 9 | 12 | 11 | 7 | 8 | 4 | 3 | 6 | 5 | 1 |
| 19 | 19 | 20 | 21 | 22 | 23 | 24 | 5 | 6 | 2 | 1 | 4 | 3 | 11 | 12 | 8 | 7 | 10 | 9 | 17 | 18 | 14 | 13 | 16 |
| 20 | 20 | 19 | 23 | 24 | 21 | 22 | 6 | 5 | 4 | 3 | 2 | 1 | 17 | 18 | 14 | 13 | 16 | 15 | 11 | 12 | 8 | 7 | 10 |
| 21 | 21 | 22 | 19 | 20 | 24 | 23 | 11 | 12 | 8 | 7 | 10 | 9 | 5 | 6 | 2 | 1 | 4 | 3 | 18 | 17 | 16 | 15 | 14 |
| 22 | 22 | 21 | 24 | 23 | 19 | 20 | 12 | 11 | 10 | 9 | 8 | 7 | 18 | 17 | 16 | 15 | 14 | 13 | 5 | 6 | 2 | 1 | 4 |
| 23 | 23 | 24 | 20 | 19 | 22 | 21 | 17 | 18 | 14 | 13 | 16 | 15 | 6 | 5 | 4 | 3 | 2 | 1 | 12 | 11 | 10 | 9 | 8 |
| x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| x -1 | 1 | 2 | 3 | 5 | 4 | 6 | 7 | 8 | 13 | 19 | 14 | 20 | 9 | 11 | 15 | 21 | 17 | 23 | 10 | 12 | 16 | 22 | 18 |
d
e c
f b
a
| Drehung: | a->b | b->c | c->d | d->e | e->f | f->a | Bezeichnung: ( bcdefa ) |
| Spiegelung: | a->a | b<->f | c<->e | d->d | Bezeichnung: ( afedcb ) |
Gruppe wird definiert durch erzeugende Elemente: G = [bcdefa, afedcb]
Es wird berechnet: G = {abcdef, afedcb, bafedc, bcdefa, cbafed, cdefab, dcbafe, defabc, edcbaf, efabcd, fabcde fedcba}
| * | abcdef | afedcb | bafedc | bcdefa | cbafed | cdefab | dcbafe | defabc | edcbaf | efabcd | fabcde | fedcba |
| abcdef | abcdef | afedcb | bafedc | bcdefa | cbafed | cdefab | dcbafe | defabc | edcbaf | efabcd | fabcde | fedcba |
| afedcb | afedcb | abcdef | fabcde | fedcba | efabcd | edcbaf | defabc | dcbafe | cdefab | cbafed | bafedc | bcdefa |
| bafedc | bafedc | bcdefa | abcdef | afedcb | fabcde | fedcba | efabcd | edcbaf | defabc | dcbafe | cbafed | cdefab |
| bcdefa | bcdefa | bafedc | cbafed | cdefab | dcbafe | defabc | edcbaf | efabcd | fedcba | fabcde | abcdef | afedcb |
| cbafed | cbafed | cdefab | bcdefa | bafedc | abcdef | afedcb | fabcde | fedcba | efabcd | edcbaf | dcbafe | defabc |
| cdefab | cdefab | cbafed | dcbafe | defabc | edcbaf | efabcd | fedcba | fabcde | afedcb | abcdef | bcdefa | bafedc |
| dcbafe | dcbafe | defabc | cdefab | cbafed | bcdefa | bafedc | abcdef | afedcb | fabcde | fedcba | edcbaf | efabcd |
| defabc | defabc | dcbafe | edcbaf | efabcd | fedcba | fabcde | afedcb | abcdef | bafedc | bcdefa | cdefab | cbafed |
| edcbaf | edcbaf | efabcd | defabc | dcbafe | cdefab | cbafed | bcdefa | bafedc | abcdef | afedcb | fedcba | fabcde |
| efabcd | efabcd | edcbaf | fedcba | fabcde | afedcb | abcdef | bafedc | bcdefa | cbafed | cdefab | defabc | dcbafe |
| fabcde | fabcde | fedcba | afedcb | abcdef | bafedc | bcdefa | cbafed | cdefab | dcbafe | defabc | efabcd | edcbaf |
| fedcba | fedcba | fabcde | efabcd | edcbaf | defabc | dcbafe | cdefab | cbafed | bcdefa | bafedc | afedcb | abcdef |
| x | abcdef | afedcb | bafedc | bcdefa | cbafed | cdefab | dcbafe | defabc | edcbaf | efabcd | fabcde | fedcba |
| invers | abcdef | afedcb | bafedc | fabcde | cbafed | efabcd | dcbafe | defabc | edcbaf | cdefab | bcdefa | fedcba |
{abcdef} =[abcdef]
{abcdef afedcb} =[afedcb]
{abcdef bafedc} =[bafedc]
{abcdef cbafed} =[cbafed]
{abcdef dcbafe} =[dcbafe]
{abcdef defabc} =[defabc]
{abcdef edcbaf} =[edcbaf]
{abcdef fedcba} =[fedcba]
{abcdef cdefab efabcd} =[cdefab] = [efabcd]
{abcdef bcdefa cdefab defabc efabcd fabcde} =[bcdefa] = [fabcde]
(bisher alle zyklisch, daher kommutativ)
{abcdef afedcb dcbafe defabc, kommutativ} =[afedcb dcbafe] = [afedcb defabc] = [dcbafe defabc]
{abcdef bafedc defabc edcbaf, kommutativ} =[bafedc defabc] = [bafedc edcbaf] = [defabc edcbaf]
{abcdef cbafed defabc fedcba, kommutativ} =[cbafed defabc] = [cbafed fedcba] = [defabc fedcba]
{abcdef afedcb cbafed cdefab edcbaf efabcd, nicht komm.} =[afedcb cbafed] = [afedcb cdefab] = [afedcb edcbaf]
= [afedcb efabcd] = [cbafed cdefab] = [cbafed edcbaf] = [cbafed efabcd] = [cdefab edcbaf] = [edcbaf efabcd]
{abcdef bafedc cdefab dcbafe efabcd fedcba, nicht komm.} =[bafedc cdefab] = [bafedc dcbafe] = [bafedc efabcd]
= [bafedc fedcba] = [cdefab dcbafe] = [cdefab fedcba] = [dcbafe efabcd] = [dcbafe fedcba] = [efabcd fedcba]
{Ganze Gruppe, nicht komm.} =[afedcb bafedc] = [afedcb bcdefa] = [afedcb fabcde] = [afedcb fedcba]
= [bafedc bcdefa] = [bafedc cbafed] = [bafedc fabcde] = [bcdefa cbafed] = [bcdefa dcbafe] = [bcdefa edcbaf]
= [bcdefa fedcba] = [cbafed dcbafe] = [cbafed fabcde] = [dcbafe edcbaf] = [dcbafe fabcde] = [edcbaf fabcde]
= [edcbaf fedcba] = [fabcde fedcba]
Schließlich noch die Kommutatorgruppen
Kommutatorenuntergruppen:
Ganze Gruppe
{ abcdef cdefab efabcd }
{ abcdef }
Die Gruppe ist also auflösbar.
Mit durchnummerierten Permutationen:
| * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2 | 2 | 1 | 11 | 12 | 10 | 9 | 8 | 7 | 6 | 5 | 3 | 4 |
| 3 | 3 | 4 | 1 | 2 | 11 | 12 | 10 | 9 | 8 | 7 | 5 | 6 |
| 4 | 4 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 11 | 1 | 2 |
| 5 | 5 | 6 | 4 | 3 | 1 | 2 | 11 | 12 | 10 | 9 | 7 | 8 |
| 6 | 6 | 5 | 7 | 8 | 9 | 10 | 12 | 11 | 2 | 1 | 4 | 3 |
| 7 | 7 | 8 | 6 | 5 | 4 | 3 | 1 | 2 | 11 | 12 | 9 | 10 |
| 8 | 8 | 7 | 9 | 10 | 12 | 11 | 2 | 1 | 3 | 4 | 6 | 5 |
| 9 | 9 | 10 | 8 | 7 | 6 | 5 | 4 | 3 | 1 | 2 | 12 | 11 |
| 10 | 10 | 9 | 12 | 11 | 2 | 1 | 3 | 4 | 5 | 6 | 8 | 7 |
| 11 | 11 | 12 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 9 |
| 12 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| invers | 1 | 2 | 3 | 11 | 5 | 10 | 7 | 8 | 9 | 6 | 4 | 12 |
{1} =[1]
{1 2} =[2]
{1 3} =[3]
{1 5} =[5]
{1 7} =[7]
{1 8} =[8]
{1 9} =[9]
{1 12}=[12]
{1 6 10} =[6] = [10]
{1 4 6 8 10 11} =[4] = [11]
(bisher alle zyklisch, also kommutativ)
{1 2 7 8, kommutativ} =[2 7] = [2 8] = [7 8]
{1 3 8 9, kommutativ} =[3 8] = [3 9] = [8 9]
{1 5 8 12, kommutativ} =[5 8] = [5 12] = [8 12]
{1 2 5 6 9 10, nicht komm.} =[2 5] = [2 6] = [2 9] = [2 10] = [5 6] = [5 9] = [5 10] = [6 9] = [9 10]
{1 3 6 7 10 12, nicht komm.} =[3 6] = [3 7] = [3 10] = [3 12] = [6 7] = [6 12] = [7 10] = [7 12] = [10 12]
{Ganze Gruppe, nicht komm.} =[2 3] = [2 4] = [2 11] = [2 12] = [3 4] = [3 5] = [3 11] = [4 5] = [4 7]
= [4 9] = [4 12] = [5 7] = [5 11] = [7 9] = [7 11] = [9 11] = [9 12] = [11 12]
Schließlich noch die Kommutatorgruppen
Kommutatorenuntergruppen:
Ganze Gruppe
{ 1 6 10 }
{ 1 }
Die Gruppe ist also auflösbar.
koeff *x0 + koeff *x1 + koeff * x2 = koeff
00 01 02 03
koeff *x0 + koeff *x1 + koeff * x2 = koeff
10 11 12 13
koeff *x0 + koeff *x1 + koeff * x2 = koeff
20 21 22 23
Siehe
Lektion 15
1^0 + 2^0 + 3^0 ... + n^0 = n 1^1 + 2^1 + 3^1 ... + n^1 = 1/2n^2 + 1/2n 1^2 + 2^2 + 3^2 ... + n^2 = 1/3n^3 + 1/2n^2 + 1/6n 1^3 + 2^3 + 3^3 ... + n^3 = 1/4n^4 + 1/2n^3 + 1/4n^2 1^4 + 2^4 + 3^4 ... + n^4 = 1/5n^5 + 1/2n^4 + 1/3n^3 - 1/30n 1^5 + 2^5 + 3^5 ... + n^5 = 1/6n^6 + 1/2n^5 + 5/12n^4 - 1/12n^2 1^6 + 2^6 + 3^6 ... + n^6 = 1/7n^7 + 1/2n^6 + 1/2n^5 - 1/6n^3 + 1/42n 1^7 + 2^7 + 3^7 ... + n^7 = 1/8n^8 + 1/2n^7 + 7/12n^6 - 7/24n^4 + 1/12n^2 1^8 + 2^8 + 3^8 ... + n^8 = 1/9n^9 + 1/2n^8 + 2/3n^7 - 7/15n^5 + 2/9n^3 - 1/30n 1^9 + 2^9 + 3^9 ... + n^9 = 1/10n^10 + 1/2n^9 + 3/4n^8 - 7/10n^6 + 1/2n^4 - 3/20n^2 1^10 + 2^10 + 3^10 ... + n^10 = 1/11n^11 + 1/2n^10 + 5/6n^9 - 1n^7 + 1n^5 - 1/2n^3 + 5/66n 1^11 + 2^11 + 3^11 ... + n^11 = 1/12n^12 + 1/2n^11 + 11/12n^10 - 11/8n^8 + 11/6n^6 - 11/8n^4 + 5/12n^2Programm dazu: Berechnung der Formel S(n,k)=1k + 2k + ... nk
Das Programm TTMusik
(Downloadseite)
spielt Akkorde und berechnet dazu
genauen Frequenzen, Frequenzverhältnisse und
die Intervalle.
Der Unterschied der reinen Stimmung zur gleichschwebenden Stimmung
wird hörbar.
(Tonerzeugung nicht über Midi oder Synthesizer sondern
als WAV-Datei.)
Mathematisch wird dabei der Logarithmus zur
"Tripelbasis" (2,3,5) berechnet. z.B.wird aus
dem Frequenzverhältnis q=1,4222222222 der "Tripellogarithmus" (auch "Sigel" genannt)
[x,y,z]=[2,-2,-1] ermittelt, der die Gleichung
q=2x·(3/2)y·(5/4)z ganzzahlig erfüllt, d.h.
unit tt_wav;
{Ausgerichtete Recordfelder aus!!!}
{$A-}
interface
uses Classes, mmsystem, WinProcs;
const sampl441 = 441; //für eine 1/100-Sekunde
sampl22050 = 50*sampl441; //22050
type
TRiffHeader = record
riff: Array[0..3] OF Char;
filesize: LongInt;
typeStr: Array[0..3] OF Char;
end;
TChunkRec = record
id: Array[0..3] OF Char;
size: LongInt;
end;
TWaveFormatRec = record
tag: Word;
channels: Word;
samplesPerSec: LongInt;
bytesPerSec: LongInt;
blockAlign: Word;
end;
TPCMWaveFormatRec = record
wf: TWaveFormatRec;
bitsPerSample: Word;
end;
TWAVHeader = record { WAV Format }
riffHdr: TRiffHeader;
fmtChunk: TChunkRec;
fmt: TPCMWaveFormatRec;
dataChunk: TChunkRec;
{ data follows here }
end;
var lautstaerke: integer = 3200; //wird bei tondauer gesetzt
WAVDauerEinmalig: single = 0;
function tondauer: integer;
procedure spiele(fr1, fr2, fr3, fr4, fr5, fr6, fr7, fr8: double);
procedure spieleton(fr: double);
procedure tontief;
procedure ton;
procedure tonhoch;
procedure alarmton;
implementation
procedure HeadInit(var Header: TWAVHeader);
begin
with Header do
begin
with riffHdr do
begin
//Schreibe 'RIFF' in die ersten 4 bytes
riff[0] := char($52); riff[1] := char($49); riff[2] := char($46); riff[3] := char($46);
// wird spaeter gesetzt;
filesize := 0;
//Schreibe 'WAVE' in die naechsten 4 bytes
typeStr[0] := char($57); typeStr[1] := char($41); typeStr[2] := char($56); typeStr[3] := char($45);
end;
with fmtChunk do
begin
//Schreibe 'fmt' + char($20) in die naechsten 4 bytes
id[0] := char($66); id[1] := char($6D); id[2] := char($74); id[3] := char($20);
size := $10;
end;
with fmt.wf do
begin
//its 16 bit, 44kHz Stereo
tag := 1; channels := 2;
samplesPerSec := $AC44;
bytesPerSec := MakeLong($B110, $2);
blockAlign := 4;
fmt.bitsPerSample := $10;
end;
with dataChunk do
begin
//Schreibe 'data' in die naechsten 4 bytes
id[0] := char($64); id[1] := char($61); id[2] := char($74); id[3] := char($61);
size := 0;
end;
end;
end;
function f0(const k: double): SmallInt;
begin {Hier Frequenzen ganz exakt. Üblich sind Tabellen (wesentlich schneller, da nur
einmal berechnet wird}
//result := Round(sin(k*Pi/sampl22050)*lautstaerke); //reiner sinus
result := Round(sin((k * Pi) / sampl22050) * lautstaerke) div 2 +
Round(sin((2 * k * Pi) / sampl22050) * lautstaerke) div 4 + //1.Oberton
Round(sin((3 * k * Pi) / sampl22050) * lautstaerke) div 6; //2.Oberton}
end;
function Abtastwert(const k1,k2,k3,k4,k5,k6,k7,k8: double): SmallInt; //
var f:Smallint;
begin //z.B. k=i*frw1 (für i=441*500(5Sek) frw1=100)=max=sampl220500000
//Longword=0..4294967295
if k1=0 then Begin result:=0; exit End else f:=f0(k1);
result:=f;
if k2=0 then exit;
if k2<>k1 then f:=f0(k2); //else f=f0(k1)
result:=result+f;
if k3=0 then exit;
if k3<>k2 then f:=f0(k3); //else f=f0(k2)
result:=result+f;
if k4=0 then exit;
if k4<>k3 then f:=f0(k4); //else f=f0(k3)
result:=result+f;
if k5=0 then exit;
if k5<>k4 then f:=f0(k5); //else f=f0(k4)
result:=result+f;
if k6=0 then exit;
if k6<>k5 then f:=f0(k6); //else f=f0(k5)
result:=result+f;
if k7=0 then exit;
if k7<>k6 then f:=f0(k7); //else f=f0(k6)
result:=result+f;
if k8=0 then exit;
if k8<>k7 then result:=result+f0(k8) else result:=result+f;
end;
procedure spiele(fr1, fr2, fr3, fr4, fr5, fr6, fr7, fr8: double);
var ms: TMemoryStream;
Header: TWavHeader;
i: integer; //z.B. i=0 to 441*500=441500 (5 Sekunden)
s: SmallInt;
begin
HeadInit(Header);
Header.Datachunk.size := sampl441 * tondauer * 2 * 2; //441*cs Samples pro sekunde,
//2 Channels, 2Bytes (16bit)
//FileSize = DataSize + HeaderSize
Header.riffHdr.FileSize := Header.Datachunk.size + 24;
ms := TMemoryStream.Create;
try
ms.Seek(0, 0);
//Write Header to Stream
ms.Write(Header, sizeof(header));
//form here: just data chunks. in this case (16bit stereo):
// 16bit LeftValue, 16bit Right Value, 16bit LeftValue, 16bit Right Value ...
// in the range of a SmallInt
if tondauer <= 0 then exit; //kein Ton. Sollte nicht vorkommen
for i := 0 to sampl441 * tondauer - 2 do BEgin
//Writing left channel
s := Abtastwert(i * fr1, i * fr2, i * fr3, i * fr4,
i * fr5, i * fr6, i * fr7, i * fr8);
ms.Write(s, 2);
//Writing to right channel
ms.Write(s, 2);
ENd;
Finally
if not PlaySound(ms.Memory,SND_FILENAME, SND_MEMORY or SND_SYNC) then
PlaySound(Nil,SND_FILENAME, SND_MEMORY or SND_SYNC);
ms.Free;
End;
end;
procedure spieleton(fr: double);
begin
spiele(fr, fr, fr, fr, fr, fr, fr, fr);
end;
function tondauer: integer; //standard 10 Centisekunten
var parameterlautstaerke: integer;
begin
result := 100;
parameterlautstaerke := 100;
lautstaerke := parameterlautstaerke*32;
end;
procedure tontief;
begin
spieleTon(220);
end;
procedure ton;
begin
spieleTon(440);
end;
procedure tonhoch;
begin
spieleTon(880);
end;
procedure alarmton;
begin
WAVDauerEinmalig := 1/4;
spieleTon(440);
WAVDauerEinmalig := 1/4;
spieleTon(528);
WAVDauerEinmalig := 1/2;
spieleTon(660);
end;
end.
———————————— Quellcode schnipp —————————
setlength(Mybutton,10);
for i:=0 to 9 do Begin
Mybutton[i]:=TButton.Create(Form1);
Mybutton[i].Parent:=Form1;
Mybutton[i].width:=45;
Mybutton[i].caption:='Nr.'+intToStr(i);
Mybutton[i].top:=0;
Mybutton[i].left:=50*i;
Mybutton[i].OnClick:=Form1.MybuttonClick;
End;—————————————— schnapp —————————————————
—————————— Quellcode schnipp ————————————————
procedure TForm1.FormCreate(Sender: TObject);
var myimage: TImage; //uses extctrls einfügen
begin
zeichne := false;
myimage := Timage.create(application);
//Damit beim Beenden automatisch free
with myimage do Begin
parent := Form1;
onMousedown :=ImageonMousedown;
onmousemove := ImageOnMousemove;
onmouseup := ImageOnMouseUp;
left := 10;
top := 10;
width := Form1.Clientwidth-20;
height := Form1.clientheight-20;
Canvas.Rectangle(0,0,width,height);
show;
End;
end;
procedure TForm1.ImageonMousedown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with (sender as Timage).canvas do moveto(x,y);
Zeichne := True;
end;
procedure TForm1.ImageOnMousemove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if zeichne then with (sender as Timage).canvas do lineto(x,y);
end;
procedure TForm1.ImageOnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Zeichne := false;
end;
———————————————— schnapp ———————————————
procedure tausche(var a,b:real);
var x:real;
begin
x:=a;
a:=b;
b:=x;
end;
procedure bubblesort(var aa:array of real; n1,n2:integer);
//sortiert von n1 bis n2
var i:integer;
fertig: Boolean;
begin
repeat
fertig:=true;
for i:=n1 to n2-1 do Begin
if aa[i]>aa[i+1] then BEgin
tausche(aa[i],aa[i+1]);
fertig:=false;
ENd;
End;
until fertig;
end;
Häufig sieht man auch folgende Variante
for i := n1 to n2-1 do for j := i+1 to n2 do
if aa[i]>aa[j] then tausche(aa[i],aa[j]);
|
MomentaufnahmeDie ersten beiden Stapel der vier Stapel sind bereits sortiert und richtig zusammengemischt worden. (1 bis 23 mit Lücken rot)Der dritte Stapel ist bereits sortiert. (7, 11, 16, 18, 19, 20) Der vierte Stapel wird gerade sortiert. (4, 10, 14, 3, 24 ,0) Jetzt fehlt noch: (i) Der vierte Stapel muss noch fertig sortiert werden. (ii) Der dritte und vierte Stapel müssen dann richtig zusammen gemischt werden. (iii) Der rote (Stapel 1 und 2 zusammen) und der blaue (Stapel 3 und 4) müssen dann noch richtig zusammengemischt werden. Mit dem Programm Sortieren.exe werden die verschieden Sortierverfahren anschaulich gemacht. Beeindruckend ist der Geschwindigkeitsvergleich. |
procedure Einsortieren(var aa:array of real; n1,m,n2:integer);
//aa[n1]<=aa[n1+1]<=..<=aa[m] aa[m+1]<=aa[m+2]<=...<=aa[n2]
// i1——————————————————> i2——————————————————————>
// k—————————— füllt Hilfsfeld———————————————————————>
var i1,i2,k,n:integer;
hilf: array of real;
begin
n:=n2-n1+1; //Anzahl von aa[n1] ... aa[n2]
setlength(hilf,n); //Platz für hilf[0] ... hilf[n-1]
i1:=n1;
i2:=m+1;
for k:=0 to n-1 do //i1>m und i2>n2; auch abfangen!
if (i1>m) or ((i2<=n2) and (aa[i1]>aa[i2])) then Begin
hilf[k]:=aa[i2];
inc(i2);
End else Begin
hilf[k]:=aa[i1];
inc(i1);
End;
for k:=0 to n-1 do aa[n1+k]:=hilf[k];
end;
procedure sortieren(var aa:array of real;n1,n2:integer);
var m:integer;
begin
if n1=n2 then exit; //Bei einem Element ist nichts zu sortieren
m:=(n1+n2) div 2; //Mitte
sortieren(aa,n1,m); //Rekursiv
sortieren(aa,m+1,n2); //Rekursiv
Einsortieren(aa,n1,m,n2);
end;
Effizienz ist von der Ordnung(n*lbn), wobei lb der Zweierlogarithmus ist
Effizienz n Bublesort n^2 Hier n*lb n
10 100 33
20 400 86
100 10000 664
1000 1 000 000 9 965
10000 100 000 000 132 877
Quicksort wurde 1960 von C.A.R.Hoare vorgestellt.
Dieser - wahrscheinlich - am häufigsten verwendete Ordnungsalgorithmus ist der schnellste. Er benötigt keinen (vor allem bei Array of string) zeitraubenden Hilfarray.
Das Grundprinzip des Sortierverfahrens ist "teile und herrsche". Es wird ein Vergleichswert gewählt, dann das Feld in zwei Teile zerlegt mit allen Elementen größer oder gleich dem Vergleichswert auf einer Seite und alle kleiner als der Vergleichswert auf der anderen Seite. Dieser Vorgang wird für beide entstandenen Teile wiederholt bis die Datei sortiert ist.
Die wichtigen Funktionen aus der unit sind folgende:
procedure sortieren(var aa: array of real; von,bis:integer);
//Quicksort rekursiv
var i,j: integer; //vor dem 13.02.2002 fälschlicherweise byte
wertDerMitte:real;
begin
i:=von;
j:=bis;
wertDerMitte:=aa[(von+bis) div 2]; //Die Mitte
repeat
while aa[i]j;
if voni then sortieren(aa,i,bis);
end;
|
Ein einfacher Browser. Besonderheit:
Man kann leicht in lokal gespeicherten HTML-Seiten blättern. Hinweis: TTweb wurde in TTText integriert. Downloadseite |
|
Dieses Programm ermöglicht Ihnen, den ganzen Bildschirm oder einen Teil davon "abzufotografieren" und als JPG-Datei
zu speichern.
MenüpunkteBildschirm (Str+B): Der ganze Bildschirm wird abfotografiert und kann dann als JPG-Datei abgespeichert werden.Teilausschnitt (Str+S): Ein Teil des Bildschirms wird abfotografiert und kann dann als JPG-Datei abgespeichert werden (nochmal Str+S). Das Rechteck des Bereichs wird bestimmt durch die linke obere Ecke von "links oben" und die rechte untere Ecke von "rechts unten". Timer: Der Bildschirmausschnitt wird erst nach 10, 20, ... Sekunden aufgenommen. Das Programm wartet im Hintergrund. Solange haben Sie die Möglichkeit, Menüs aufzuklappen und Fenster sichtbar zu machen u.s.w., so dass auch dies aufs Bild kommt. Das Problem, dass Fenster verschwinden, wenn Sie dieses Programm aktivieren ,ist damit gelöst. Markierungen: Die Markierungen werden in die Nähe des Hauptfensters von Bildschirmausschnitt bewegt. Die Markierungen können Sie an die richtige Stelle ziehen. |
|
Einfacher zu bedienen als das Startmenüprogramm von Windows.
Downloadseite |
Galton-BrettKugeln fallen über ein Nagelbrett, werden bei jedem Nagel nach links oder nach rechts abgelenkt und landen schließlich unten in Sammelbehältern.Eine schöne Veranschaulichung der Binomialverteilung. |
|
| Downloadseite |
| | |