Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lab06;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- class Calka extends Thread{
- //poczatek, koniec, wynik, ile watkow, ile podprzedzialow
- private double dx, xp, xk, cal;
- private int n,p,ileNaWatek,reszta;
- boolean ostatni;
- //funkcja którą liczymy
- private double funkcja(double x) {
- return 1.0/(1.0+x*x);
- }
- //metoda trapezów
- public double metoda_trapezow(double xp, double xk){
- return (funkcja(xp) + funkcja(xk)) * (xk - xp)/2;
- }
- //wynik
- public double wynik(){
- return cal;
- }
- //konstruktor z parametrami, poczatek i koniec przedzialu
- public Calka(int n,int p,double dx,double xp,double xk, int ileNaWatek, int reszta,boolean ostatni){
- this.n = n;
- this.p = p;
- this.dx = dx;
- this.xp = xp;
- this.ileNaWatek = ileNaWatek;
- this.xk = xk;
- this.reszta = reszta;
- this.ostatni = ostatni;
- }
- @Override
- public void run(){
- if(ostatni==true)
- {
- for (int i=0;i<p/n;i++)
- {
- this.cal += metoda_trapezow(i*dx+xp, (i+1)*dx+xp+reszta*dx);
- }
- }
- else
- {
- for (int i=0;i<p/n;i++)
- {
- this.cal += metoda_trapezow(i*dx+xp, (i+1)*dx+xp);
- }
- }
- }
- }
- public class Lab06 {
- public static void main(String[] args) {
- int n = 3; //ilość watków
- int p = 1000; //ilosc przedzialów
- System.out.println("Wąteczki: "+n);
- System.out.println("Podprzedziałki: "+p);
- Calka[] calki = new Calka[n]; //tablica na wyniki przedzialów
- double xp = 0; //poczatek
- double xk = 1; //koniec
- double calka = 0; //wynik
- int ileNaWatek = p/n;
- int reszta = p%n;
- double dx = (xk - xp) / p;
- //każdy proces liczy tylko swój podprzedział
- //n procesów kolejno liczy coraz dalsze sumy podprzedziałów
- boolean ostatni=false;
- for (int i=0; i<n; i++) {
- if(i==n-1)
- {
- ostatni = true;
- calki[i] = new Calka(n,p,dx,xp,xk,ileNaWatek,reszta,ostatni);
- calki[i].start();
- }
- else
- {
- calki[i] = new Calka(n,p,dx,xp,xk,ileNaWatek,reszta,ostatni);
- calki[i].start();
- }
- }
- for (int i = 0 ; i < n ; i++) {
- try {
- calki[i].join();
- } catch (InterruptedException ex) {
- Logger.getLogger(Lab06.class.getName()).log(Level.SEVERE, null, ex);
- }
- //zliczenie wyników, wypisanie ID wątku
- System.out.println("Wątek "+(i%8+1)+": " + calki[i].wynik());
- calka += calki[i].wynik();
- }
- calka = 4*calka; //mnożymy calke razy 4
- System.out.println("Wynik: " + calka);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement