Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Lr
- {
- class Program
- {
- static int sign(object z)
- {
- Console.WriteLine("\nsign виконується в потоці: " + Thread.CurrentThread.ManagedThreadId);
- if ((double)z > 0)
- return 1;
- else
- return -1;
- }
- static double sum(int k, double[,] d, double[,] s)
- {
- int i;
- double sum = 0;
- for (i = 0; i <= k - 2; i++)
- sum += d[i, i] * Math.Pow(s[i, k], 2);
- return sum;
- }
- static double sum(int k, int j, double[,] d, double[,] s)
- {
- double sum = 0;
- for (int i = 0; i <= k - 2; i++)
- {
- sum += d[i, i] * s[i, k] * s[i, j];
- }
- return sum;
- }
- static double sum(int i, double[,] d, double[] y, double[,] s)
- {
- double sum = 0;
- for (int k = 0; k <= i - 2; k++)
- sum += d[k, k] * y[k] * s[k, i];
- return sum;
- }
- static double sum(int i, double[,] s, double[] x)
- {
- double sum = 0;
- for (int k = i + 1; k <= 5 - 1; k++)
- sum += s[i, k] * x[k];
- Console.WriteLine("\nSum виконується в потоці: " + Thread.CurrentThread.ManagedThreadId);
- return sum;
- }
- static void Print(object a)
- {
- Console.WriteLine("\nPrint виконується в потоці: " + Thread.CurrentThread.ManagedThreadId);
- double[,] arr = (double[,])a;
- for (int i = 0; i < arr.GetLength(0); i++)
- {
- for (int j = 0; j < arr.GetLength(1); j++)
- {
- Console.Write($"{arr[i, j]:f3}\t");
- }
- Console.WriteLine();
- }
- }
- static void ThreadWithParameters() => Console.WriteLine("\nПотік без параметрів: " + Thread.CurrentThread.ManagedThreadId);
- static void Starting()
- {
- const int n = 5;
- const int d = -5;
- const double q = -2.58;
- 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 } };
- double[] b = { 0, d, d, d, 0 };
- 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 } };
- double[,] s_t = new double[n, n];
- 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 } };
- double[] x = new double[n];
- double[] y = new double[n];
- int i, j, k;
- dArr[0, 0] = sign(a[0, 0]);
- s[0, 0] = Math.Sqrt(Math.Abs(a[0, 0]));
- for (k = 0; k < n; k++)
- {
- if (k != 0)
- {
- dArr[k, k] = sign(a[k, k] - sum(k, dArr, s));
- s[k, k] = Math.Sqrt(Math.Abs(a[k, k] - sum(k, dArr, s)));
- Console.WriteLine($"s[{k}, {k}] = {s[k, k]:f3}");
- }
- for (j = k + 1; j < n; j++)
- {
- s[k, j] = (a[k, j] - sum(k, j, dArr, s)) / (s[k, k] * dArr[k, k]);
- Console.WriteLine($"s[{k}, {j}] = {s[k, j]:f3}");
- }
- }
- Console.WriteLine();
- Console.WriteLine();
- Thread t1 = new Thread(Print);
- t1.Start(s);
- // Print(s);
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- s_t[i, j] = s[j, i];
- }
- }
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine();
- Thread t2 = new Thread(Print);
- t2.Start(s_t);
- Console.WriteLine();
- y[0] = b[0] / (s[0, 0] * dArr[0, 0]);
- for (i = 0; i < n; i++)
- y[i] = (b[i] - sum(i, dArr, y, s)) / (s[i, i] * dArr[i, i]);
- for (i = 0; i < n; i++)
- Console.WriteLine("{0:f3}", y[i]);
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine();
- for (i = n - 1; i >= 0; i--) // n-1 ! n - выход за пределы массива
- x[i] = (y[i] - sum(i, s, x)) / s[i, i];
- for (i = 0; i < n; i++)
- Console.WriteLine("{0:f3}", x[i]);
- }
- static void Main(string[] args)
- {
- try
- {
- Console.WriteLine("\nГоловний потiк: " + Thread.CurrentThread.ManagedThreadId + "\n");
- Thread t1 = new Thread(ThreadWithParameters);
- t1.Start();
- Thread t2 = new Thread(Starting);
- t2.Start();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment