Vla_DOS

Потоки

Sep 27th, 2022
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.21 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Lr
  5. {
  6.     class Program
  7.     {
  8.         static int sign(object z)
  9.         {
  10.             Console.WriteLine("\nsign виконується в потоці: " + Thread.CurrentThread.ManagedThreadId);
  11.  
  12.             if ((double)z > 0)
  13.                 return 1;
  14.             else
  15.                 return -1;
  16.         }
  17.  
  18.         static double sum(int k, double[,] d, double[,] s)
  19.         {
  20.             int i;
  21.             double sum = 0;
  22.  
  23.             for (i = 0; i <= k - 2; i++)
  24.                 sum += d[i, i] * Math.Pow(s[i, k], 2);
  25.  
  26.             return sum;
  27.         }
  28.  
  29.         static double sum(int k, int j, double[,] d, double[,] s)
  30.         {
  31.             double sum = 0;
  32.  
  33.             for (int i = 0; i <= k - 2; i++)
  34.             {
  35.                 sum += d[i, i] * s[i, k] * s[i, j];
  36.             }
  37.  
  38.             return sum;
  39.         }
  40.  
  41.         static double sum(int i, double[,] d, double[] y, double[,] s)
  42.         {
  43.             double sum = 0;
  44.  
  45.             for (int k = 0; k <= i - 2; k++)
  46.                 sum += d[k, k] * y[k] * s[k, i];
  47.  
  48.             return sum;
  49.         }
  50.  
  51.         static double sum(int i, double[,] s, double[] x)
  52.         {
  53.             double sum = 0;
  54.  
  55.             for (int k = i + 1; k <= 5 - 1; k++)
  56.                 sum += s[i, k] * x[k];
  57.             Console.WriteLine("\nSum виконується в потоці: " + Thread.CurrentThread.ManagedThreadId);
  58.             return sum;
  59.         }
  60.         static void Print(object a)
  61.         {
  62.             Console.WriteLine("\nPrint виконується в потоці: " + Thread.CurrentThread.ManagedThreadId);
  63.  
  64.             double[,] arr = (double[,])a;
  65.             for (int i = 0; i < arr.GetLength(0); i++)
  66.             {
  67.                 for (int j = 0; j < arr.GetLength(1); j++)
  68.                 {
  69.                     Console.Write($"{arr[i, j]:f3}\t");
  70.                 }
  71.                 Console.WriteLine();
  72.             }
  73.  
  74.         }
  75.  
  76.         static void ThreadWithParameters() => Console.WriteLine("\nПотік без параметрів: " + Thread.CurrentThread.ManagedThreadId);
  77.  
  78.         static void Starting()
  79.         {
  80.             const int n = 5;
  81.             const int d = -5;
  82.             const double q = -2.58;
  83.  
  84.             double[,] a = { { q, 1, 0, 0, 0 }, { 1, -2, 1, 0, 0 }, { 0, 1, -2, 1, 0 }, { 0, 0, 1, -2, 1 }, { 0, 0, 0, 1, q } };
  85.             double[] b = { 0, d, d, d, 0 };
  86.             double[,] s = { { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 } };
  87.             double[,] s_t = new double[n, n];
  88.             double[,] dArr = { { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 } };
  89.             double[] x = new double[n];
  90.             double[] y = new double[n];
  91.             int i, j, k;
  92.  
  93.             dArr[0, 0] = sign(a[0, 0]);
  94.             s[0, 0] = Math.Sqrt(Math.Abs(a[0, 0]));
  95.  
  96.             for (k = 0; k < n; k++)
  97.             {
  98.                 if (k != 0)
  99.                 {
  100.                     dArr[k, k] = sign(a[k, k] - sum(k, dArr, s));
  101.                     s[k, k] = Math.Sqrt(Math.Abs(a[k, k] - sum(k, dArr, s)));
  102.                     Console.WriteLine($"s[{k}, {k}] = {s[k, k]:f3}");
  103.                 }
  104.                 for (j = k + 1; j < n; j++)
  105.                 {
  106.                     s[k, j] = (a[k, j] - sum(k, j, dArr, s)) / (s[k, k] * dArr[k, k]);
  107.                     Console.WriteLine($"s[{k}, {j}] = {s[k, j]:f3}");
  108.                 }
  109.             }
  110.             Console.WriteLine();
  111.             Console.WriteLine();
  112.  
  113.             Thread t1 = new Thread(Print);
  114.             t1.Start(s);
  115.            // Print(s);
  116.  
  117.             for (i = 0; i < n; i++)
  118.             {
  119.                 for (j = 0; j < n; j++)
  120.                 {
  121.                     s_t[i, j] = s[j, i];
  122.                 }
  123.             }
  124.             Console.WriteLine();
  125.             Console.WriteLine();
  126.             Console.WriteLine();
  127.  
  128.             Thread t2 = new Thread(Print);
  129.             t2.Start(s_t);
  130.  
  131.             Console.WriteLine();
  132.  
  133.             y[0] = b[0] / (s[0, 0] * dArr[0, 0]);
  134.             for (i = 0; i < n; i++)
  135.                 y[i] = (b[i] - sum(i, dArr, y, s)) / (s[i, i] * dArr[i, i]);
  136.             for (i = 0; i < n; i++)
  137.                 Console.WriteLine("{0:f3}", y[i]);
  138.  
  139.             Console.WriteLine();
  140.             Console.WriteLine();
  141.             Console.WriteLine();
  142.  
  143.             for (i = n - 1; i >= 0; i--) // n-1 ! n - выход за пределы массива
  144.                 x[i] = (y[i] - sum(i, s, x)) / s[i, i];
  145.             for (i = 0; i < n; i++)
  146.                 Console.WriteLine("{0:f3}", x[i]);
  147.         }
  148.         static void Main(string[] args)
  149.         {
  150.             try
  151.             {
  152.                 Console.WriteLine("\nГоловний потiк: " + Thread.CurrentThread.ManagedThreadId + "\n");
  153.                 Thread t1 = new Thread(ThreadWithParameters);
  154.                 t1.Start();
  155.                 Thread t2 = new Thread(Starting);
  156.                 t2.Start();
  157.  
  158.             }
  159.             catch (Exception ex)
  160.             {
  161.                 Console.WriteLine(ex.Message);
  162.             }
  163.  
  164.             Console.ReadKey();
  165.         }
  166.  
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment