Metoda MonteCarlo

28 04 2008

import java.util.*;
import java.io.*;
import java.util.concurrent.*;

public class MCarlo implements Runnable {
private int n;
private int t;
private double Pi;
private int priorytet;
private double x;
private double y;
private double z;

public MCarlo(int n, int priorytet) {
this.priorytet=priorytet;
this.n=n;
}

public String toString() {
return “Punktow: “+n+” priorytet: “+priorytet+” Pi= “+Pi;
}

public void run() {
//Thread.currentThread().setPriority(priorytet);
for(int i=0;i<n;i++) {
x=Math.random()*0.5;
y=Math.random()*0.5;
z=x*x+y*y;
if(Math.sqrt(z)<=0.5) {t++;}
}
Pi=((4.0*t)/(n*1.0));
System.out.println(this);
}

public static void main(String[] args) throws IOException {
ExecutorService exec= Executors.newCachedThreadPool();

String linia;
int a,b;

BufferedReader in=null;
try { //plik z danymi
in= new BufferedReader(new FileReader(args[0]));
} catch(FileNotFoundException e) {
System.out.println(”Nie mozna otworzyc pliku: “+args[0]);
}

PrintWriter out=null;
try { //plik wynikowy
out= new PrintWriter(new FileWriter(args[1]));
} catch(FileNotFoundException e2) {
System.out.println(”Nie powiodlo sie utworzenie pliku wynikowego “+args[1]);
}

int licznik= 1; //bo numeracja wierczy od 1 a nie od 0

while ((linia= in.readLine())!= null) {
try { //tu dodac co ma robic z zczytanymi danymi…
a=Integer.parseInt(linia.split(” “)[0]);
b=Integer.parseInt(linia.split(” “)[1]);
exec.execute(new MCarlo(a,b));

licznik+=1;
} catch(Exception e3) {
System.out.println(”Blad danych w wierszu: “+licznik);
}
}
exec.shutdown();
in.close();
out.close();
}
}


Operacje

Informacja

Dodaj komentarz

Możesz użyć tych tagów : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>