Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
31.01.11, 09:32
|
#1
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
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 ?
|
|
|
31.01.11, 09:36
|
#2
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
Zitat:
Wie komm ich auf die richtige Anzahl n von x^2+y^2<0 ?
|
Ich meinte x^2+y^2<1 :-)
|
|
|
31.01.11, 12:20
|
#3
|
Ist öfter hier
Registriert seit: Jan 2010
Beiträge: 189
Bedankt: 117
|
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
__________________
Make the world a prettier place - get a bikini wax!
|
|
|
31.01.11, 12:48
|
#4
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
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 :-)
|
|
|
31.01.11, 13:35
|
#5
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 10
Bedankt: 3
|
Zitat:
Zitat von flex83
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.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.
().
|