Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi Leute hab da mal wieder ein kleines Problemm mit C!*g*

Wollte ein Programm schreiben das mir Pi berechnet!

Nach dieser Formel!

pi=(1-1/3+1/5-1/7+1/9-1/11+1/13-............)*4

Der Benutzer soll auch eingeben wie weit und wie genau er pi berechnen möchte!Wenn er z.B 7 eingibt ist die Berechnung genauer als wenn er 3 eingibt!

Die Berechnung hab in eine .h ausgelagert und in der .c übergebe ich nur die Zahl und gebe das Ergebnis aus!

Mein Funktion sieht so aus!

--------------------------------------------------------------------------------------------------------

float pi(float zahl)

{

int i,merker=0;

float pi=1;

for(i=3;i<=zahl;i=i+2)

{

if(merker==0)

{

pi=pi-(1/i);

merker=1;

}

else

{

pi=pi+1/i;

merker=0;

}

}

return pi;

}

--------------------------------------------------------------------------------------------------------

Als Ergebnis bringt er mir Pi = 4; Warum?Kann doch eigentlich nicht so schwer sein!Hab schon schwerere Progs geschrieben ich will aber heute irgendwie nicht drauf kommen!*Auch brett vor dem Kopf*

Geschrieben

Wenn du 1/i rechnest, macht der Compiler eine Ganzzahldivision, weil Zähler und Nenner beide ganzzahlig sind (i ist ein int, das Stringliteral 1 auch). Dabei werden Nachkommastellen abgeschnitten. Damit kommt (für i > 1) immer Null raus.

Wenn du eine Fließkommadivision willst, muss einer der Operanden ein Fließkommatyp sein. Das geht in deinem Fall am einfachsten, indem du statt 1 1.0 schreibst.

Geschrieben

Danke für eure Hilfe!Wie dumm kann man nur sein!Ich glaub ich hätte noch ne Stunde gesucht!Ich weiß ja selber, dass man int mit float nicht kombinieren soll, weil die Nachkommastellen abgeschnitten werden ich hab wirklich nicht auf solch "eine Kleinigkeit" geachtet!

Danke :uli

Geschrieben
Original geschrieben von Guybrush Threepwood

Also bei mir sagt er so PI=1.

Na das eroeffnet doch ganz neue Perspektiven.

Wenn PI = 1 ist, dann ist der Umfang eines Kreises 2*r = d

Wenn also der Umfang gleich dem Durchmesser ist, dann waere der Kreis wohl eine Linie um ueberhaupt einen so grossen Durchmesser aufnehmen zu koennen.

Ich glaube, wir sollten uns also in Gedanken schon mal von Runden Kreisen verabschieden :bimei

Goos

Geschrieben
Original geschrieben von Guybrush Threepwood

Und jetzt berechnet das Programm bei dir PI:confused:

Weil wie gsagt bei mir kahm so 1 raus.

Ja!Hab in der for-schleife int i durch double i ersetzt!Jetzt schneidet er den Nachkommabereich nicht mehr ab und um so höher die Zahl ist die ich in der main eingebe und der Funktion übergebe desto genauer ist pi!

Geschrieben
Original geschrieben von Goos

Na das eroeffnet doch ganz neue Perspektiven.

Wenn PI = 1 ist, dann ist der Umfang eines Kreises 2*r = d

Wenn also der Umfang gleich dem Durchmesser ist, dann waere der Kreis wohl eine Linie um ueberhaupt einen so grossen Durchmesser aufnehmen zu koennen.

Ich glaube, wir sollten uns also in Gedanken schon mal von Runden Kreisen verabschieden :bimei

Goos

lol:D

Original geschrieben von Master Z

Ja!Hab in der for-schleife int i durch double i ersetzt!Jetzt schneidet er den Nachkommabereich nicht mehr ab und um so höher die Zahl ist die ich in der main eingebe und der Funktion übergebe desto genauer ist pi!

Irgendwie bin ich zu blöd dafür. Wenn ich oben die Funktion nehme und das int durch ein float ersetzte bekomme ich PI=0.723810 raus:confused:

Geschrieben

Ich habe auch mal versucht auf Basis dieser Reihe (Leibniz-Reihe; ==Pi/4 = 1/1 - 1/3 + 1/5...) ein Programm zu entwickeln. Ich habe das so gemacht, dass ich Zähler und Nenner getrennt in Integer-Variablen gespeichtert habe. Ich hab dann versucht den vorgang der Division, wie man ihn auf dem Papier durchführen würde, "nachzubauen". Letztlich bin ich daran gescheitert, dass die Datentypen zu klein sind. spätestens nach dem 10 Summanden wird der Nenner zu groß.

Ich denke kürzen der Brüche wird da noch eine Lösung sein. Sollte das nicht helfen wäre eine Lineare Liste zum abspeichern der Bruchkomponenten noch eine Lösung (örks Zeiger). Dazu müsste ich mir aber erst noch genauere Gedanken machen.

Gruß

Sascha

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...