myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Hilfe in c++ Programmierung gesucht. (https://mygully.com/showthread.php?t=2220069)

flex83 31.01.11 09:32

Hilfe in c++ Programmierung gesucht.
 
Hallo! Könnt ihr mir bitte bei der Aufgabe helfen. Habe morgen Prüfung, bin aber nicht gut in Programmierung. Danke.

Die Kreiszahl pi soll mit einem Programmnach dem Monte-Carlo-Verfahren
abgeschätzt werden. Hierzu werden 1000 zufällige Punkte (x,y) mit x und
y-Werten zwischen 0 und 1 erzeugt. Die Kreiszahl pi ergibt sich aus der
Anzahl n der Punkte innerhalb des Einheitskreises nach der Formel
pi=4*n/1000
Schreiben Sie ein C++-Programm, das die Zahl pi nach diesem Verfahren
berechnet und auf dem Bildschirmausgibt.
Hinweise:
- x=(double)rand()/(double)RAND_MAX erzeugt einen double-Zufallswert x zwischen 0 und 1.
- Binden Sie für rand() und RAND_MAX die Header-Datei stdlib.h ein.
- Ein Punkt (x,y) liegt innerhalb des Einheitskreises, wenn x^2 +y^2 < 1 gilt.

Habe da schon was zusammengebastelt :-) Grausam.

#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
srand(time(0));

double x,y,p,z,pi,n;
for (int i=1; i<=1000; i++){
x=(double)rand()/(double)RAND_MAX;
y=(double)rand()/(double)RAND_MAX;
z=pow(x,2)+pow(y,2);
if (z<1){
p=ceil(z);
//cout << z << " "<< p << endl;
}
}
pi=4*n/100;
cout << pi << endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}

Wie komm ich auf die richtige Anzahl n von x^2+y^2<0 ?

flex83 31.01.11 09:36

Zitat:

Wie komm ich auf die richtige Anzahl n von x^2+y^2<0 ?
Ich meinte x^2+y^2<1 :-)

wmosebach 31.01.11 12:20

Ansich stimmt es schon fast, brauchst nur 1 2 Änderungen zu unternehmen:

Code:

#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
srand(time(0));

double x,y,z,pi;
int n = 0;
for (int i=1; i<=1000; i++){
x=(double)rand()/(double)RAND_MAX;
y=(double)rand()/(double)RAND_MAX;
z=x*x+y*y;
if (z<1){
n++;
}
}
pi=4*n/1000;
cout << pi << endl;

system("PAUSE");
return EXIT_SUCCESS;
}

Allgemein:
pow is ne ganz böse funktion, nutze lieber x*x wenn es solch einfache Berechnungen sind

ob rand() so funktioniert, wei ich nicht 100%ig, aber so sollte die Funktion umgesetzt werden können

flex83 31.01.11 12:48

Super vielen Dank. Kleine Änderung musste ich aber noch machen: statt „ int n“ habe ich als „double n“ deklariert. Sonst liefert er mir immer die Zahl 3. Danke :-)

flex83 31.01.11 13:35

Zitat:

Zitat von flex83 (Beitrag 21849421)
Super vielen Dank. Kleine Änderung musste ich aber noch machen: statt „ int n“ habe ich als „double n“ deklariert. Sonst liefert er mir immer die Zahl 3. Danke :-)

Blödsinn! Da muss ein Punkt hin pi=4.*n/1000;
Jetzt passt alles.:T


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.