Advertisement
TumkasOff1

Untitled

Feb 26th, 2017
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.49 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7.  
  8. namespace ConsoleApplication2
  9. {
  10.  
  11.     class Program
  12.     {
  13.  
  14.         static void Main(string[] args)
  15.         {
  16.  
  17.             double l, step, nn;
  18.             int n, i, j, num1, n1;
  19.             double kc, kpr1; //kc - коэффициент пастели, kpr1 - жесткость пружины.
  20.             double EI;
  21.             int left, right;            //l = 20;
  22.             step = 0.5;
  23.             Console.Write("Введите размер балки (м) : ");
  24.             l = int.Parse(Console.ReadLine());
  25.             Console.Write("Коэффициент пастели балки: ");
  26.             kc = int.Parse(Console.ReadLine());
  27.             Console.Write("Закрепление левого конца балки (0 - шарнирное; 1 - жесткое) : ");
  28.             left = int.Parse(Console.ReadLine());
  29.             Console.Write("Закрепление правого конца балки (0 - шарнирное; 1 - жесткое) : ");
  30.             right = int.Parse(Console.ReadLine());
  31.             nn = l / step;
  32.             n = (int)nn;
  33.             double[] Q = new double[n + 1];
  34.             for (i = 0; i < n + 1; i++)
  35.             {
  36.                 Q[i] = 0;
  37.  
  38.             }
  39.             double lp1, kk, P1;
  40.             int k;
  41.             double l1, l2, lpr1;
  42.             double kkl1, kkl2, kklp1;
  43.             int kl1, kl2, klp1;
  44.             double lq11, lq12, kk1, kk2, Q1;
  45.             int k1, k2;
  46.             //lp1 = 5;
  47.             Console.Write("Первая подпорка находится на (м) от начала балки : ");
  48.             l1 = double.Parse(Console.ReadLine());
  49.             Console.Write("Вторая подпорка находится на (м) от начала балки : ");
  50.             l2 = double.Parse(Console.ReadLine());
  51.             Console.Write("Введите значения точечной нагрузки P (кH) : ");
  52.             P1 = double.Parse(Console.ReadLine());
  53.             Console.Write("Введите где расположена точечная нагрузка (м) от начала балки: ");
  54.             lp1 = double.Parse(Console.ReadLine());
  55.             Console.Write("Введите значения распределенной нагрузки Q (кH) : ");
  56.             Q1 = double.Parse(Console.ReadLine());
  57.             Console.Write("Введите начальное положение распределенной нагрузки (м) от начала: ");
  58.             lq11 = double.Parse(Console.ReadLine());
  59.             Console.Write("Введите конечное положение распределенной нагрузки (м) от начала: ");
  60.             lq12 = double.Parse(Console.ReadLine());
  61.             Console.Write("Пружина, поддерживающая балку находится на (м) от начала: ");
  62.             lpr1 = double.Parse(Console.ReadLine());
  63.             Console.Write("Коэффициент жесткости пружины: ");
  64.             kpr1 = double.Parse(Console.ReadLine());
  65.             kk = lp1 / step;
  66.             k = (int)kk;
  67.             //P1 = 20;
  68.             Q[k] = P1 * step * step * step / 1000;
  69.             //lq11 = 15;
  70.             //lq12 = 18;
  71.             kk1 = lq11 / step;
  72.             k1 = (int)kk1;
  73.             kk2 = lq12 / step;
  74.             k2 = (int)kk2;
  75.             //Q1 = 15;
  76.             for (i = k1; i <= k2; i++)
  77.             {
  78.                 Q[i] = Q1 * step * step * step * step / 1000;
  79.             }
  80.             //Построение массива нагрузок: step - 1 - true. Build successful
  81.             double[] N = new double[n + 1];
  82.             for (i = 0; i < n + 1; i++)
  83.             {
  84.                 N[i] = 0;
  85.             }
  86.             //l2 = 6;
  87.             //lpr1 = 19;
  88.             kkl1 = l1 / step;
  89.             kl1 = (int)kkl1;
  90.             kkl2 = l2 / step;
  91.             kl2 = (int)kkl2;
  92.             kklp1 = lpr1 / step;
  93.             klp1 = (int)kklp1;
  94.             N[kl1] = 999;
  95.             N[kl2] = 999;
  96.             N[klp1] = 999;
  97.             //Построение массива для задания системы уравнений : step - 2 - true. Build successful
  98.  
  99.  
  100.             EI = 15;
  101.             //kc = 1;
  102.             //kpr1 = 0.75;
  103.             double[] CP = new double[n + 1];
  104.             for (i = 0; i < n + 1; i++)
  105.             {
  106.                 if (i == klp1)
  107.                 {
  108.                     CP[i] = kpr1 / EI;
  109.                 }
  110.                 else CP[i] = kc / EI;
  111.             }
  112.             //Построение массива жесткости: step - 3 - true. Build successful
  113.  
  114.             double[] W = new double[n + 1];
  115.             for (i = 0; i < n + 1; i++)
  116.             {
  117.                 W[i] = 9999;
  118.  
  119.             }
  120.             W[0] = 0;
  121.             W[n] = 0;
  122.             W[kl1] = 0;
  123.             W[kl2] = 0;
  124.             //Построение массива W: step - 4 - true. Build successful
  125.  
  126.             //СТРОИМ МАТРИЦУ КОЭФФИЦИЕНТОВ!!!!!!!!!
  127.  
  128.             double[,] DOPa = new double[n + 1, n + 2];
  129.             for (i = 0; i < n + 1; i++)
  130.             {
  131.                 for (j = 0; j < n + 2; j++)
  132.                 {
  133.                     DOPa[i, j] = 0;
  134.  
  135.                 }
  136.             }
  137.             num1 = n + 1;
  138.             for (i = 0; i < n + 1; i++)
  139.             {
  140.                 if (W[i] == 0)
  141.                 {
  142.                     num1--;
  143.                 }
  144.  
  145.  
  146.             }
  147.             for (i = 2; i < n - 1; i++)
  148.             {
  149.                 DOPa[i, i - 2] = 1;
  150.                 DOPa[i, i - 1] = -4;
  151.                 DOPa[i, i] = 6 + CP[i] * step * step * step * step;
  152.                 DOPa[i, i + 1] = -4;
  153.                 DOPa[i, i + 2] = 1;
  154.                 DOPa[i, n + 1] = Q[i];
  155.             }
  156.  
  157.  
  158.             DOPa[1, 0] = -4;
  159.             DOPa[1, 1] = 6 + CP[1] * step * step * step * step;
  160.             DOPa[1, 2] = -4;
  161.             DOPa[1, 3] = 1;
  162.             DOPa[1, n + 1] = Q[1];
  163.             DOPa[n - 1, n - 3] = 1;
  164.             DOPa[n - 1, n - 2] = -4;
  165.             DOPa[n - 1, n - 1] = 6 + CP[n - 1] * step * step * step * step;
  166.             DOPa[n - 1, n] = -4;
  167.             DOPa[n - 1, n + 1] = Q[n - 1];
  168.             //left = 1;
  169.             //right = 0;
  170.             if (left == 1)
  171.             {
  172.                 DOPa[1, 1]++;
  173.             }
  174.             if (left == 0)
  175.             {
  176.                 DOPa[1, 1]--;
  177.             }
  178.             if (right == 1)
  179.             {
  180.                 DOPa[n - 1, n - 1]++;
  181.             }
  182.             if (right == 0)
  183.             {
  184.                 DOPa[n - 1, n - 1]--;
  185.             }
  186.             //СОСТАВИЛИ МАССИВ для коэффициентов: step - 5 - true. Build successful
  187.             //Убираем ненужные строки и столбцы
  188.  
  189.             double[,] DOPa1 = new double[num1, n + 2];
  190.             k = 0;
  191.             for (i = 0; i < n + 1; i++)
  192.             {
  193.                 if (W[i] != 0)
  194.                 {
  195.                     for (j = 0; j < n + 2; j++)
  196.                     {
  197.                         DOPa1[k, j] = DOPa[i, j];
  198.  
  199.                     }
  200.                     k++;
  201.                 }
  202.             }
  203.             //Убрали ненужные строки
  204.  
  205.             double[,] a = new double[num1, num1 + 1];
  206.             k = 0;
  207.             for (j = 0; j < n + 1; j++)
  208.             {
  209.                 if (W[j] != 0)
  210.                 {
  211.                     for (i = 0; i < num1; i++)
  212.                     {
  213.                         a[i, k] = DOPa1[i, j];
  214.  
  215.                     }
  216.                     k++;
  217.                 }
  218.             }
  219.             for (i = 0; i < num1; i++)
  220.             {
  221.                 a[i, num1] = DOPa1[i, n + 1];
  222.             }
  223.  
  224.             //метод гаусса
  225.             n1 = n;
  226.             n = num1;
  227.             double b;
  228.  
  229.             for (i = 0; i < n; i++)
  230.             {
  231.                 k = i;
  232.                 //Проверка на неравенство нулю ведущего элемента
  233.                 //Если он равен нулю, то меняем строки местами
  234.                 if (a[k, k] == 0)
  235.                 {
  236.                     for (j = k; j < n + 1; j++)
  237.                     {
  238.                         b = a[k, j];
  239.                         a[k, j] = a[k + 1, j];
  240.                         a[k + 1, j] = b;
  241.                     }
  242.                 }
  243.                 //Делаем единичный элемент
  244.                 b = a[k, k];
  245.                 for (j = 0; j < n + 1; j++)
  246.                 {
  247.                     a[k, j] = a[k, j] / b;
  248.                 }
  249.  
  250.  
  251.                 for (i = k + 1; i < n; i++)
  252.                 {
  253.                     double y = a[i, k];
  254.                     for (j = 0; j < n + 1; j++)
  255.                     {
  256.  
  257.  
  258.                         double s = a[k, j] * y;
  259.                         double m = a[i, j] - s;
  260.                         a[i, j] = m;
  261.  
  262.  
  263.  
  264.                     }
  265.  
  266.                 }
  267.  
  268.                 i = k;
  269.  
  270.             }
  271.             //Прямой ход закончен
  272.  
  273.  
  274.  
  275.  
  276.  
  277.             for (i = 0; i < n - 1; i++)
  278.             {
  279.                 k = n - 1 - i;
  280.                 for (i = 0; i < k; i++)
  281.                 {
  282.                     double y = a[i, k];
  283.                     for (j = 0; j < n + 1; j++)
  284.                     {
  285.                         double s = a[k, j] * y;
  286.                         double m = a[i, j] - s;
  287.                         a[i, j] = m;
  288.                     }
  289.  
  290.                 }
  291.                 i = n - 1 - k;
  292.             }
  293.  
  294.             //Обратный ход - закончен.
  295.  
  296.             double[] DOPW = new double[n];
  297.  
  298.             //Делаем вывод прогибов.
  299.  
  300.             for (i = 0; i < n; i++)
  301.             {
  302.                 DOPW[i] = a[i, n];
  303.             }
  304.             //Построение итогого массива прогибов.
  305.             k = 0;
  306.             for (i = 0; i < n1 + 1; i++)
  307.             {
  308.                 if (W[i] != 0)
  309.                 {
  310.                     W[i] = DOPW[k];
  311.                     k++;
  312.  
  313.  
  314.                 }
  315.             }
  316.            
  317.             //Построение массива длин.
  318.             double[] X = new double[n1 + 1];
  319.             X[0] = 0;
  320.             for (i = 1; i < n1 + 1; i++)
  321.             {
  322.                 X[i] = X[i - 1] + step;
  323.                
  324.             }
  325.            
  326.             Console.WriteLine();
  327.             Console.Clear();
  328.             Console.Write("Вывод значений прогибов W при конкретных значениях X");
  329.             Console.WriteLine();
  330.  
  331.  
  332.             StreamWriter V = new StreamWriter(@"E:\W.txt");
  333.             for (i = 0; i < n1 + 1; i++)
  334.             {
  335.  
  336.                 k = i + 1;
  337.                 Console.Write("W [ " + i + " ] = " + W[i] + "\t" + " при X = " + X[i] + "\t");
  338.                 Console.WriteLine();
  339.                 V.WriteLine(W[i]);
  340.  
  341.             }
  342.             Console.ReadLine();
  343.             /*
  344.             for (i = 0; i < num1; i++)
  345.             {
  346.             for (j = 0; j < num1 + 1; j++)
  347.  
  348.             {
  349.  
  350.             Console.Write("a [ " + i +" , " + j + " ] = " + a[i , j] + "\t");
  351.                     Console.WriteLine();
  352.  
  353.         }
  354.             }
  355.         Console.ReadLine();*/
  356.         }
  357.     }
  358. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement