Sie können hier neben den Lektionen viele Tipps und Tricks
für das Delphiprogrammieren finden. Studieren Sie die
Lektionen und den Programmcode der hier vorliegenden Programme.
Ändern Sie ihn und schreiben Sie die Programme auf Ihre
Bedürfnisse um!
-
baelle
bewegende "Bälle" werden an der Bande reflektiert.
Downloadseite
-
dm_eur Umwechseln von DEM in EUR.Für
jeden Anfänger ein Muss. Downloadseite
Aus der Unit:
procedure TForm1.Edit1Change(Sender: TObject);
var x,y:real;
begin
if not edit1.Focused then exit;
try
x:=strToFloat(edit1.text);
y:=1.95583*x;
edit2.text:=formatfloat('0.
',y);
except edit2.text:='' End;
end;
procedure TForm1.Edit2Change(Sender: TObject);
var x,y:real;
begin
if not edit2.Focused then exit;
try
y:=strToFloat(edit2.text);
x:=1/1.95583*y;
edit1.text:=formatfloat('0.
',x);
except edit1.text:='' End;
end;
-
editor Ein Editor ist mit Delphi schnell
erstellt.Downloadseite
Verzeichnisse werden in einer Ini-Datei gemerkt.
Aus der Unit:
function IniPfad:string; //nicht im Windowspfad!
//Dort sind genug "Leichen"
begin
result:=extractFilepath(paramstr(0))
//der exe-pfad des Programms
+'MyIni.ini';
end;
function HoleDateiPfad:string;
//Dass man noch weiss, wo Datei gespeichert wurde.
var MyIniFile:TIniFile; //uses IniFiles.
//Ini-Dateien sind besser als in Registry schreiben!
//In der Registry sind genug "Leichen"
begin
MyIniFile:=Tinifile.create(Inipfad);
try
result:=MyIniFile.ReadString('Section1','Schluessel1', 'File1');
finally MyIniFile.Free End;
end;
procedure SchreibeDateiPfad(pfad:string);
var MyIniFile:TIniFile;
begin
MyIniFile:=Tinifile.create(Inipfad);
try
MyIniFile.WriteString('Section1','Schluessel1', pfad);
finally MyIniFile.Free End;
end;
procedure TForm1.BOeffnenClick(Sender: TObject);
begin
if OpenDialog1.Execute then Begin
memo1.Lines.LoadFromFile(Opendialog1.Filename);
SchreibeDateiPfad(Opendialog1.Filename);
End else showmessage('Abbruch!');
end;
procedure TForm1.BSichernClick(Sender: TObject);
begin
if SaveDialog1.Execute then Begin
memo1.Lines.SaveToFile(Savedialog1.Filename);
schreibeDateiPfad(Savedialog1.Filename);
End else showmessage('Nicht gespeichert');
end;
{Im Programm ausführlicher mit "Initialdir", "Filter" und "options}"
-
mitternformel Die "Mitternachtsformel".
Downloadseite: Quadratische
Gleichung
Für jeden Anfänger ein Muss.
Die benötigte Prozedur mit Eingangsvariablen a,b,c und
Ausgangsvariablen x1 und x2:
Procedure quadrGl(a,b,c:real;var Anz:integer;var x1,x2:real);
var d,q:real;
begin
d:=b*b-4*a*c;
if d < 0 then Anz:=0 else
if d=0 then Begin
Anz:=1;
x1:=-b/2/a;
End else Begin
Anz:=2;
q:=sqrt(d);
x1:=(-b+q)/2/a;
x2:=(-b-q)/2/a;
End;
end;
Wird zum Beispiel quadrGl(1,5,6,u,v) aufgerufen, sind nachher
die Variablen anz, x1und x2 mit den Werten
Anz=2
u=-2
v=-3
belegt. In der Prozedur sind a,b,c
Werteparameterund x1,x2
Variablenparameter.
Beim Aufruf der Prozedur werden bei den
Werteparametern a,b,c Speicherplätze
für die Werte von a, bund c reserviert,
beim Verlassen der Prozedur wieder freigegeben.
Anders ist es bei den Variablenparametern
x1und x2. Die Prozedur bekommt mitgeteilt, wo
im HauptprogrammSpeicherplatz für x1und
x1reserviert ist (mittels "Zeiger"), von dort
entnimmt sie die Werte, falls benötigt (hier nicht),
und überschreibt (wie hier) die Werte, die dann im
Hauptprogramm verwendet werden können.
-
-
roemzahlen Umwandlung Dezimalzahlen in
römische Zahlen. Downloadseite
Beispiel für einen einfachen Algorithmus
Algorithmus mit Beispiel 1964
1. Tausender verarbeiten 1964=M+964 (M+Rest)
Rest >=900. Inversion 1964=M+CM+64 (MCM+Rest)
2. Fünfhunderter verarbeiten
Rest>=400: Inversion
3. Hunderter verarbeiten
Rest>=90: Inversion
4. Fünfziger verarbeiten 1964=MCM+L+14
Rest<=40: Inversion
5. Zehner verarbeiten 1964=MCM+L+X+4
Rest>=9: Inversion
6. Fünfer verarbeiten
Rest>=4: Inversion 1964=MCM+L+X+IV
7. Einer verarbeiten
-
SimulationChevalier de Mére
stellte 1654 Blaise Pascal folgende Frage: Ist die
Wahrscheinlichkeit für mindestens eine Doppelsechs
beim 24-maligen Werfen zweier Würfel größer
oder kleiner als 50% ? Diese Frage wird hier durch
Simulation beantwortet.Downloadseite
-
Simulation
Mercedes mit Fahrer oder Ziege. Downloadseite
Das Ziegenproblem
Diejenigen unter Euch, die keine Game-Show auf
den privaten Kanälen auslassen, werden dieses Spiel
ganz sicher kennen.
Der Kandidat in einer Spielshow hat es bis zur Endrunde
geschafft und kann jetzt einen Mercedes mit
Chauffeur gewinnen. Dazu muss er folgende Aufgabe
lösen:
Tor 1
◊◊?
◊
|
Tor 2
◊◊?
◊
|
Tor 3
◊◊?
◊
|
|
Mercedes
incl. Chauffeur
oder Ziege.
|
Im Studio sind drei Tore aufgebaut. Für den Spieler
ist es nicht möglich zu sehen, was sich hinter
den Toren befindet. Der Moderator teilt ihm mit, dass sich
hinter einem der Tore der fabelhafte Hauptpreis befindet
(jener Mercedes incl. Fahrer), hinter den beiden anderen
Toren befinden sich jedoch weitaus weniger attraktive
Preise, nämlich Ziegen. Der Kandidat muss sich
für eins der Tore entscheiden und erhält den
dahinter befindlichen Preis. Zunächst wird der Spieler
aufgrund irgendeiner Eingebung eines der Tore
wählen.
Nebenbei bemerkt: In
Deutschland war im Mittelalter der Trostpreis ein Schwein.
Daher der Ausdruck "Schwein gehabt". Diese Problematik hier
stammt aus Amerika. Dort ist die Ziege (goat) als
Trostpreis scheints beliebter.
Hinter seinem gewählten Tor ist der Mercedes oder eine
Ziege. Hinter mindestens einer der übrigen Türen
ist eine Ziege.
Nun öffnet der Moderator eines der beiden anderen Tore
und zwar eines, hinter dem sich eine Ziege befindet.
Jetzt hat der Kandidat noch die Möglichkeit bei dem
Tor, das er zu Anfang ausgewählt hat, zu bleiben oder
zu dem anderen, ebenfalls noch verschlossenen Tor zu
wechseln.
Was soll der Spieler tun? Ist es günstiger zu
wechseln? Sollte er auf seiner ersten Wahl beharren? Macht
es überhaupt einen Unterschied, ob er wechselt oder
nicht, oder sind die Chancen fifty-fifty?
Hier kannst Du Deine Chancen ausprobieren.
————————————
Anleitung
———————————————————
Klicke zuerst auf "Verteilung".
Hinter zwei zufällig gewählten Türen wird
eine Ziege, hinter die dritte Tür der Mercedes
platziert.(Das siehst nur Du, der Kandidat nicht).
Klicke dann auf 1. Wahl Das ist die Tür, die der
Kandidat wählt (hier zufällig).
Klicke dann auf "Moderator zeigt Ziege".(Zufällig wird
eine der Türen, die noch nicht gezeigt sind, hinter
der eine Ziege steht, geöffnet).
Klicke dann auf "2. Strategie". Es wird das Tor gezeigt,
das der Kandidat beim Wechseln der Türe wählen
würde.
Simulation 1:
|
Der Kandidat wechselt nicht die Türe.
|
◊
|
Die Treffer für diese Strategie werden
gezählt.
|
◊
|
◊
|
Simulation 2:
|
Der Kandidat wechselt die Türe.
|
◊
|
Die Treffer für diese Strategie werden
gezählt.
|
Wiedehole dieses Experiment etwa 1000 mal und Du siehst,
auf welche Trefferwahrscheinlichkeiten die Strategien sich
einpendeln.
(Text mit freundlicher Erlaubnis nach
www.mightymueller.de)
-
Simulation Monte-Carlo-Methode zur
Berechnung der Zahl π. Downloadseite "Berechnung von Pi"
Aus der Unit:
procedure TForm1.ButtonAbbrechen(Sender: TObject);
begin
abbrechen:=true; //private Variable von Form1
end;
procedure Tform1.RechneMonteCarlo;
var x,y,rpi,aend: real;
iTreffer, iDurchlaeufe: integer;
begin
//Anfangswerte
abbrechen:=false;
iTreffer:=0;
iDurchlaeufe:=0;
rpi:=0;
randomize;
repeat
if abbrechen then exit;
x:=random;
y:=random;
iDurchlaeufe:=IDurchlaeufe+1;
if (x*x+y*y"<1) then inc(iTreffer);
rpi:=itreffer/iDurchlaeufe; //Häufigkeit der Treffer ——> Pi/4
EErgebnis.Text:=Format('%10.8f',[4*rpi]);
EDurchlaeufe.Text:=IntToStr(iDurchlaeufe);
application.ProcessMessages; //Nachrichtenschlänge abarbeiten
until false; //bis jemand den "Abbruch"-Knopf drückt
end;
-
Cäsarverschlüsselung siehe unter
Kryptologie
-
-
Permutationen Downloadseite
Das Programm listet zum Beispiel alle Permutationen von
"abcde" auf:
abcde abedc acebd adceb aecbd baced bcade bceda bdeac
abced acbde acedb adebc aecdb badce bcaed bdace bdeca
abdce acbed adbce adecb aedbc badec bcdae bdaec beacd
abdec acdbe adbec aebcd aedcb baecd bcdea bdcae beadc
abecd acdeb adcbe aebdc bacde baedc bcead bdcea becad
becda cadbe cbaed cdabe cdeba cedab daceb dbcae
bedac cadeb cbdae cdaeb ceabd cedba daebc dbcea
bedca caebd cbdea cdbae ceadb dabce daecb dbeac
cabde caedb cbead cdbea cebad dabec dbace dbeca
cabed cbade cbeda cdeab cebda dacbe dbaec dcabe
dcaeb deabc decba eadbc ebcda ecbad edacb
dcbae deacb eabcd eadcb ebdac ecbda edbac
dcbea debac eabdc ebacd ebdca ecdab edbca
dceab debca eacbd ebadc ecabd ecdba edcab
dceba decab eacdb ebcad ecadb edabc edcba
Anzahl:120 (bekanntlich: Anzahl = 5!)
procedure tausche(var s:string; const k:integer);
var pu: Tstringlist; // z.B. s='12543' k=3 oder s='12453' k=4
i: integer;
c: char;
begin
pu := Tstringlist.Create; //TcharList gibts nicht!
try
pu.Sorted := false;
for i := k to length(s) do pu.Add(s[i]);
pu.Sort;
//Tausche mit dem kleinsten aus pu, das größer als s[k-1] ist
c := s[k-1];
for i := 0 to pu.Count -1 do
if c < pu[i][1] then Begin
s[k-1] := pu[i][1];
pu[i] := c; //getauscht!
break;
End;
pu.Sort;
for i := k to length(s) do s[i] := pu[i-k][1];
finally pu.free End;
end;
procedure naechstePermutation(var s: string);
var k:integer; //z.B. s='12543' k=3
begin
k:= length(s);
while (s[k] < s[k-1]) and (k > 0) do dec(k);
if k =1 then s := '' else
//Tausch s[k-1] mit dem kleinste Element aus s[k], s[k+1] ...
//Rest alphabetisch sortieren
Tausche(s,k);
end;
-
(*Bemerkung zur Zwölftontechnik:
-
Mit s := 'abcdefghijkl' (Die 12 Töne der
chromatischen Tonleiter)erzeugt das Programm alle 12
! = 479 001 600 Zwölftonserien. Mit
folgender Funktion kann man diejenigen
Zwölftonserien mit lauter verschiedenen Intervallen
aussortieren:
function serie(s:string):boolean; //=True: Alle Intervalle verschieden
var pu:array of integer;
k,j,n:integer;
begin
n := length(s); //hier n = 12
setlength(pu,n);
//pu[1] = |ord(s[2]) - ord(s[1])|
//...
//pu[n-1] = |ord(s[n]) - ord(s[n-1])|
for k := 1 to n - 1 do
pu[k] := abs(ord(s[k+1]) - ord(s[k])); //11 Intervalle
result := true;
for k := 1 to n do for j := k+1 to n do
if pu[k] = pu[j] then begin
result := false;
exit;
End;
end;
*)
procedure TForm1.Button1Click(Sender: TObject); //Wiederholungen noch nicht etrlaubt.
//Aber einfacher zu verstehen. Mit Wiederholungen siehe unten.
var s: string;
zaehl: integer;
begin
s := '123456'; //s := 'abcdefghijkl' {siehe Bemerkung}
memo1.lines.clear;
zaehl := 0;
repeat
inc(zaehl);
memo1.Lines.Add(s);
//if serie(s) then {siehe Bemerkung}
naechstePermutation(s);
until s = '';
memo1.Lines.Add('———————');
memo1.lines.add('Anzahl:'+intToStr(zaehl));
end;
Bei diesem Programm sind Wiederholungen noch nicht erlaubt.
Durch Abändern der Prozedur TForm1.button1click...kann
man zum Beispiel auch alle Permutationen von 25577
folgendermaßen auflisten lassen:
Eine Anwendnung dieses Programms ist ein Zuschnittoptimierungsprogramm.
(Bisher mußte man die Längen sortieren und
nachschauen, ob irgendein kürzere Länge
untegebracht werden kann.)
25577 57572
25757 57725
25775 57752
27557 72557
27575 72575
27755 72755
52577 75257
52757 75275
52775 75527
55277 75572
55727 75725
55772 75752
57257 77255
57275 77525
57527 77552
5!
Anzahl:30 (bekanntlich = —————)
2!·2!
In der folgenden Prozedur wird "25577" (mit Wiederholungen)
ersetzt durch "# 1 # 2 # 3 # 4 # 5" (ohne Wiederholungen), die Zuordnung
original[1] = 2, original[2] = 5 ... original[5] = 7 hergestellt.
Alle Permutationen von "# 1 # 2 # 3 # 4 # 5" erzeugt, mit "lesbar" wieder
die vorgebenen Zeichen eingesetzt und die Permutation ins memo1
geschrieben, falls sie dort noch nicht steht.
procedure TForm1.Button1Click(Sender: TObject);
var s, int, nr, leer, s_lesbar: string;
k,n,ll: integer;
original: array of char;
function lesbar(const s: string): string;
var i: integer;
begin
setlength(result,ll);
for i := 1 to ll do result[i] := original[ord(s[i])];
end;
begin
if button1.Caption = CaptionStop then Begin
stop := true;
Abschluss(zaehl);
exit;
End else Begin
button1.Caption := CaptionStop;
stop := false;
End;
memo1.lines.clear;
Sternchenweg;
s := edit1.Text;
if s = '' then Begin
s := '12345';
edit1.text := s;
End;
ll := length(s);
setlength(original,ll + 1);
for k := 1 to ll do original[k] := s[k];
if sender = button1 then
for k := 1 to length(s) do s[k] := char(k); // s ist von der Form "12345" ohne Wiederholungen
setlength(intarr,length(s));
leer := '';
while length(leer) + length(s) < 12 do leer := leer + ' ';
if sender = button2 then
memo1.lines.add(
'Es werden die Permutationen aussortiert,'#13#10+
'die aus verschieden Intervallen bestehen.'#13#10+
'(Bei zwölf Tönen erhält man so Serien der Zwölftontechnik.)'#13#10+
'Nr. Permutation Intervalle') else
zaehl := 0;
n := 0;
repeat
inc(n);
if stop then exit;
if n mod stopmoeglich =0 then Begin
edit1.Text := edit1.text + '*';
if length(edit1.text) > 40 then SternchenWeg;
application.ProcessMessages;
End;
{Trick mit bereits gerechneten Elementen
Nr. Permutation Intervalle
36614981 albkcjdiehfg 11 10 9 8 7 6 5 4 3 2 1
69637139 bjclakegfidh 8 7 9 11 10 6 2 1 3 5 4}
if s = Zwoelftoene then Begin
memo1.Lines.Add('36614981 albkcjdiehfg 11 10 9 8 7 6 5 4 3 2 1');
zaehl := 1;
n := 69637139;
s := 'bjclakegfidh'
End;
if (sender = button1) then Begin
s_lesbar := lesbar(s);
if pos(s_lesbar,memo1.text) = 0 then BEgin
inc(zaehl);
memo1.Lines.Add(s_lesbar);
ENd;
application.ProcessMessages;
End else if serie(s) then Begin
inc(zaehl);
int := '';
for k := 1 to length(s) - 1 do
int := int+' '+intToStr(abs(ord(s[k+1]) - ord(s[k]))); //Intervalle
nr := IntToStr(n);
while length(nr) < 9 do nr := nr + ' ';
memo1.Lines.Add(nr+s+leer+int);
application.ProcessMessages;
End;
naechstePermutation(s);
until s = '';
abschluss(zaehl);
end;
-
-
Problem der Kilchberger
Tischtennisrunde.
Inzwischen hat sich folgendes Schema durchgesetzt:
Doppel bei 5 Teilnehmern: Vier spielen, einer hat Pause.
Doppel bei 6 Teilnehmern: Vier spielen, zwei haben Pause.
I | II | Pause |
df | ec | ab |
ba | fe | cd |
ca | bd | ef |
◊ | ◊ | ◊ |
ed | cf | ab |
fb | ae | cd |
cb | ad | ef |
◊ | ◊ | ◊ |
fe | dc | ab |
ef | ab | cd |
bd | ac | ef |
| ◊ ◊ ◊ ◊ |
I | II | Pause |
cd | ef | ab |
ae | fb | cd |
bc | da | ef |
◊ | ◊ | ◊ |
df | ce | ab |
eb | fa | cd |
bd | ac | ef |
◊ | ◊ | ◊ |
fc | ed | ab |
bf | ea | cd |
bc | ad | ef |
|
Druckversion (PDF) |
-
PFZ Die Zerlegung einer Zahl in ihre
Primfaktoren.Downloadseite
———————— Algorithmus ———————————————————————————————————
Wiederhole...
Falls n durch i (i=2,3,5,7,...) dividiert werden kann,
notiere i und ersetze n durch n/i.
... bis n=1.
Die notierten i's sind die Faktoren der PFZ.
———————— Ende des Algorithmus ———————————————————————————
Bsp.: n=4004
i=2 n=2002
i=2 n=1001
i=7 n=143
i=11 n=13
i=13 n=1
Also: 4004=2*2*7*11*13
Eine Beschleunigung erreicht man durch folgende Überlegung:
Ist n=a*b so muss ein Faktor a oder b <= sqrt(n) sein.
(Widerspuchsbeweis: a>sqrt(n) und b>sqrt(n) => a*b>n )
Man braucht also nur mögliche Faktoren i<=sqrt(n) betrachten.
-
DezInBin Umwandlung in Dualzahlen.
Brüche und Dezimalbrüche erlaubt. Downloadseite
Erläuterung: Umwandlung von
Dezimalzahlen in Dualzahlen und umgekehrt.
-
Feststellen, ob zwei Zahlen befreundet
sind. Downloadseite
Nach Eingabe von zwei Zahlen, werden alle echten Teiler aufgelistet
und die Summe der Teiler ermittelt. Zum Beispiel
Eingabe Eingabe
220 284
Teiler: Teiler:
1 1
2 2
4 4
5 71
10 142
11
20
22
44
55
110
Summe der echte Teiler:
284 220
Da die Summe der echten Teiler der einen Zahl die andere Zahl ergibt, sind
220 und 284 befreundet.
-
Alle befreundete Zahlenpaare berechnen.
Downloadseite
Gar kein kompliziertes Programm: Man muss nur feststellen
ob die Summe der echten Teiler der Summe s der echten Teiler
einer Zahl n wieder dieselbe Zahl n ergibt.
—————————————— Quelltext ——————————————
function summeDerEchtenTeiler(const n: integer):integer;
var i : integer;
begin
result := 1; // 1 ist immer Teiler
for i := 2 to round(sqrt(n)) do
if n mod i = 0 then result := result + i + n div i;
end;
procedure TForm1.Button1Click(Sender: TObject);
var n,s: integer;
begin
Stop := False;
button1.Hide;
button3.hide;
n := 2;
listbox1.Items.Clear;
repeat
s := summeDerEchtenTeiler(n);
if summeDerEchtenTeiler(s) = n then
listbox1.Items.Add(IntToStr(n)+' '+IntToStr(s));
n := n + 1;
if n mod 1000 = 0 then Begin
application.ProcessMessages;
if Stop then BEgin
showmessage('Abbruch bei n='+IntToStr(n));
button1.show;
button3.Show;
exit;
ENd;
End;
until false;
end;
procedure TForm1.Button2Click(Sender: TObject); //"Abbrechen"
begin
Stop := True;
end;
——————————— Ende Quelltext ———————————
Stop ist eine private Variable. Sie muss eingefügt werden bei:
type
TForm1 = class(TForm)
...
private
Stop: Boolean;
{ Private-Deklarationen }
-
Siehe Programm
TTBruchrechnen:
Aufgaben zur Bruchrechnung werden gestellt und ausführlich vorgerechnet.
-
Übung: Umwandlung
Bruchzahl in Dezimalzahl Downloadseite
Version Dezember 2008
(Korrigierte Fassung. Und: Falsche Ergebnisse werden - falls je welche vorkommen sollten - angezeigt.)
-
Übung zur Lösung der
quadratischen Gleichung. Downloadseite
2
Die Gleichung a·x + b·x + c = 0 hat nach der "Mitternachtsformel"
die Lösungen:
———————
/2
-b ± \/b - 4ac
x = ———————————————
1,2 2a
Aufgaben werden dabei gestellt (oder können eingetippt werden).
2
z.B. wird 4x - 12x - 247 =0 folgendermaßen vorgerechnet:
2
Diskriminante d = b - 4ac = 4096
Die "Mitternachtsformel" liefert:
x1=(12+64)/8 = 9'1/2
x2=(12-64)/8 = 6'1/2
-
π=3,141 592 653 589
793 238 46 ... (Lindemann 1882: π ist
transzendentund damit die Quadratur des Kreises
unmöglich!)
Berechnung von
π.Downloadseite
*) Mit Hilfe einbeschriebener Vielecke
Autor
|
Datum
|
n
|
π
|
Archimedes, Syrakus
|
gest. 212 v.Chr.
|
96
|
3'10/71 < π < 3'1/7
|
Liu Hui, China
|
263 n. Chr.
|
192
|
3,1415
|
Liu Hui
|
später dann
|
3072
|
3,14159
|
al-Kasi, Samarkant
|
1427 n. Chr.
|
805306368
|
3,1415926535897932
|
2 2 2
u = 6*r, u = 2n·sqrt(2r - r·sqrt(4r - (u /6) ))
2n n
π 1 1 1 1 1 1 1 1
*) Nach Leibniz - = arctan(1) = 1 - - + - - - + - - —— + —— - —— + —— + ...
4 3 5 7 9 11 13 15 17
(Gottfried Wilhelm Leibniz 1646 - 1716 ("numero deus impari gaudet")
π 2·2 ·4·4 ·6·6 ·8·8· ...
*) Nach Wallis —— = ———————————————————————
2 1·3 ·3·5 ·5·7 ·7·9· ...
(John Wallis (1606 - 1703)
2
π 1 1 1 1
*) Nach Euler —— = 1 + - + - + —— + —— + ...
6 4 9 16 25
(Leonard Euler 1707 - 1783)
*) Nach Machin π = 16·arctan(1/5) - 4·arct(1/239)
1 1 1 1 1 1
= 16( - - ———— + ———— - ... ) - 4(——— - —————— + ——————— - ...)
3 5 3 5
5 3·5 5·5 239 3·239 5·239
(John Machin 1680 - 1752 berechnete 1707 Pi auf 100 Dezimalen)
*) Monte-Carlo-Methode
im Quadrat 0< x < 1, 0< y < 1 wird ausgezählt,
wie häufig ein zufälliger Punkt(x|y) im Viertelskreis
2 2
mit der Gleichung x + y < 1 zu liegen kommt
*) Der Quadratwurzelalgorithmus (Borwein 1984)
"Mörderisch schnell": |π - pi[n]|<=10-2n
a[0}=sqrt(2) b[0]=0 pi[0}=2+sqrt(2)
a[n+1] = 1/2·sqrt(a[n]) + 1/sqrt(a[n]))
b[n+1] = sqrt(a[n])·((b[n]+1)/(b[n]+a[n]))
pi[n+1] = pi[n]·b[n+1]·(1+a[n+1])/(1+b[n+1])
lim a[n] = lim b[n] =1 lim pi[n} = Pi für n->oo
*) Formel nach Plouffe (1995)
oo 1 4 2 1 1
Pi = Summe ———(———— - ———— - ———— - ————)
k=0 k 8k+1 8k+4 8k+5 8k+6
16
*) Literatur: H.-D. Ebbinghaus (Hsg.) Zahlen 2.Aufl.
Springer-Verlag 1988 S.117
Ein noch besserer Algorithmus wird beschrieben inJ.M. Borwein
and P.B. Borwein, Ramanujan and Pi, Scientific American, (1988), p.
112-117Mit diesem oder ähnlichen werden die Milliarden von
π-Stellen ausgerechnet.
Stand September 1999 Kanada: 68 Milliarden Stellen.
Stand Dezember 2002 Japan (Yasumasa Kanada von der
Universität Tokio): 1,24 Billionen =
1,240,000,000,000 Stellen.
Hier ein paar Stellen von π:
3,
14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436
78925903600113305305488204665213841469519415116094
33057270365759591953092186117381932611793105118548
07446237996274956735188575272489122793818301194912
98336733624406566430860213949463952247371907021798
60943702770539217176293176752384674818467669405132
00056812714526356082778577134275778960917363717872
14684409012249534301465495853710507922796892589235
42019956112129021960864034418159813629774771309960
51870721134999999837297804995105973173281609631859
50244594553469083026425223082533446850352619311881
71010003137838752886587533208381420617177669147303
59825349042875546873115956286388235378759375195778
18577805321712268066130019278766111959092164201989
38095257201065485863278865936153381827968230301952
03530185296899577362259941389124972177528347913151
55748572424541506959508295331168617278558890750983
81754637464939319255060400927701671139009848824012
85836160356370766010471018194295559619894676783744
94482553797747268471040475346462080466842590694912
93313677028989152104752162056966024058038150193511
25338243003558764024749647326391419927260426992279
67823547816360093417216412199245863150302861829745
55706749838505494588586926995690927210797509302955
32116534498720275596023648066549911988183479775356
63698074265425278625518184175746728909777727938000
81647060016145249192173217214772350141441973568548
16136115735255213347574184946843852332390739414333
45477624168625189835694855620992192221842725502542
56887671790494601653466804988627232791786085784383
82796797668145410095388378636095068006422512520511
73929848960841284886269456042419652850222106611863
06744278622039194945047123713786960956364371917287
46776465757396241389086583264599581339047802759009
94657640789512694683983525957098258226205224894077
26719478268482601476990902640136394437455305068203
49625245174939965143142980919065925093722169646151
57098583874105978859597729754989301617539284681382
68683868942774155991855925245953959431049972524680
84598727364469584865383673622262609912460805124388
43904512441365497627807977156914359977001296160894
41694868555848406353422072225828488648158456028506
01684273945226746767889525213852254995466672782398
64565961163548862305774564980355936345681743241125
15076069479451096596094025228879710893145669136867
22874894056010150330861792868092087476091782493858
90097149096759852613655497818931297848216829989487
22658804857564014270477555132379641451523746234364
54285844479526586782105114135473573952311342716610
21359695362314429524849371871101457654035902799344
03742007310578539062198387447808478489683321445713
86875194350643021845319104848100537061468067491927
81911979399520614196634287544406437451237181921799
98391015919561814675142691239748940907186494231961
56794520809514655022523160388193014209376213785595
66389377870830390697920773467221825625996615014215
03068038447734549202605414665925201497442850732518
66600213243408819071048633173464965145390579626856
10055081066587969981635747363840525714591028970641
40110971206280439039759515677157700420337869936007
23055876317635942187312514712053292819182618612586
73215791984148488291644706095752706957220917567116
72291098169091528017350671274858322287183520935396
57251210835791513698820914442100675103346711031412
67111369908658516398315019701651511685171437657618
35155650884909989859982387345528331635507647918535
89322618548963213293308985706420467525907091548141
65498594616371802709819943099244889575712828905923
23326097299712084433573265489382391193259746366730
58360414281388303203824903758985243744170291327656
18093773444030707469211201913020330380197621101100
44929321516084244485963766983895228684783123552658
21314495768572624334418930396864262434107732269780
28073189154411010446823252716201052652272111660396
66557309254711055785376346682065310989652691862056
47693125705863566201855810072936065987648611791045
33488503461136576867532494416680396265797877185560
84552965412665408530614344431858676975145661406800
70023787765913440171274947042056223053899456131407
11270004078547332699390814546646458807972708266830
63432858785698305235808933065757406795457163775254
20211495576158140025012622859413021647155097925923
09907965473761255176567513575178296664547791745011
29961489030463994713296210734043751895735961458901
93897131117904297828564750320319869151402870808599
04801094121472213179476477726224142548545403321571
85306142288137585043063321751829798662237172159160
77166925474873898665494945011465406284336639379003
97692656721463853067360965712091807638327166416274
88880078692560290228472104031721186082041900042296
61711963779213375751149595015660496318629472654736
42523081770367515906735023507283540567040386743513
62222477158915049530984448933309634087807693259939
78054193414473774418426312986080998886874132604721
Galton-Brett
Kugeln 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.
|
|
|