Verfügbare Informationen zu "Übung 7 Aufgabe 3"
Qualität des Beitrags: Beteiligte Poster: dave - m.imig Forum: Elektrotechnik und Informationstechnik Forenbeschreibung: ... 1. Semester an der FH Koblenz aus dem Unterforum: Informatik Antworten: 2 Forum gestartet am: Freitag 03.11.2006 Sprache: deutsch Link zum Originaltopic: Übung 7 Aufgabe 3 Letzte Antwort: vor 17 Jahren, 4 Monaten, 15 Tagen, 13 Stunden, 55 Minuten
Alle Beiträge und Antworten zu "Übung 7 Aufgabe 3"
Re: Übung 7 Aufgabe 3
dave - 13.12.2006, 22:34Übung 7 Aufgabe 3
Hier die Lösung zur Aufgabe 3:
Code: #include <iostream>
#include <math.h>
using namespace std;
int imKreis(double x, double y)
{
if((sqrt(pow(x,2)+pow(y,2)))<=1.0) return 1; //Wenn (x² + y²)=1² gilt ist der Punkt im Einheitskreis
else return 0;
}
int main ()
{
double x,y,naeherungPI;
int wiederholungen, anzahlPunkteImKreis = 0;
cout << "Wieviele Durchläufe soll es geben? Geben Sie eine Zahl ein: ";
cin >> wiederholungen;
for (int i=1; i<=wiederholungen; i++)
{
x=( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
y=( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
if (imKreis(x,y)==1) anzahlPunkteImKreis++;
}
naeherungPI=((double)anzahlPunkteImKreis / (double)wiederholungen);
// (double) muss angegeben werden, da sonnst int Division
cout << "Die Naeherung an PI/4 ist: " << naeherungPI << endl;
cout << "Zum Vergleich PI/4 ist: " << 3.14159265/4 << endl << endl;
cout << "Die Naeherung an PI ist: " << naeherungPI*4 << endl;
cout << "Zum Vergleich PI ist: " << 3.14159265 << endl << endl;
cin.ignore();
cin.ignore();
return 0;
}
Am kniffligsten fand ich an der Aufgabe das man sich was überlegen musste wie man die Ausgabe von rand() in den Bereich von 0 bis 1 bekommt. Mit (rand()%1000)/1000 hab ich es zuerst versucht ... gab zwar kleine werte aber klappte nit ... da die zahlen nicht mehr zufällig. Hab en bissel im Internet gelesen und herausgefunden das % Gift für Zufallsgeneratoren ist. RAND_MAX ist übrigens die Konstante die angibt bis zu welchem Maximal wert der Zufallsgenerator Zahlen generiert. Diese Konstante ist laut ANSI C in math.h definiert ... hätte dort natürlich auch nachaschauen können wie der Wert absolut aussieht ---> hatte ich aber keine Lust :-D
Re: Übung 7 Aufgabe 3
m.imig - 14.12.2006, 22:56
Kleine Kritik:
- keine alten Header verwenden (*.h) -> #include <cmath>
- bei der Funktion "imKreis(...)" kann man noch minimal optimieren:
Code:
bool imKreis(double x, double y) {
return((sqrt(pow(x,2)+pow(y,2)))<=1.0);
}
die Abfrage dazu lautet dann nur noch
Code:
if( imKreis(x, y) ) {...}
und in hässlich :> :
Code:
anzahlPunkteImKreis += imKreis(x, y) ? 1 : 0;
- bevor du PI zwei mal via Hand eintippst, lieber ne Konstante definieren
Code:
#include <iostream>
...
#define PI 3.141592653
int main() {...}
oder
Code:
...
int main(...)
{
const double PI = 3.141592653;
...
}
- anstelle von "cin.ignore();" mehrmals hintereinander aufzurufen, verwende ich lieber "std::system("pause");", ist auch linuxkompatibel
Ansonsten sieht der Code sehr gut aus, hab den Algorithmus in meinem Programm auch genauso umgesetzt.
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus dem Forum Elektrotechnik und Informationstechnik
Lern- und Gedächtnistraining - gepostet von Johannes am Mittwoch 24.01.2007
@ Jonas - gepostet von Thomas Nolden am Dienstag 14.11.2006
Ähnliche Beiträge wie "Übung 7 Aufgabe 3"
Übung gasaustritt im feuerwehrhaus - jamal-jefferson (Donnerstag 06.04.2006)
Beispiellösung: Übung 7, Aufgabe 1 (Binomialkoeffizient) - NVD (Freitag 08.12.2006)
5.übung salze - Chris (Sonntag 16.12.2007)
Aufgabe 7 - xfire64 (Freitag 10.11.2006)
Aufgabe Betriebssystem - schell (Montag 07.11.2005)
Stahlbau 2. Übung - cecily (Sonntag 05.11.2006)
Zettel Nr 6 Aufgabe 23a - ahnungslos (Mittwoch 30.05.2007)
Übung macht den Meister - donna (Sonntag 29.04.2007)
Bleib-Übung - rockyhund (Sonntag 12.08.2007)
[audio] Ring Ring (extended version) - ABBAinter.net (Samstag 02.06.2012)