Das schaut ja echt gut aus, AHT ! Für Win-10 bestimmt super!
Ist eigentlich für alle Windowsversionen ab XP gedacht.
Das schaut ja echt gut aus, AHT ! Für Win-10 bestimmt super!
Ist eigentlich für alle Windowsversionen ab XP gedacht.
Achso, OK, danke für den Hinweis! Ich habe auch einen:
Abt. Beweis durch langes Anschauen
=======================
Manchmal reißt auch ein alter Mathe-Nerd noch beide Augen klodeckelgroß auf, z.B. bei folgender Behauptung - und deren elegantem Beweis duch geeignete geometrische Darstellung:
"Die Summe aller Kuben der Zahlen von 0 bis n ist gleich dem Quadrat der Summe der Zahlen von 0 bis n" bzw.
[Blockierte Grafik: http://matheplanet.com/matheplanet/nu…45bc7a0a985.png]
Also bitte, folgende Figur so lange anschauen, bis man es selbst sieht:
[Blockierte Grafik: http://matheplanet.com/matheplanet/nu…27c140a7046.png]
Quelle: Matroids Matheplanet - dort zu finden unter dem Suchbegriff "Kombinatorische Herleitung von Potenzsummen". Da staunt der Laie, und der Fachmann freut sich!
Gruss
P.S.: Über zahlreiche derartige "Ansichts-Beweise" gibt es ein Buch (engl.) von Roger B. Nelson: "Proofs without Words" (aus 1993), daß derzeit noch über folgendes Link als pdf im Internet zu finden ist: http://is.muni.cz/el/1441/podzim…thout_Words.pdf - aber vermutlich nicht mehr lange!
Abt. Geometrie darstellen
================
Wer kann sich noch an die Schulzeit und das Fach "Darstellende Geometrie" erinnern, als wir Ofenrohre mit Würfeln zum Schnitt brachten und im Schrägriss zeichnen mussten - mit den perspektivischen Abmessungen aus Aufriss, Grundriss und Kreuzriss?
Ich nicht, deshalb hier das Link zum Klassiker unter den 'DASTE'-Lehrbüchern, das epochale Werk von Eduard STIEFEL, 3. Auflage aus 1971 als .PDF (auf Deutsch):
http://abel.math.harvard.edu/~knill/history…end/Stiefel.pdf
In diesem Verzeichnis finden sich aber auch andere gute Lehrbücher als PDF:
http://abel.math.harvard.edu/~knill/history/darstellend/
Heute macht man das mit CAD-Freeware wie etwa Google-Sketchup, mit dem z.B. auch Gebäude in Google Earth erstellt werden können: http://www.sketchup.com/de
Gruss
P.S.: Wenn ich heute noch das wüsste, was ich schon alles vergessen habe - Mensch, ich hätte einen Fesselballon als Kopf. So genügt ein Froschkopf...
Abt. Profan
=======
Mich beschleicht gerade ein Verdacht, warum Profan im englischen Sprachraum damals nicht so recht ankommen wollte: Profane heißt dort nicht allein "simpelst, einfachst", sondern Google Translate liefert zu Profane, Profanity nämlich auch:
blasphemous or obscene language; used like in "an outburst of profanity":
Gotteslästerung, Fluch, Schmutziges Wort, Obszönität.
Englische Synonyme: swear word, expletive, curse, obscenity, four-letter word, dirty word, blasphemy, swearing, foul language, bad language, cursing, cuss, cuss word, imprecation, execration
Wie gut, daß das Profan inzwischen XProfan heißt!
Gruss
P.S.: XWords heißt "Kreuzworträtsel". Hoffentlich fasst jetzt niemand XProfan falsch auf...
Wenn man C(und irgendwas) als "göttliche" Sprache auffaßt, dann stimmt Gotteslästerung doch. Bei Produktnamen ist das immer nicht so einfach. Man findet irgendwo doch gelegentlich eine Sprache, wo ein Name eine unangemessene Bedeutung hat.
Gruß Volkmar
Abt. Schatzinsel-Rätsel
==============
Echtes Gold 24 karat (99.99%) wiegt lt. Wikipedia bei 20°C gemessen 19,32 g/cm3, und ist damit eigenartigerweise sogar etwas dichter als die Materialtheorie vorhersagt (19,302 g/cm3), vmtl. wegen einiger schwerer Isotope bzw. Verunreinigungenmit Uran.
Katzengold dagegen ist überhaupt kein Gold, sondern es handelt sich um eine Erscheindungsform des Pyrit - ein Mineral, das aus Eisen und Schwefel besteht und deshalb auch goldartig glänzt. Es wird auch Narrengold oder Ketzergold genannt, weist im Gegensatz zu echtem Gold eine starke Sprödigkeit und ein viel geringeres Gewicht (4,95 bis 5,2 g/cm³) auf. Einige Narren dürften aber doch reingefallen sein, sonst hieße es wohl nicht so!
Gruss
P.S.: Aus Jux und für Zwecke des nachstehden Rätsels sei einmal angenommen, es bestehe tatsächlich Verwechlsungsgefahr auf Grund ähnlicher Eigenschaften - Sonst macht das nachstende Progi nämlich so-gar-keinen Sinn. Viel Spaß!
WindowTitle "Das Schatzkisten-Rätsel"
'(N) Nosens-ware: Kompletter Unsinn 2015-09 by P.Specht, Wien
'OHNE JEGLICHE GEWÄHR! Verwendung auf alleiniges Risiko des Anwenders!
WindowStyle 24
CLS
declare n&,s1!,s2!,su!,ge!,gf!,g!,rg!,gdiff!
Print
Print " Der berühmte Seeräuber Käptn Hook hat auf seiner Schatzinsel\n"
print " eine Kiste voller echter Goldmünzen vergraben. Um nicht\n"
print " von anderen Gaunern beklaut zu werden, hatte er die Idee,\n"
print " neben der echten Kiste Gold auch noch 9 weitere Kisten mit\n"
print " Münzen aus sog. Katzengold (sieht aus wie Gold, schmeckt wie\n"
print " Gold, ist weich wie Gold, wiegt fast so viel) zu vergraben.\n"
print " 'DA KOMMT MIR KEINER DRAUF!' prahlte er einmal im Suff... \n"
print " Sein weiterer Trick: Die Kisten waren alle verschieden groß.\n"
print " Doch eines Tages findet er alle Kisten aufgebrochen, und die\n"
print " richtige ist verschwunden. Sofort bekommt er einen Verdacht,\n"
print " denn es gibt nur eine Räuberbraut mit einer genauen Küchenwaage\n"
print " auf der gesammten Insel: Seeräuber-Jenny!! Andererseits, denkt\n"
print " er, war er nur so kurz weg, sodaß sich höchstens eine einzige \n"
print " Wägung ausgegangen sein mußte. Ist Jenny klug genug?\n\n\n"
font 2
print " WIE KONNTE IHN JEMAND MIT NUR EINER EINZIGEN WÄGUNG AUSTRICKSEN?"
font 0
waitinput
cls:print:print " Erst selber nachdenken bitte!\n\n [Taste]":beep
Waitinput
cls
print
print " Die Sache ist eigentlich relativ einfach: \n"
print " Aus der 1. Kiste wurde eine Münze genommen, aus der 2. zwei"
print " usw. usw., aus der 10. Kiste 10 Münzen. Eine Kiste enthält "
print " die echten Münzen, die 9 anderen nur Münzen aus Katzengold."
print
print " Theoretisches Beispiel:\n"
print " Eine echte Goldmünze wiege 101 g, eine Münze Katzengold 100 g."
print " Eine genaue Wägung liefere nun 5507 g. Dann ist wohl klar, "
print " daß das echte Gold aus der 7. Kiste stammen mußte! Und weg wars!"
print
print " Vermutlich klappt das nicht mit allen Wertekombinationen..."
print " Hier ein Programm, um verschiedene Konfigurationen zu testen: "
nochmal:
print
print " Gesamtzahl aller Kisten = ";:input n&
case n&=0:n&=1
print " Gewicht einer echten Münze [g]: ";:input ge!
print " Gewicht einer falschen Münze: ";:input gf!
print
gdiff!=ge!-gf!
if gdiff!=0
print " Wegen Gewichtsgleichheit ist leider kein Ergebnis ermittelbar!";
goto "hop"
endif
print " Das Gesamtgewicht des Münz-Samples, gezogen gemäß Räuber-Rezept"
print " muß daher liegen zwischen ";
su!=0
whileloop 1,n&
su!=su!+&Loop*gf!
endwhile
s1!=su!+ 1*gdiff!
s2!=su!+n&*gdiff!
print s1!,"und ";s2!,"g."
print
print " Was wog das Sample nun genau?: ";:input g!
print
rg!=g!-su!
print " Abzüglich Mindestgewicht des Samples sind das ";rg!,"als Divisionsbasis."
print " Der Gewichtsunterschied beträgt: ";gdiff!,"g"
print " Divisionsergebnis: ";rg!/gdiff!
print "\n Vermutlich ist das Gold also in der ";int(rg!/gdiff!+0.5);". Kiste!"
hop:
waitinput
cls
goto "nochmal"
Alles anzeigen
Abt. Demokratie
===========
Gemäß ARROW-Theorem https://de.wikipedia.org/wiki/Arrow-Theorem ist erwiesen, daß selbst bei klarer individueller Präferenzordnung nicht sichergestellt werden kann, daß die gesellschaftliche Mehrheitswahl den Volkswillen tatsächlich zum Ausdruck bringt. Hier ein Extrembeispiel dazu:
Ausgangssituation: An der Macht die Partei mit den meisten Stimmen: C
Wähler:______ 1 _ 2 _ 3 _ 4 _ 5
1. Präferenz __ B _ B _ C _ C _ C
2. Präferenz __ C _ C _ B _ B _ B
Nächste Wahlperiode:
Partei B gründet nun zwei thematisch der C politisch nahestehende Parteien (X und Y) mit insgesamt auf C sehr attraktiv wirkenden Forderungen, jeweils eine davon aber äusserst übertrieben. B aktiviert damit Protestwähler für SICH, welche B selbst aber nie gewählt hätten:
Wähler: ______ 1 _ 2 _ 3 _ 4 _ 5
1. Präferenz ___ B _ B _ X _ C _ Y
2. Präferenz ___ C _ C _ C _ X _ C
3. Präferenz ___ X _ X _ Y _ Y _ X
4. Präferenz ___ Y _ Y _ B _ B _ B
... und kommt so gemäß Mehrheitswahlrecht an die gut bezahlten Posten.
B) Manipulation von Wahlsprengeln
Q: https://de.wikipedia.org/wiki/Gerrymandering
Gerrymandering (Wahlkreisschiebung): Die absichtliche, dem Stimmgewinn dienende Manipulation der Grenzen von Wahlkreisen bei einem Mehrheitswahlsystem. Der Begriff ist benannt nach Elbridge Gerry, einem Gouverneur von Massachusetts des frühen 19. Jahrhunderts und späteren US-Vizepräsidenten, dessen Wahlbezirk nach einem Neuzuschnitt – wie ein zeitgenössischer Zeitungskarikaturist bemerkte – einem Salamander glich. Daher auch der Name Gerry + Salamander = Gerrymander.
Nur reines Verhältniswahrecht schließt solch ein Vorgehen aus, Vorzugstimmensysteme ermöglichen "Dscherrimandarin".
Beispiel aus Wikipedia: Der Neuzuschnitt der Landtagswahlkreise in Sachsen vor der Landtagswahl 2014 wurde von den Oppositionsparteien kritisiert, mit den neuen Wahlkreisgrenzen würden die Direktkandidaten der CDU bevorteilt.
Gruss
Abt. Profan
=======
...P.S.: XWords heißt "Kreuzworträtsel". Hoffentlich fasst jetzt niemand XProfan falsch auf...
Na X wird dort halt als Cross (Kreuz) gesprochen, XWord also als Kreuzwort.
Dann ist das X als kreuzweise wirklich bissl heftig. Aber das haben dort schon ganz andere Produkte heil überstanden, dort wurde diese "Vorsilbe" ja erfunden.
Abt. "Kombiniere !" (Zit. Nick Knatterton)
==========================
KOMBINATORIK ist ein Fachbereich der Statistik. Sie beschäftigt sich mit Neu-Zusammenstellungen der Elemente aus einer Grundmenge (die meist N genannt wird, sie hat n Elemente) und will diese Zusammenstellung entweder tatsächlich durchführen ("enumerieren"), oder nur die Anzahl der Zusammenstellungen errechnen, die sich dabei ergeben würden.
Warum? Weil es um Wahrscheinlichkeiten geht, dass z.B. eine bestimmte Zusammenstellung auftaucht (etwa eine Gewinnzahl aus "6 aus 45") - Der Begriff Wahrscheinlickeit ist dann als "Günstige Fälle dividiert durch Überhaupt mögliche Fälle" definiert.
Zusammenstellungen sollen dabei ENTWEDER "Worte" der Länge k ergeben (- bei Worten ist die Reihenfolge wichtig!), dann spricht man von VARIATIONEN. (Merke: W_ariation=W_ort)
Zwischendurch-Hinweis: Falls die Wortlänge genau der Menge der Elemente in der Grundmenge entspricht, - wenn also immer ALLE Elemente der Grundmenge neu angeordnet werden, - dann spricht man auch von PERMUTATIONEN (nicht zu verwechseln mit 'Perversionen'). Vorteil: Die anzuwendenen Variationsformeln vereinfachen sich perverserweise.
ODER die Elemente der Grundmenge werden sozusagen in einen "schwarzen Sack" gesteckt (Der Mathefreak nennt diesen Sack "Menge"). Die Anordnungs-Reihenfolge ist dabei wurscht, weil die sieht man ohnehin nicht - diesfalls spricht man von KOMBINATIONEN (Merke: Schworze Zombie-Nationen).
Leider muß man noch eine weitere Einteilung der obigen Fälle treffen, weil die anzuwendenen Formeln davon abhängen:
ENTWEDER verringert sich die Grundmenge während des Zusammenstellungsvorgangs (soll heißen: Die Zeichen der Grundmenge dürfen nur jeweils 1 x verwendet werden, sie werden quasi herausgenommen - engl. TAKE ),
ODER die Elemente der Grundmenge werden "herauskopiert", und können daher auch mehrmals zum Einfügen in eine neue Zusammenstellung verwendet werden - engl. COPY.
Man spricht im ersten Fall auch von Variationen bzw. Kombinatoen OHNE WIEDERHOLUNG (der Elemente der Grundmenge, englisch "TAKE"), im zweiten Falle von "MIT WIEDERHOLUNG" der Symbole der Grundmenge. Ganz altmodische Leute sagen zu TAKE auch "OHNE ZURÜCKLEGEN", weil sie damit die Vorstellung von Kugeln verbinden, die aus einem Korb gezogen werden,
bzw. zu COPY sagen sie auch "MIT ZURÜCKLEGEN": Es wird jeweils EINE Kugel aus dem Korb genommen, das Ergebnis notiert und das Ding danach sofort zurück in den Korb geworfen - daher kann jede Kugel auch mehrfach gezogen werden.
Anbei ein paar erste Beispiele samt Gegenprüfung der entsprechenden Kombinatorikformeln. Wie immer ohne Gewähr!
Gruss
P.S.: Was die konkrete Erzeugung neuer Zusammenstellungen betrifft, habe ich hier nur völlig naive Ansätze verwendet, wie sie Lieschen Müller von nebenan verwenden würde! In der Fachliteratur findet man zahlreiche WESENTLICH schnellere Verfahren!
Windowtitle upper$(" K l e i n e K o m b i n a t o r i k - F o r m e l s a m m l u n g")
Windowstyle 24
proc fak :parameters x&:var p!=1:whileloop x&:p!=p!*&Loop:endwhile:return p!
endproc
Cls
Print " Das Zeichen ";:font 2:print "!";:font 0:print " bedeutet ";
font 2:print "Fakultät (=Faktorielle)";:font 0:print ": 4!=4*3*2*1; 1!=1; 0!=1 (Def.)"
print
print "#";:font 2:Print upper$(" Variationen"):font 0
Print "# Variationen bilden aus einer Grundmenge mit n Elementen ";
font 2:print "Worte der Länge k.":font 0
Print " Werden beim Bilden dieser Worte Elemente der Grundmenge entnommen (wird die"
Print " Grundmenge dabei kleiner), spricht man von Variation ";:font 2
print " ohne Wiederholung ";:font 0
print "von"
Print " Zeichen. Die Anzahl möglicher Worte errechnet sich dabei zu ";
font 2:print "Vo = n!/(n-k)!":font 0
Print " Werden Grundelemente lediglich herauskopiert und dürfen sich wiederholen,"
Print " spricht man von Variation ";
font 2:Print "'mit Wiederholung' bzw. 'mit Zurücklegen'";:font 0
Print ". Meist"
Print " stellt die Grundmenge dann einen Zeichenvorrat dar, und die Anzahl der"
Print " Möglichkeiten beträgt ";
font 2:print "Vw = n^k";:font 0
print ". Aus 10 Ziffernsymbolen können in 3 Stellen"
Print " also zB. 10^3=1000 Zahlen (000-999) gebildet werden."
Print
print "#";:font 2:Print upper$(" Permutationen"):font 0
Print "# sind spezielle Variationen, bei denen die Wortlänge gleich der Anzahl der"
Print "# Elemente der Grundmenge ist (also dort bloße Vertauschungen darstellen)."
Print " Regulär dürfen sich Elemente der Grundmenge dabei ";
font 2:print "nicht wiederholen";:font 0
print ", die"
Print " Zahl möglicher Permutationen ist dann ";
font 2:print "Po=n!.";:font 0
print " Sind k1,k2,.,kn Zeichen gleich"
Print " (k=k1+k2+..+kn) und geht es nur um grundsätzlich mögliche Konfigurationen,"
print " so werden k1!*k2!*... Permutationen nur 1x gezählt: ";
font 2:print "Pog=n!/(k1!*k2!*kn!).":font 0
Print " Falls sich die Elemente der Grundmenge doch wiederholen dürfen, handelt es"
Print " sich in Wirklichkeit um eine Variation mit Wiederholung, bei der zufällig"
Print " die Wortlänge der Anzahl der Grundelemente entspricht: ";
font 2:print "Pw = Vw(k=n) = n^n":font 0
Print
print "#";:font 2:Print upper$(" Kombinationen"):font 0
Print "# Werden aus den Elementen der Grundmenge nicht Worte gebildet sondern"
Print "# ";
font 2:print "Mengen";:font 0
print " (dh. unterschiedliche Reihenfolge bei den Ziehungen ist unerheblich),"
Print "# so spricht man von Kombinationen von jeweils k aus n Grundelementen."
Print " Werden die Grundelemente lediglich herauskopiert = dürfen sich wiederholen,"
Print " spricht man von ";
font 2:Print "'Kombinationen mit Wiederholung' bzw. 'mit Zurücklegen'.":font 0
Print " Deren Anzahl errechnet sich zu ";
font 2:print "Kw = (n+k-1 über k) = (n+k-1)!/(k!*(n-1)!).":font 0
Print " Werden beim Ziehen von Elementen diese tatsächlich aus der Grundmenge ent-"
Print " fernt, also ";:font 2:print "ohne Wiederholung";:font 0
print " gleicher Grundelemente), ergibt "
Print " sich die Anzahl dann möglicher Kombinationen zu ";
font 2:print "Ko=(n über k)=n!/(k!*(n-k)!)";:font 0
waitinput
cls
declare i&,j&,k&,l&, m&,n&,count&
n&=3:m&=4 ' m& verschachtelte Schleifen
count&=0
whileloop 0,n&-1:i&=&Loop
:whileloop 0,n&-1:j&=&Loop
: whileloop 0,n&-1:k&=&Loop
: whileloop 0,n&-1:l&=&Loop
inc count&
print " ";count&;".:";tab(10);
print i&;j&;k&;l&
endwhile:endwhile:endwhile:endwhile
print
Print " Bsp.A: Variation von n=3 Symbolen mit Wiederholung in k=4 Stellen:":print
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(n&^m&)
waitinput
cls
n&=5:m&=2 ' m& verschachtelte Schleifen
count&=0
whileloop 0,n&-1:i&=&Loop
whileloop 0,n&-1:j&=&Loop
inc count&
print " ";count&;".:";tab(10);
print i&;j&
endwhile
endwhile
print
Print " Bsp.B: Variation von n=";n&;" Symbolen mit Wiederholung in k=";m&;" Stellen:"
print:print " Zähler = ";count&;", Anzahl lt. Formel = ";int(n&^m&)
waitinput
cls
n&=4:m&=4 ' m& verschachtelte Schleifen
if n&>=m&
count&=0
whileloop 0,n&-1:i&=&Loop
whileloop 0,n&-1:j&=&Loop
whileloop 0,n&-1:k&=&Loop
whileloop 0,n&-1:l&=&Loop
'print i&,j&,k&,l&, tab(10);
' ACHTUNG, es gibt viel elegantere Methoden als diese "naiven" Filter hier !:
if (j&=i&) or (k&=i&) or (k&=j&) or (l&=i&) or (l&=j&) or (l&=k&)
' print " Streichung"
else
inc count&
print " ";count&;".:";tab(10);i&;j&;k&;l&
endif
endwhile
endwhile
endwhile
endwhile
print
print "Bsp.C für n>=k: Variation von n=4 Elementen OHNE Wiederholung in k=4 Stellen:"
print " Bei n=k entspricht das gleichzeitig einer regulären Permutation (ohne Wh)."
print
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(fak(n&)/fak(n&-m&))
else
print " Ergebnis: 0\n k>n ist bei Methoden OHNE Wiederholung nicht möglich!"
endif
waitinput
cls
n&=4:m&=4 ' m& verschachtelte Schleifen
if n&>=m&
count&=0
whileloop 0,n&-1:i&=&Loop
:whileloop 0,n&-1:j&=&Loop
:whileloop 0,n&-1:k&=&Loop
:whileloop 0,n&-1:l&=&Loop
' Aus Vollstellenzählern Nicht-zutreffendes Auszufiltern ist zugegebenermaßen
' naiver Wahnsinn - da gibt es sicher viel bessere Methoden. Nur mal als Test:
if (i&>=j&) or (i&>=k&) or (i&>=l&) or (j&>=k&) or (j&>=l&) or (k&>=l&)
' print " Wert gestrichen."
else
inc count&
print " ";count&;".:";tab(10);"{ ";i&;j&;k&;l&;" }"
endif
endwhile:endwhile:endwhile:endwhile
print
print " Bsp.D mit n=k: \n Kombination von n=4 Elementen OHNE Wiederholung in k=4 Stellen:"
print
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(fak(n&)/(fak(m&)*fak(n&-m&)))
else
print " Ergebnis: 0\n k>N ist bei Methoden OHNE Wiederholung nicht möglich!"
endif
waitinput
cls
n&=3:m&=4
count&=0
whileloop 0,n&-1:i&=&Loop
whileloop 0,n&-1:j&=&Loop
whileloop 0,n&-1:k&=&Loop
whileloop 0,n&-1:l&=&Loop
if (j&=i&) or (k&=i&) or (k&=j&) or (l&=i&) or (l&=j&) or (l&=k&) or \
(j&<i&) or (k&<i&) or (k&<j&) or (l&<i&) or (l&<j&) or (l&<k&)
' or (i&=j&) or (i&=k&) or (i&=l&) or (j&=k&) or (j&=l&) or (k&=l&)
' print "----"
else
inc count&
print " ";count&;".:";tab(10);"{ ";i&;j&;k&;l&;" }"
endif
endwhile
endwhile
endwhile
endwhile
print
print "Bsp.E mit n<k: Kombination von n=3 Elementen OHNE Wiederholung in k=4 Stellen:"
print
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(fak(n&)/(fak(m&)*fak(n&-m&)))
print "\n Ergebnis: 0\n k>N ist bei Methoden OHNE Wiederholung eben nicht möglich!"
waitinput
cls
n&=6:m&=4 ' Stellenzahl m& = Zahl der verschachtelten Schleifen
if n&>=m&
count&=0
whileloop 0,n&-1:i&=&Loop
whileloop 0,n&-1:j&=&Loop
whileloop 0,n&-1:k&=&Loop
whileloop 0,n&-1:l&=&Loop
if (j&=i&) or (k&=i&) or (k&=j&) or (l&=i&) or (l&=j&) or (l&=k&) or \
(j&<i&) or (k&<i&) or (k&<j&) or (l&<i&) or (l&<j&) or (l&<k&)
' or (i&=j&) or (i&=k&) or (i&=l&) or (j&=k&) or (j&=l&) or (k&=l&)
' print "----"
else
inc count&
print " ";count&;".:";tab(10);"{ ";i&;j&;k&;l&;" }"
endif
endwhile
endwhile
endwhile
endwhile
print
print " Bsp.F Für n>k Kombination von n=6 Elementen OHNE Wiederholung in k=4 Stellen:"
print
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(fak(n&)/(fak(m&)*fak(n&-m&)))
else
print " Ergebnis: 0\n k>N ist bei Methoden OHNE Wiederholung nicht möglich!"
endif
waitinput
cls
n&=2:m&=4 ' Größe der Zielmenge m& zugleich Anzahl der verschachtelten Schleifen
count&=0
whileloop n&:i&=&Loop
:whileloop n&:j&=&Loop
::whileloop n&:k&=&Loop
:::whileloop n&:l&=&Loop
if (j&<i&) or (k&<i&) or (k&<j&) or (l&<i&) or (l&<j&) or (l&<k&)
' print "----"
else
inc count&
print " ";count&;".:";tab(10);i&;j&;k&;l&
endif
endwhile:endwhile:endwhile:endwhile
print
print " Bsp. G: Kombination von n=2 Symbolen MIT Zeichenwiederholung in k=4 Stellen:\n"
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(fak(n&+m&-1)/(fak(m&)*fak(n&-1)))
waitinput
cls
n&=6:m&=4 ' Größe der Zielmenge m& zugleich Anzahl der verschachtelten Schleifen
count&=0
whileloop n&:i&=&Loop
:whileloop n&:j&=&Loop
::whileloop n&:k&=&Loop
:::whileloop n&:l&=&Loop
if (j&<i&) or (k&<i&) or (k&<j&) or (l&<i&) or (l&<j&) or (l&<k&)
' print " Wert gestrichen."
else
inc count&
print " ";count&;".:";tab(10);i&;j&;k&;l&
endif
endwhile:endwhile:endwhile:endwhile
print
print " Bsp.H: Kombination von n=6 Symbolen MIT Zeichenwiederholung in k=4 Stellen:\n"
print " Zähler = ";count&;", Anzahl lt. Formel = ";int(fak(n&+m&-1)/(fak(m&)*fak(n&-1)))
waitinput 2000
Print "\n *** ENDE DER DEMONSTRATION ***"
waitinput
print "\n Bye!"
Waitinput 6000
END
Alles anzeigen
Abt. Exponential-Ersatzfunktion (Historisch)
================================
In der guten alten 8-bit-Zeit kämpfte man noch um jede signifikante Kommastelle, um halbwegs technische Genauigkeit erreichen zu können. Exponentialfunktionen gehen z.B. bei der Berechnung des Fahrwiderstandes von Schiffsrümpfen in die Gleichungen zur Ermittlung des Treibstoffbedarfes ein. Da entsprechende Simulationsvorgänge langwierige Iterationen beinhalten, kam es auf jede weitere halbwegs genaue Kommastelle an. Das nachstehende historische Teil stammt aus einem offen zugänglichen Dokument der US-Marine. Erstaunlich, was mit 8-bit-Systemen bereits möglich war. Der Apollo-Mondlandefährencomputer arbeitete allerdings schon mit 16 bit Steuerwort- und 14 bit-Datenbreite.
Gruss
WindowTitle "Exp-Ersatzfunktion auf 16 signifikante Stellen genau":CLS
'(CL) CopyLeft 2015-09 by P.Specht, Wien. Ohne jedwede Gewähr!
'Q: Internet NPS-MA-97-004 (TrueBasic für Macintosh) nach XProfan 11.2a
Proc EXPN :parameters X! 'Um eine Stelle genauere e^x-Funktion
Declare W!,E!,U!,S!,T!,N!
Case X!<-709 :Goto "Expn25"
E!=2.7182818284590452:U!=Abs(X!):w!=1: Expn11:
Case U!<1:Goto "Expn15":W!=E!*W!:U!=U!-1:Goto "Expn11": Expn15:
clear S!,N!:T!=1: Expn18:
S!=S!+T!:N!=N!+1:T!=T!*U!/N!:Case (S!+T!)>S!:Goto "Expn18"
W!=S!*W!:Case X!>=0:Goto "Expn25":W!=1/W!: Expn25:
Return W!
ENDPROC
print ' Test:
Var X!=1.9459101490553133
ExpLoop:
if x!>709:beep:print " Overflow Error!":goto "SKIP":endif
if x!<-709:beep:print " Underflow Error":goto "SKIP":endif
print " EXPN-Funktion ergibt: ";format$("%e",EXPN(X!))
print " XProfans exp()-Funktion ";format$("%e",exp(x!))
print " Absolute Abweichung = ";
print if((EXPN(X!)-exp(x!))<0,""," ");format$("%e",EXPN(X!)-exp(x!))
print " Proz.Fehler g. exp() = ";
print if((EXPN(X!)-exp(x!))<0,""," ");format$("%e",100*(EXPN(X!)-exp(x!))/exp(x!));" %"
print
SKIP:
print " Testwert-Eingabe: X = ";:input x!
Goto "ExpLoop"
Alles anzeigen
Abt. Kombinationen ohne Wiederholung
=========================
Ein aus Prof. D. Knuth's 'Algorithm X-7' weiterentwickeltes Teil verwendet nun Procedures statt GOTO sowie INC und DEC statt arithmetische Indexberechnung, was die Sache langsam auch hinsichtlich Geschwindigkeit brauchbar macht.
Gruss
WindowTitle "Kombinationen-Generator für k aus N Elementen ohne Wiederholung"
'(CL) CopyLeft 2015-09 by P.Specht, Wien; ohne jegliche Gewähr!
WindowStyle 24:Font 2
Declare j%,s%,b%[],n%,dflg% '...Globale Variablen
Main:
Cls rgb(170,255,220)
print "\n 0 für aufsteigende, 1 für absteigende Lexikalordnung?: ";:input dflg%
print "\n N = ";:input n%:print " k = ";:input s%
SetSize b%[],s%:WhileLoop s%:b%[&Loop]=&Loop+n%-s%-1:EndWhile :j%=1
COMBN 'Aufruf des Generators, der dann Kombinationen b%[1.sz%] an 'DoSomethingUseful' liefert
print "\n OK. ";:WaitInput
Goto "Main"
PROC COMBN
REPEAT
DoSomethingUseful 'with b&[1..sz&]
case j%>s%:BREAK
b%[j%]=b%[j%]-1:if b%[j%]<j%:inc j%:CONTINUE:endif
:while j%>1:b%[j%-1]=b%[j%]-1:dec j%:endwhile
UNTIL 0
ENDPROC
proc DoSomethingUseful '...hier z.B. Anzeige der einzelnen Elemente:
Whileloop s%,1,-1
if dflg%=0
print int(n%-1-b%[&Loop]), 'increasing
else
print b%[&Loop], 'decreasing
endif
EndWhile
print " ";
case %pos>(60-s%):print
if %csrlin>30:print "...":WaitInput:cls:endif
endproc
Alles anzeigen
Abt. Logik
=======
Warum gibt es Menschen, deren Denkweise mir derart befremdlich erscheint, daß ich sie für "schräge Typen" halte, weil mir ihre Handlungen vollkommen unzugänglich bleiben - und das, obwohl sie einer gewissen inneren Logik zu folgen scheinen?
Der Grund muß nicht unbedingt in geistigen und/oder Informations-Defiziten der anderen Person liegen - vielleicht bin es ja z.B. auch ich, der falsch liegt!? Oder wir haben sogar beide recht, nämlich in UNSERER jeweiligen Denkwelt, und gehen bei unseren Überlegungen nur von unterschiedlichen Prämissen aus?
Aussagen der üblichen 'Fakten'-Logik sind ja noch relativ unstrittig zu interpretieren: Diese Logik beschäftigt sich mit einfachen Systemen, etwa der bei Programmierern so beliebten Boole'schen Logik, oder um die 'Prädikaten-Logik' der Mengenlehre mit den Aussagen "Für alle x aus {X} gilt: Y(x)" und "Es gibt mindestens ein x aus {X}, für das gilt: y(x)".
Unterschiedliche Interpretationsmöglichkeiten ergeben sich dagegen in der sog. Modal-Logik:
Hier geht es um Aussagen zu Gegensatzpaaren wie 'Möglichkeit' vs. 'Notwendigkeit',
'de-fakto erforderlich' vs. 'wüschenswert', um 'Gebot' vs. 'Erlaubnis' etc. etc. Die Modal-Logik baut daraus die unterschiedlichsten Schlussfolgerungssysteme, die sie anschließend zu übergeordneten Logiksystemen*) zusammenfasst. Weitere Unterschiede werden erzeugt von der Frage, ob es um Aussagen über Regeln oder über Dinge geht (dicto vs. reo-Problem).
Genau diese unterschiedlichen Ausgangs-Fragestellungen führen dann oft auch zu den oben angesprochenen 'Undurchschaubarkeiten' und Unverständlichkeiten der Handlungsweisen bestimmter Mitmenschen.
Mit anderen Worten: Vor kurzem dachte ich noch, das alles sei 'eh logisch!'. Ein Wikipedia-Artikel zum Themahttps://de.wikipedia.org/wiki/Modallogik war diesbezüglich allerdings ziemlich erhellend, zeigt er doch, wie viele völlig unterschiedliche 'Schlussfolgerungs-Erlaubtheiten' existieren, und wie sehr es dabei auf die jeweiligen Ausgangs- und Rahmenbedingungen ankommt!
Gruss
_______
*) Diese Erkenntnis wurde erstmals erfasst und formalisiert von S.A.Kripke, sodaß man heute
von Kripke-Logik als Basissystem ("System K" der Modallogik) ausgeht.
P.S.: Link-Empfehlung (engl.) zur Frage, was eine 'Seele' ist.
Abt. Ziffernsumme
============
Frage: Gegeben sei eine Zahlenfolge von 1 bis N. Wenn man nun einfach alle ZIFFERN dieser Zahlen aufaddiert, was kommt dabei dann raus? Kann doch eigentlich nicht so schwer sein, oder? Aber irgendwie scheint das doch ein ziemlich vertracktes Ding zu sein: Zwar ist eine Formel bekannt für N=10, 100, 1000, 10000, etc., aber für z.B. N=78233 habe ich bisher keine gefunden.
Einstweilen bleibt also nur das Erfassen der Ziffernhäufigkeiten und anschließendes Aufaddieren der ausmultiplizierten Einzelprodukte. Elegant geht anders! Jemand eine Idee?
Gruss
P.S.: Als Anwendungsbeispiel wäre z.B. eine Vorausberechnung des Tintenverbrauchs beim Ausdrucken großer Tabellenwerke denkbar. So ab N=1 Mio wird die Rechenzeit aber derzeit ziemlich lästig, eine Formel wäre sicher deutlich flotter!
' "EINFACHE AUFGABE" AUS DER ZAHLENTHEORIE, P.Specht 2015-09 (Ohne jede Gewähr!)
var bis&=100000:Windowstyle 24:cls:set("decimals",0):font 2
declare s![9],s$,z$,v&,sum!,tm&,fmt$,stz& : fmt$="#,###,###,###,###,##0"
Windowtitle upper$("Statistik der *Ziffern*summe für die Zahlenfolge 1 bis N")
Start:
cls:Print "\n Endwert der Ziffernfolge N = ?",:input z$
if z$ > "" : bis&=val(z$)
Windowtitle upper$("*Ziffern*summe der Zahlen 1 bis "+format$(fmt$,bis&))
endif
print "\n N = ";format$(fmt$,bis&)
if ((bis&=10) or (bis&=100) or (bis&=1000) or (bis&=10000) or (bis&=100000) or \
(bis&=1000000) or (bis&=10000000) or (bis&=100000000) or (bis&=1000000000))
stz&=int(lg(bis&-1)+1) 'Stellenzahl
print " ... laut Formel müßte herauskommen: ";format$(fmt$,\
stz&*10^(stz&-1)*45+1)
endif
Print "\n Auszählung läuft ..."
tm&=&gettickcount
whileloop 1,bis&:s$=str$(&Loop)
whileloop len(s$)
' z$=substr$(s$,&Loop)
v&=val(substr$(s$,&Loop))
s![v&]=s![v&]+1
endwhile
endwhile
tm&=&gettickcount-tm&:sum!=0:print "\n"
whileloop 0,9
print " ";&Loop,"*",format$(fmt$,s![&Loop]),"=",format$(fmt$,&Loop*s![&Loop])
sum!=sum!+&Loop*s![&Loop]
endwhile
Clear s![]
beep:print "\n Summe = ";format$(fmt$,sum!)
print "\n Rechenzeit ";format$(fmt$,tm&);" [ms]"
waitinput 60000:goto "Start"
Alles anzeigen
Abt. CheckSummen billiger
=================
Fletcher's Checksum (ebenso wie z.B. Adlers Checksum) bildet eine positionsabhängige Checksumme - ganz im Sinne einer sog. CRC ("Zyklische Redundanz")-Summe, allerdings mit viel weniger Rechenaufwand. Der nachstehende Algorithmus wurde von John G. Fletcher in den 1970er-Jahren am Lawrence Livermore Institute entwickelt, welches u.a. für die Sicherstellung der laufenden Funktionsfähigkeit der US-Atombomben zuständig ist. Da kommt Freude auf, was?
Gruss
P.S.: Das ganze war eine Antwort auf eine Frage in RGH's Forum.
proc FletcherChecksum :parameters DataMsg$
' Ohne jede Gewähr, insb. können Rechte Dritter bestehen!
var Length_of_Data&=len(DataMsg$)
declare c1&,c2&,c3&, i& ,S1&,S2&,S3&,S4&
whileloop Length_Of_Data&
c1&=c1&+ord(Mid$(DataMsg$,&loop,1))
c1&=c1& & $00ff :c2&=c2&+c1&:c2&=c2& & $00ff
EndWhile :c3&=c2&:c2&=c2&>>4 :c2&=c2& & $0f
if c2&>=$0A :S1&=c2&+ $37 :else :S1&=c2&+$30
endif:c2&=c3& & $0f
if c2&>= $0a:S2&=c2&+ $37 :else :S2&=c2&+ $30
endif:c3&=c1&:c1&=c1&>>4 :c1&=c1& & $0f
if c1&>= $0a :S3&=c1&+ $37 :else :S3&=c1&+ $30
endif :c1&=c3& & $0f
if c1&>=$0a:S4&=c1&+ $37 :else :S4&=c1&+ $30
endif:return chr$(s1&)+chr$(s2&)+chr$(s3&)+chr$(s4&)
endproc
CLS
Selbsttest:
case FletcherChecksum("5522 18 1137 00 003")<>"1C76":print "Error 1"
case FletcherChecksum("5522 18 3137 00 003")<>"3278":print "Error 2"
case FletcherChecksum("5522 18 1130 00 002")<>"E36E":print "Error 3"
case FletcherChecksum("5522 18 1401 00 001")<>"ED6E":print "Error 4"
case FletcherChecksum("5522 18 1302 00 003")<>"ED70":print "Error 5"
case FletcherChecksum("5522 18 1302 00 004")<>"EE71":print "Error 6"
case FletcherChecksum("5522 18 1302 00 009")<>"F376":print "Error 7"
case FletcherChecksum("5522 18 3147 00 009")<>"417F":print "Error 8"
case FletcherChecksum("5522 18 1137 00 004")<>"1D77":print "Error 9"
case FletcherChecksum("5522 18 3137 00 009")<>"3379":print "Error 10"
case FletcherChecksum("5522 18 1602 00 000")<>"0870":print "Error 11"
print "\n Fletchertest 10 ergibt korrekterweise";
print " ";FletcherChecksum("5522 18 3137 00 009");" statt '3379'."
print " Es könnte sich um einen Eingabefehler bei den Testwerten handeln!"
beep: print "\n Fletcher-Test done.\n"
waitinput:END
Alles anzeigen
Abt. Problem mit %matchpos (XProfan 11.2a)
=============================
Im folgenden Beispiel zum Auffinden aller Vorkommen eines Suchstrings in einem Text wird %matchpos nur für ein einziges Auffinden upgedatet, bleibt bei weiteren Durchgängen aber auf dem Wert (%matchpos+%matchlen) stehen. Manchmal addiert sich später noch etwas. Durchschaue ich da was nicht?
Gruß
Cls:font 2
var regstat&=get("regex"):set("regex",1)
var found&=0
Repeat
found&=instr("([aA][bB][cC])","_abc_Abc_aBc_abC_defg_ABC",found&+1)
case %matchpos<0:Break
print %matchpos,$match,%matchlen,"found& = ",found&
until %matchpos=-1
set("regex",regstat&) 'Stand von vorher wieder setzen
print "done."
waitinput
End
Alles anzeigen
%matchpos zählt immer von der aktuellen Startposition aus.
So gibt es die gewünschten Ergebnisse:
Cls:font 2
var regstat&=get("regex"):set("regex",1)
var found&=0
var start&=0
Repeat
found&=instr("([aA][bB][cC])","_abc_Abc_aBc_abC_defg_ABC",start&+1)
case %matchpos<0:Break
print %matchpos+start&,$match,%matchlen,"found& = ",found&
start& = found&
until %matchpos=-1
set("regex",regstat&) 'Stand von vorher wieder setzen
print "done."
waitinput
End
Alles anzeigen
Gruß Roland
WOW, das war flott! DANKE, RGH!
Abt. CRC16-Wordstream-Test
===================
Ohne jedwede Gewähr: Hier eine Erweiterung des schon behandelten CRC-8 Prüfsummenverfahrens auf 16 bit Wordbreite. Im Gegensatz zu anderen Verfahren wird hier nicht auf vorberechnete Polynomtabellen zurückgegriffen, sondern es werden Shiftbefehle benutzt. Reine Demo - es könnten Rechte Dritter existieren!
Gruss
P.S.: Die Fragestellung tauchte HIER auf...
CLS
' DEMO ONLY! NO WARRANTY WHATSOEVER! ALL RIGHTS APPLY TO THEIR RESPECTIVE OWNERS!
def &IBM = $A001 ' Used by Bisync, Modbus, USB, ANSI X3.28, SIA DC-07, ...
def &CCITT=$8408 ' Used by X.25, V.41, HDLC FCS, XMODEM, Bluetooth, PACTOR, SD
def &SCSI =$EDD1 ' Used by SCSI
Def %CRC16POLY &CCITT ' $18 wäre z.B. X^8+X^5+X^4+X^0
Var CRC16_Sp% = 0 ' CRC16 Speicher
proc CRC16_berechnen :Parameters crc_data% ' Übergabe Daten
Var bit_counter% = 16 ' Schleifendurchlauf
Var feedback_bit% = 0 ' Bit Rückgabe
while bit_counter% > 0 ' 8x Durchläufe
feedback_bit% = Xor(CRC16_Sp%,crc_data%) & $01 ' XOR auf 1 überprüfen
if feedback_bit% = $01 ' wenn 1, dann...
CRC16_Sp% = Xor(CRC16_Sp%,%CRC16POLY) ' XOR mit Poly
EndIf
CRC16_Sp% = (CRC16_Sp% >> 1) & $7FFF ' Shift rechts & 32767 '$7F=247 <<<<<<
if feedback_bit% = $01 ' wenn 1, dann...
CRC16_Sp% = CRC16_Sp% | $8000 ' 32768 'ODER 128 <<<<<<<<<<<<<<<
EndIf
crc_data% = crc_data% >> 1 ' Daten Shift rechts
Dec bit_counter% ' Schleifendurchlauf -1
EndWhile ' Ende Endlosschleife
endproc
Testaufruf:
CRC16_Sp% = 0 ' Reset CRC8 Speicher
WhileLoop 0,2^16-1, 7 ' Chr$(0)+Chr$(0) bis Chr$(255)+Chr$(255) durchlaufen mit Step 7
CRC16_berechnen(&Loop) ' CRC berechnen
Print "Daten="+Str$(&Loop)+" CRC16="+Str$(CRC16_Sp%),
' Und nun als Binärwert unter Anschluß der Prüfsumme rückprüfen, muss dann 0 ergeben:"
CRC16_berechnen(val("%"+right$("0000000000000000"+bin$(&Loop),16)+right$("0000000000000000"+bin$(CRC16_Sp%),16)) )
Print tab(40);"Errorflag: ";Str$(CRC16_Sp%)
EndWhile
waitinput
Alles anzeigen
WindowTitle " W A A A A S ?"
Windowstyle 24:CLS 100
Print "\n Test der x hoch y-Funktion"
Print "\n Ihre XProfan-Version ist ";$ProfVer
Print "\n Alle folgenden Ausgaben sollten eigentlich 25 ergeben!"
Print "\n\n 5^2 = ";5^2
Print "\n int(5^2) = ";Int(5^2);" ??? Meine 64-bit-Version liefert hier 24 !!!"
Print "\n int(round(5^2,4))=";int(Round(5^2,4));" ??? Meine 64-bit-Version liefert hier 24 !!!"
Print "\n int(round(5^2,3))=";int(round(5^2,3))
Print "\n\n ... langsam beginne ich mir Sorgen zu machen!"
WaitInput
Alles anzeigen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!