Hallo!
Ich bin am verzweifeln
, denn folgendes klappt einfach nicht:
pi mit Pythagoras berechnen
Ein Halbkreis wird durch Rechtecke angenähert. Zunächst hat der erste Rechenlauf ein Rechteck mit der Höhe R im Vergleich mit der Halbkreisfläche. Dann wird die Höhe halbiert, 2 Rechtecke haben jeweils die Höhe R/2. Die Breite des Rechtecks ergibt sich jeweils aus dem Satz des Pythagoras. Dann wird der Radius gedrittelt, und neue Rechtecke bestimmt. Die Summe der Rechteckflächen wird jedes mal mit der Fläche des Halbkreises verglichen, die am Anfang des Programms ausgerechnet wurde. Ist die Abweichung kleiner als 1/10 Promille wird die Rechnung abgebrochen und das Ergebnis ausgegeben (mit der Anzahl der Rechtecke).
Mein Ansatz bisher:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,
kasten :integer;
radius,
breite,
hoehe,
kflaeche,
p,
halbkreis :double;
genau :boolean;
begin
radius:=strtofloat(edit1.Text);
halbkreis:=(pi*Sqr(radius))/2;
kasten:=0;
genau:=false;
while not genau do
begin
inc(kasten);
kflaeche:=0;
for i:=0 to kasten do
begin
hoehe:=radius/kasten;
if i=0
then breite:=2*radius
else breite:=2*(power((Sqr(radius)-Sqr(i*hoehe)),(1/2)));
kflaeche:=kflaeche+(hoehe*breite);
end;
if halbkreis >= (kflaeche*0.8) then genau:=true;
end;
p:=(kflaeche*2)/(Sqr(radius));
label3.caption:=floattostr(p);
label4.caption:=inttostr(i);
end;
Sobald ich die Genauigkeit aber höher als 80% setze, erscheint folgende Fehlermeldung:
"Im Projekt project1.exe ist eine
Exception der Klasse EInvalidOp aufgetreten. Meldung:'Ungültige Gleitkommaoperation'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."
Was mache ich falsch ?!?
Im Anhang das gezippte Projekt