Metoda MonteCarlo
28 04 2008import 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();
}
}