PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kann mir mal jm helfen? Quellcode erstellen von simplen algorithmus


NiCoSt
2007-02-13, 23:10:46
HI!

ich habe auf meinem Taschenrechner ein programm geschrieben und wollte es aufm PC ausprobieren (größere rechenleistung), merke aber eben, dass meine c kenntnisse dahin sind.

es ist egal welche programmiersprache, ob grafisch oder nicht, ich hätte das teil gern einfach aufn rechner ;)

könnte jemand für mich das mal schnell in sein editor konform eintippen und mir das programm geben? das wär nett. Der quellcode ist im prinzip selbsterklärend, hier mal original mit erklärung:

input "Anzahl?", n (Anzahl der messwerte eingeben)
n->p (wert n auf p speichern)
0->q (Null=q)
For i,1,n,1 (Schleife von 1 bis n, schrittweite 1, laufvariable i)
rand()->x (Zufallswert zwischen 0 und 1 erzeugen und auf x speichern)
rand()->y (Zufallswert zwischen 0 und 1 erzeugen und auf y speichern)
IF x<SQRT(1-y^2) AND y<SQRT(1-x^2) THEN
q+1->q (q um 1 incrementieren)
ENDIF
ENDFOR
Output q/p*4 (q durch p mal 4 ausgeben)
Fertig


ich hoffe ihr wisst wie ichs meine. Für jm, der in seiner programmiersprache steht ist das ne sache von 3 minuten, für mich nich ;(

danke schonmal!

E: es muss q durch p mal 4 heißen, nicht q mal p durch 4 *korrigiert*

Sephiroth
2007-02-13, 23:33:00
Für Windows:
function tr_test(n)
{
var x, y, q = 0;
for (var i=1; i<=n; i++)
{
x = Math.random();
y = Math.random();
if (x < Math.sqrt(1-y*y) && y < Math.sqrt(1-x*x))
{
q++;
}
}
return q/n*4;
}

WScript.Echo(tr_test(31));
Speichern als tr_test.js und einfach anklicken.

Bei einem anderen Wert, die 31 entsprechend ersetzen, speichern und fertig.

NiCoSt
2007-02-13, 23:38:52
die 31 sagt quasi wie oft er das durchlaufen soll?

wenn ja, danke,!!!!!!!!!!!!!!!!!!!!!!!!!!! WOW,d achte nie , dass das so einfach gehten soll, also ohne compiler und so... *mal mit wondows scripting auseinandersetzen muss*!!


1000 danke

UliBär
2007-02-13, 23:43:33
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MonteCarlo
{
/**
* @param args
* @throws IOException
*/
static double function(int n)
{
double x, y, q = 0;
for (int i = 1; i <= n; i++)
{
x = Math.random();
y = Math.random();
if (x < Math.sqrt(1 - y * y) && y < Math.sqrt(1 - x * x))
{
q++;
}
}
return q / n * 4;
}

public static void main(String[] args) throws IOException
{
System.out.print("Anzahl:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int n = Integer.parseInt(input);
System.out.println(function(n));
}
}
Experimentelle Bestimmung von PI? ;)

[edit] Arrgh - too late...

NiCoSt
2007-02-13, 23:45:18
ja, genau!!!

BOAH DAS IS DER HAMMER *ausflipp*

Hab mal eben 10 millionen Messwerte durchjagen lassen:

3,1412524!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

auf 3 stellen genau! Ich fass es nicht! sry, aber ich finde das krass ;) irgendwie gibt das so ein heroisches gefühl, wenn der selbst ausgesachte algorithmus funzt.... vA wenn ein kleiner TI-89 sowas kann... ;)

so, mal 100 mio testen...

E.

boah, hat das lange gedauert. Ergebnis: 3,14150942

WAHNSINN sag ich da nur! echt wahnsinn!

btw kann man mit der monte-carlo-methode auch jeden beliebigen Flächeninhalt relativ genau bestimmen...

EE: Milliarde läuft gerade..gut, das ich HT habe ;)

Coda
2007-02-14, 01:47:39
Was soll das bringen, wenn der Fließkommatyp eine Genauigkeit von 7 bzw 15 signifikanten Stellen hat? ;)

NiCoSt
2007-02-14, 10:26:26
Was soll das bringen, wenn der Fließkommatyp eine Genauigkeit von 7 bzw 15 signifikanten Stellen hat? ;)


?!

Ergebnis mit 1 Milliarde: 3,141501864

Nasenbaer
2007-02-14, 12:10:59
Also sich selbst ne Näherung ausdenken ist nicht schlecht aber wenn du es wirklich produktiv einsetzen willst, dann solltest du ne Reihe nehmen die wesentlich schneller konvergiert als dein Algo.
Bei Wikipedia findest das mehrere Verfahren. Auch eins, dass deinem sehr ähnlich ist aber halt viel besser konvergiert. Musst mal gucken. :)