Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.07 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Windows.Forms;
  10. using System.Diagnostics;
  11.  
  12. namespace MonteCarloPi
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         private Int64 losowania;
  17.         private int threadNr;
  18.         private int howManyThreads;
  19.         public Stopwatch timer;
  20.         private double[,] results;
  21.         private int processors;
  22.  
  23.         public Form1()
  24.         {
  25.             InitializeComponent();
  26.         }
  27.  
  28.         private void calculateBtn_Click(object sender, EventArgs e)
  29.         {
  30.             this.losowania = Convert.ToInt64(losowaniaBox.Text);
  31.             this.threadNr = Convert.ToInt16(resultBox.Text);
  32.             this.howManyThreads = threadNr;
  33.             Random r = new Random();
  34.             this.results = new double[threadNr, 3];
  35.             calculateBtn.Enabled = false;
  36.             this.timer = Stopwatch.StartNew();
  37.             progressBar1.Value = 0;
  38.             textBox3.AppendText("Uruchomiono program.\n");
  39.             for (int i = 0; i < threadNr; i++)
  40.             {
  41.                 BackgroundWorker m_oBackgroundWorker = new BackgroundWorker();
  42.  
  43.                 m_oBackgroundWorker.DoWork += new DoWorkEventHandler(m_oBackGroundWorker_DoWork);
  44.                 m_oBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_oBackGroundWorker_RunWorkerCompleted);
  45.                // m_oBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(m_oBackGroundWorker_ProgressChanged);
  46.                // m_oBackgroundWorker.WorkerReportsProgress = true;
  47.  
  48.                 int[] parameters = new int[2];
  49.                 parameters[0] = i;
  50.                 parameters[1] = r.Next();
  51.  
  52.                 m_oBackgroundWorker.RunWorkerAsync(parameters);
  53.             }
  54.            
  55.         }
  56.  
  57.         private void m_oBackGroundWorker_DoWork(object sender, DoWorkEventArgs e)
  58.         {
  59.             BackgroundWorker m_oBackGroundWorker = sender as BackgroundWorker;
  60.             int[] parameters = (int[])e.Argument;
  61.             int indeks = parameters[0];            
  62.             long trafienie = 0;
  63.             long losowaniaWatek = losowania/threadNr;
  64.  
  65.             Random rand = new Random(parameters[1]);
  66.            
  67.  
  68.             for (int i = 1; i < losowaniaWatek; i++)
  69.             {
  70.                 if (Math.Pow(rand.NextDouble(), 2) + Math.Pow(rand.NextDouble(), 2) <= 1)
  71.                 {
  72.                     trafienie++;
  73.                 }
  74.             }
  75.             this.results[indeks, 0] = trafienie;
  76.             this.results[indeks, 1] = 4.0 * trafienie / losowaniaWatek;
  77.  
  78.             //double bezwzgledna = Math.Abs(Math.PI - aproksymacja);
  79.             processors = Environment.ProcessorCount;
  80.  
  81.           // for (int nCounter = 1; nCounter <= 100; nCounter += 1)
  82.           //  {
  83.             //    Thread.Sleep(1000);
  84.            //    m_oBackGroundWorker.ReportProgress(nCounter, results);
  85.          //  }
  86.  
  87.         }
  88.  
  89.      /*   void m_oBackGroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
  90.         {
  91.             if (0 == (e.ProgressPercentage % 5))
  92.             {
  93.                 textBox3.AppendText(e.ProgressPercentage.ToString() + "\n");            
  94.             }
  95.             progressBar1.Value = e.ProgressPercentage;
  96.             */
  97.  
  98.        
  99.  
  100.         private void m_oBackGroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  101.         {
  102.             if (Interlocked.Decrement(ref howManyThreads) == 0)
  103.             {
  104.                 timer.Stop();
  105.                 double sum = 0;
  106.  
  107.                 for (int i = 0; i < results.GetLength(0);i++)
  108.                 {
  109.                     sum += results[i, 1];
  110.                 }
  111.                 double aproksymacja = (sum / results.GetLength(0));
  112.                 textBox3.Text = "Aproksymacja " + aproksymacja + "\n";
  113.                 double time = timer.Elapsed.TotalSeconds;
  114.                 textBox3.AppendText("Czas obliczeń " + time.ToString() + "\n");
  115.                 textBox3.AppendText("Bezwzględna " + Math.Abs(Math.PI - aproksymacja) + "\n");
  116.                 textBox3.AppendText("Ilość procesorów " + processors);
  117.                 calculateBtn.Enabled = true;
  118.             }
  119.         }
  120.  
  121.  
  122.         //metody do guzików i textboxow
  123.         private void losowaniaBox_TextChanged(object sender, EventArgs e)
  124.         {
  125.            
  126.            
  127.  
  128.         }
  129.  
  130.         private void resultBox_TextChanged(object sender, EventArgs e)
  131.         {
  132.            
  133.         }
  134.  
  135.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  136.         {
  137.  
  138.         }
  139.  
  140.         private void textBox1_TextChanged(object sender, EventArgs e)
  141.         {
  142.  
  143.         }
  144.  
  145.         private void textBox2_TextChanged(object sender, EventArgs e)
  146.         {
  147.  
  148.         }
  149.  
  150.         private void textBox3_TextChanged(object sender, EventArgs e)
  151.         {
  152.  
  153.         }
  154.  
  155.         private void Form1_Load(object sender, EventArgs e)
  156.         {
  157.  
  158.         }
  159.     }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement