Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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*

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.

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

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

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!

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:

Ja!Sorry!Da hast du recht!Ist ja nur die Funktion ,die *4 hänge ich einfach an dei Funktion dran wenn ich sie in der main aufrufe!

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.