161 Приложения
ПРИЛОЖЕНИЕ 1
Текст клиентского кода программы расчета плоской фермы……..91
ПРИЛОЖЕНИЕ 2
Программа расчета плоской рамы…………………………………..107
ПРИЛОЖЕНИЕ 3
Программа расчета потенциального течения жидкости…………..134
ПРИЛОЖЕНИЕ 4
Программа исследования вращения твердого тела………………..149
ПРИЛОЖЕНИЕ 5
Программа расчета условий равновесия системы сил……………154
ПРИЛОЖЕНИЕ 1
Текст клиентского кода программы расчета плоской фермы:
Форма1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Drawing2D;
namespace WindowsFormsAppФерма
{
public partial class Form1 : Form
{
Form2 f2;
List<string> list_st = new List<string>();
string st;
string[] St;
public bool dinamika = false;
public Double[,] MatrCoor, MatrTop;
public double[] q;
public int i = 0, j = 0, n = 0, m = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Сохранение в файл координатной матрицы
n = 0;
for (i = 0; i < dataGridView1.RowCount - 1; i++) n++;
MatrCoor = new double[n, 7];
for (i = 0; i < n; i++)
{
for (j = 0; j < 7; j++)
MatrCoor[i, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream FS= saveFileDialog1.OpenFile() as FileStream;
StreamWriter SR = new StreamWriter(FS);
//dataGridView1.Rows.Add();
for (i = 0; i < n; i++)
{
st = null;
for (j = 0; j < 7; j++)
{
st = st + MatrCoor[i, j].ToString() + " ";
}
SR.WriteLine(st);
}
SR.Close();
FS.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
// Считывание из файла координатной матрицы
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream FSR=openFileDialog1.OpenFile() as FileStream;
StreamReader SRR = new StreamReader(FSR);
dataGridView1.Rows.Clear();
list_st.Clear();
while (SRR.Peek() > 0)
{
list_st.Add(SRR.ReadLine());
//dataGridView1
dataGridView1.Rows.Add();
}
St = list_st.ToArray();
n = St.Length;
MatrCoor = new double[n, 7];
MatrCoor = new Double[n, 7];
for (i = 0; i < n; i++)
{
St[i] = St[i].Replace(".", ","); ;
//Разбиение строки St на подстроки aa
string[] aa = St[i].Split(" \t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
for (j = 0; j < aa.Length; j++)
{
//Заполнение матрицы и таблицы
MatrCoor[i, j] = Convert.ToDouble(aa[j]);
dataGridView1.Rows[i].Cells[j].Value= MatrCoor[i, j];
}
}
SRR.Close();
FSR.Close();
}
}
private void button3_Click(object sender, EventArgs e)
{
// Сохранение в файл топологической матрицы
m = 0;
for (i = 0; i < dataGridView2.RowCount - 1; i++) m++;
MatrTop = new double[m, 5];
for (i = 0; i < m; i++)
{
for (j = 0; j < 5; j++)
MatrTop[i, j] = Convert.ToDouble(dataGridView2.Rows[i].Cells[j].Value);
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream FS =saveFileDialog1.OpenFile() as FileStream;
StreamWriter SR = new StreamWriter(FS);
//dataGridView1.Rows.Add();
for (i = 0; i < m; i++)
{
st = null;
for (j = 0; j < 5; j++)
{
st = st + MatrTop[i, j].ToString() + " ";
}
SR.WriteLine(st);
}
SR.Close();
FS.Close();
}
}
private void button4_Click(object sender, EventArgs e)
{
// Считывание из файла топологической матрицы
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream FSR = openFileDialog1.OpenFile() as FileStream;
StreamReader SRR = new StreamReader(FSR);
dataGridView2.Rows.Clear();
list_st.Clear();
while (SRR.Peek() > 0)
{
list_st.Add(SRR.ReadLine());
//dataGridView1
dataGridView2.Rows.Add();
}
St = list_st.ToArray();
m = St.Length;
MatrTop = new double[m, 5];
MatrTop = new Double[m, 5];
for (i = 0; i < m; i++)
{
St[i] = St[i].Replace(".", ","); ;
//Разбиение строки St на подстроки aa
string[] aa = St[i].Split(" \t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
for (j = 0; j < aa.Length; j++)
{
//Заполнение матрицы и таблицы
MatrTop[i, j] = Convert.ToDouble(aa[j]);
dataGridView2.Rows[i].Cells[j].Value = MatrTop[i, j];
}
}
SRR.Close();
FSR.Close();
}
}
private void button5_Click(object sender, EventArgs e)
{
//Построение
double[] x, y;
Double My = 0, MaxY = 0, Mx = 0, MaxX = 0;
int[] yint, xint;
Bitmap myBmp;
x = new double[n];
y = new double[n];
for (i = 0; i < n; i++)
{
x[i] = MatrCoor[i, 1];
y[i] = MatrCoor[i, 2];
}
if (x == null || y == null) return;
MaxY = 0.001;
MaxX = 0.001;
for ( i = 0; i < n; i++)
{
if (System.Math.Abs(y[i]) > MaxY)
{
MaxY = System.Math.Abs(y[i]); ;
}
if (System.Math.Abs(x[i]) > MaxX)
{
MaxX = System.Math.Abs(x[i]);
}
}
if (MaxY >= MaxX)
MaxX = MaxY;
else
MaxY = MaxX;
My = (pictureBox1.Height) / 1.2 / MaxY;
Mx = (pictureBox1.Width) / 1.2 / MaxX;
yint = new int[n];
xint = new int[n];
for (int i = 0; i < n ; i++)
{
yint[i] = Convert.ToInt32(pictureBox1.Height / 1.1) - Convert.ToInt32(y[i] * My);
xint[i] = Convert.ToInt32(pictureBox1.Width / 10) + Convert.ToInt32(x[i] * Mx);
}
myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics gr1 = Graphics.FromImage(myBmp);
Pen P1 = new Pen(Color.Red, 2);
gr1.DrawRectangle(P1, 1, 1, pictureBox1.Width - 2, pictureBox1.Height - 2);
Pen P2 = new Pen(Color.Green, 2);
Pen P5 = new Pen(Color.Green, 8);
Brush B2 = new SolidBrush(Color.Azure);
int[] Zakx = new int[n];
int[] Zaky = new int[n];
for (i = 0; i < n; i++)
{
Zakx[i] = Convert.ToInt32(MatrCoor[i, 5]);
Zaky[i] = Convert.ToInt32(MatrCoor[i, 6]);
}
for ( i = 0; i < n; i++)
{
//gr1.FillEllipse(B2, xint[i]-4, yint[i]-4,8,8);
//gr1.DrawEllipse(P2, xint[i] - 4, yint[i] - 4, 8, 8);
if (Zakx[i] !=0 || Zaky[i] != 0)
{
gr1.DrawLine(P5, xint[i] - 24, yint[i] - 8,xint[i] + 24, yint[i] - 8);
}
}
Pen P3 = new Pen(Color.Brown, 4);
for (i = 0; i < m; i++)
{
gr1.DrawLine(P3, xint[(int)MatrTop[i, 1] - 1], yint[(int)MatrTop[i, 1] - 1], xint[(int)MatrTop[i, 2] - 1], yint[(int)MatrTop[i, 2] - 1]);
}
for (i = 0; i < n; i++)
{
gr1.FillEllipse(B2, xint[i] - 4, yint[i] - 4, 8, 8);
gr1.DrawEllipse(P2, xint[i] - 4, yint[i] - 4, 8, 8);
}
double Mp = 0,MaxP=0.001,P=0;
double []Px=new double[n];
double[] Py = new double[n];
int[] intPx = new int[n];
int[] intPy = new int[n];
Pen P4 = new Pen(Color.Indigo, 6);
// Стиль пера с наконечниками
P4.SetLineCap(LineCap.Flat, LineCap.ArrowAnchor, DashCap.Flat);
for(i=0;i<n;i++)
{
Px[i]=MatrCoor[i, 3];
Py[i] = MatrCoor[i, 4];
P = Math.Sqrt(Px[i] * Px[i] + Py[i] * Py[i]);
if (MaxP <= P)
MaxP = P;
}
Mp = pictureBox1.Width / 8 / MaxP;
for (i = 0; i < n; i++)
{
intPy[i] = Convert.ToInt32(Py[i] * Mp);
intPx[i] = Convert.ToInt32(Px[i] * Mp);
}
for (i = 0; i < n; i++)
{
if (intPx[i] != 0 || intPy[i] != 0)
{
gr1.DrawLine(P4, xint[i], yint[i], xint[i]+intPx[i], yint[i]-intPy[i]);
}
}
//Построение второго слоя после вычисления перемещений
double[] x1 = new double[n];
double[] y1 = new double[n];
double Md = 1;
// Условие продолжения построений
if (q != null)
{
Md = Convert.ToDouble(textBox1.Text);
for (i = 0; i < 2 * n; i++)
{
if (i % 2 == 0)
{
x1[i/2] = x[i/2] + q[i] * Md;
}
else
{
y1[i / 2] = y[i / 2] + q[i] * Md;
}
}
int [] yint1 = new int[n];
int [] xint1 = new int[n];
for (int i = 0; i < n; i++)
{
yint1[i] = Convert.ToInt32(pictureBox1.Height / 1.1) - Convert.ToInt32(y1[i] * My);
xint1[i] = Convert.ToInt32(pictureBox1.Width / 10) + Convert.ToInt32(x1[i] * Mx);
}
Pen P11 = new Pen(Color.Aqua, 1);
gr1.DrawRectangle(P11, 1, 1, pictureBox1.Width - 2, pictureBox1.Height - 2);
Pen P12 = new Pen(Color.Green, 1);
Pen P15 = new Pen(Color.Green, 2);
Brush B12 = new SolidBrush(Color.Azure);
Pen P13 = new Pen(Color.Red, 2);
for (i = 0; i < m; i++)
{
gr1.DrawLine(P13, xint1[(int)MatrTop[i, 1] - 1], yint1[(int)MatrTop[i, 1] - 1], xint1[(int)MatrTop[i, 2] - 1], yint1[(int)MatrTop[i, 2] - 1]);
}
for (i = 0; i < n; i++)
{
gr1.FillEllipse(B2, xint1[i] - 4, yint1[i] - 4, 8, 8);
gr1.DrawEllipse(P2, xint1[i] - 4, yint1[i] - 4, 8, 8);
}
Pen P14 = new Pen(Color.Blue, 3);
// Стиль пера с наконечниками
P14.SetLineCap(LineCap.Flat, LineCap.ArrowAnchor, DashCap.Flat);
for (i = 0; i < n; i++)
{
intPy[i] = Convert.ToInt32(Py[i] * Mp);
intPx[i] = Convert.ToInt32(Px[i] * Mp);
}
for (i = 0; i < n; i++)
{
if (intPx[i] != 0 || intPy[i] != 0)
{
gr1.DrawLine(P14, xint1[i], yint1[i], xint1[i] + intPx[i], yint1[i] - intPy[i]);
}
}
}
pictureBox1.Image = myBmp;
}
private void button6_Click(object sender, EventArgs e)
{
//Выход
Close();
}
private void button7_Click(object sender, EventArgs e)
{
// Вычисление
// Создание формы 2
f2 = new Form2(this);
f2.Show();
}
private void button8_Click(object sender, EventArgs e)
{
// Вычисление амплитуд перемещений при установившемся режиме
dinamika = true;
button7_Click( sender,e);
dinamika = false;
}
}
}
Форма 2
---------------------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsAppФерма
{
public partial class Form2 : Form
{
//Вычисление матрицы жесткости
Form1 f1;
public double[,] K,K1,Ke,Ke1,T,Tt,TtK,M,Me,Me1,TtM;
public double[] P, P1, u, u1, eps, usilie;
public int[,] A;
public double Ro = 1,w=0;
public Form2(Form1 f1)
{
InitializeComponent();
this.f1 = f1;
Demo();
}
void Demo()
{
//dataGridView1.Rows.Clear();
if (f1.n > 0)
{
for (int i = 0; i < 2 * f1.n - 1; i++)
{ // Добавление колонки
DataGridViewTextBoxColumn titleColumn1 = new DataGridViewTextBoxColumn();
titleColumn1.HeaderText = "Titlt" + (i + 2).ToString();
//Выравнивание ширины колонки в соответствии с заданным стилем - AllCells
titleColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(titleColumn1);
dataGridView1.Rows.Add();
}
}
P = new double[2 * f1.n];
P1 = new double[2 * f1.n];
K = new double[2 * f1.n, 2 * f1.n];
M = new double[2 * f1.n, 2 * f1.n];
K1 = new double[2 * f1.n, 2 * f1.n];
A = new int[f1.m, 5];
for (int i = 0; i < f1.n * 2; i++)
{
P[i] = 0;
if (i % 2 == 0)
P[i] = f1.MatrCoor[i / 2, 3];
else
P[i] = f1.MatrCoor[i / 2, 4];
//dataGridView1.Rows[i].Cells[0].Value = P[i];
}
for (int i = 0; i < f1.m; i++)
{
// Формирование матрицы индексов
A[i, 0] = i + 1;
A[i, 1] = Convert.ToInt32(f1.MatrTop[i, 1]) * 2 - 1;
A[i, 2] = Convert.ToInt32(f1.MatrTop[i, 1]) * 2;
A[i, 3] = Convert.ToInt32(f1.MatrTop[i, 2]) * 2 - 1;
A[i, 4] = Convert.ToInt32(f1.MatrTop[i, 2]) * 2;
}
//Формирование матрицы жесткости и масс
if(f1.dinamika)
w = Convert.ToDouble( f1.textBox2.Text);
for (int ii = 0; ii < f1.m; ii++)
{
Ke = new double[2, 2];
Ke1 = new double[4, 4];
Me = new double[2, 2];
Me1 = new double[4, 4];
T = new double[2, 4];
Tt = new double[4, 2];
TtK = new double[4, 2];
TtM = new double[4, 2];
double x1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 1];
double y1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 2];
double x2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 1];
double y2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 2];
double h = Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
double cosA = (x2 - x1) / h;
double cosB = (y2 - y1) / h;
double EF = f1.MatrTop[ii, 3];
double mm = f1.MatrTop[ii, 4];
T[0, 0] = cosA;
T[0, 1] = cosB;
T[0, 2] = 0;
T[0, 3] = 0;
T[1, 0] = 0;
T[1, 1] = 0;
T[1, 2] = cosA;
T[1, 3] = cosB;
Ke[0, 0] = EF / h;
Ke[1, 1] = EF / h;
Ke[0, 1] = -EF / h;
Ke[1, 0] = -EF / h;
double mmm=mm*h/6;
Me[0, 0] = mmm*2;
Me[1, 1] = mmm*2;
Me[0, 1] = mmm;
Me[1, 0] = mmm;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 4; j++)
Tt[j, i] = T[i, j];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 2; j++)
{
TtK[i, j] = 0;
TtM[i, j] = 0;
for (int k = 0; k < 2; k++)
{
TtK[i, j] = TtK[i, j] + Tt[i, k] * Ke[k, j];
TtM[i, j] = TtM[i, j] + Tt[i, k] * Me[k, j];
}
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
Ke1[i, j] = 0;
Me1[i, j] = 0;
for (int k = 0; k < 2; k++)
{
Ke1[i, j] = Ke1[i, j] + TtK[i, k] * T[k, j];
Me1[i, j] = Me1[i, j] + TtM[i, k] * T[k, j];
}
}
}
for (int i = 1; i <= 4; i++)
{
int ig = A[ii, i];
for (int j = 1; j <= 4; j++)
{
int jg = A[ii, j];
K[ig - 1, jg - 1] = K[ig - 1, jg - 1] + Ke1[i - 1, j - 1];
M[ig - 1, jg - 1] = M[ig - 1, jg - 1] + Me1[i - 1, j - 1];
}
}
}
//Копирование матрицы жесткости в K1
for (int i = 0; i < f1.n * 2; i++)
for (int j = 0; j < f1.n * 2; j++)
{
K1[i, j] = K[i, j];
//dataGridView1.Rows[i].Cells[j].Value = K1[i, j];
}
//Добавление динамической составляющей
for (int i = 0; i < f1.n * 2; i++)
for (int j = 0; j < f1.n * 2; j++)
{
K1[i, j] = K[i, j]-w*w*M[i,j];
//dataGridView1.Rows[i].Cells[j].Value = K1[i, j];
}
for (int i = 0; i < f1.n; i++)
{
if (f1.MatrCoor[i , 5] > 0)
{
for (int j = 0; j < f1.n * 2; j++)
{
K1[2*i, j] = 0;
}
K1[2 * i, 2 * i] = Ro * K[2 * i, 2 * i];
}
if (f1.MatrCoor[i , 6] > 0)
{
for (int j = 0; j < f1.n * 2; j++)
{
K1[2*i+1, j] = 0;
}
K1[2 * i + 1, 2 * i + 1] = Ro * K[2 * i + 1, 2 * i + 1];
}
}
for (int i = 0; i < f1.n * 2; i++)
{
P1[i] = P[i];
//dataGridView1.Rows[i].Cells[0].Value = P1[i];
}
int KS = 0;
ClassSIMQ S = new ClassSIMQ();
S.SIMQ(K1,ref P1, f1.n*2, ref KS);
label2.Text = "Код ошибки равен "+KS.ToString();
f1.q=new double[f1.n*2];
f1.q = P1;
//Реакции и узловые внешние силы
double[] D = new double[f1.n * 2];
for (int i = 0; i < f1.n * 2; i++)
{
D[i] = 0;
for (int j = 0; j < f1.n * 2; j++)
{
D[i]=D[i]+K[i,j]*P1[j];
}
}
//Проверка
double[] D1 = new double[f1.n * 2];
for (int i = 0; i < f1.n * 2; i++)
{
D1[i] = -P[i];
for (int j = 0; j < f1.n * 2; j++)
{
D1[i] = D1[i] + K1[i, j] * P1[j];
}
}
int signal = 0;
if (f1.radioButton1.Checked) signal = 1;
if (f1.radioButton2.Checked) signal = 2;
if (f1.radioButton3.Checked) signal = 3;
switch (signal)
{
case 1:
//Вывод матрицы жесткости в таблицу
for (int i = 0; i < f1.n * 2; i++)
for (int j = 0; j < f1.n * 2; j++)
{
//K1[i, j] = K[i, j];
dataGridView1.Rows[i].Cells[j].Value = K1[i, j];
}
label1.Text = " Матрица жесткости";
break;
case 2:
for (int i = 0; i < f1.n * 2; i++)
{
dataGridView1.Rows[i].Cells[0].Value = P1[i];
}
for (int i = 0; i < f1.n * 2; i++)
{
dataGridView1.Rows[i].Cells[1].Value = D[i];
}
label1.Text = " Перемещения узлов и внешние силы";
break;
case 3:
for (int i = 0; i < f1.n * 2; i++)
{
dataGridView1.Rows[i].Cells[1].Value = D1[i];
}
label1.Text = " Проверка равновесия узлов";
break;
default:
String Str = "Выберите результат вычислений";
//Вывод сообщения
MessageBox.Show(Str, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
private void button1_Click(object sender, EventArgs e)
{
//Напряженя и деформации
// dataGridView2.Rows.Clear();
if (f1.n > 0)
{
for (int i = 0; i < f1.m - 1; i++)
{ // Добавление колонки
DataGridViewTextBoxColumn titleColumn1 = new DataGridViewTextBoxColumn();
titleColumn1.HeaderText = "Элемент " + (i + 2).ToString();
//Выравнивание ширины колонки в соответствии с заданным стилем - AllCells
titleColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView2.Columns.Add(titleColumn1);
}
for (int i = 0; i < 1; i++)
dataGridView2.Rows.Add();
}
eps=new double[f1.m];
usilie=new double[f1.m];
for (int ii = 0; ii < f1.m; ii++)
{
T = new double[2, 4];
double x1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 1];
double y1 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 1]) - 1, 2];
double x2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 1];
double y2 = f1.MatrCoor[Convert.ToInt32(f1.MatrTop[ii, 2]) - 1, 2];
double h = Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
double cosA = (x2 - x1) / h;
double cosB = (y2 - y1) / h;
double EF = f1.MatrTop[ii, 3];
T[0, 0] = cosA;
T[0, 1] = cosB;
T[0, 2] = 0;
T[0, 3] = 0;
T[1, 0] = 0;
T[1, 1] = 0;
T[1, 2] = cosA;
T[1, 3] = cosB;
u1 = new double[4];
u1[0] = P1[A[ii, 1]-1];
u1[1] = P1[A[ii, 2]-1];
u1[2] = P1[A[ii, 3]-1];
u1[3] = P1[A[ii, 4]-1];
u = new double[2];
for (int i = 0; i < 2; i++)
{
u[i] = 0;
for (int k = 0; k < 4; k++)
u[i] = u[i] + T[i, k] * u1[k];
}
double[] dNdx = new double[2];
dNdx[0] = -1 / h;
dNdx[1] = 1 / h;
eps[ii] = 0;
for (int k = 0; k < 2; k++)
eps[ii] = eps[ii] + dNdx[k]*u[k] ;
usilie[ii] = EF * eps[ii];
}
for (int i = 0; i < f1.m; i++)
{
dataGridView2.Rows[0].Cells[i].Value = eps[i];
dataGridView2.Rows[1].Cells[i].Value = usilie[i];
}
}
}
}
Класс ClassSIMQ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsAppФерма
{
class ClassSIMQ
{
double[] A,B;
public void SIMQ(double[,] K,ref double[] P, int N,ref int KS)
{
A = new double[N * N+1];
B = new double[N+1];
int sd=0;
for (int i = 0; i < N; i++)
{
B[i + 1] = P[i];
for (int j = 0; j < N; j++)
{
sd++;
A[sd] = K[j,i];
}
}
int JY,IT,J,IJ,IMAX=0,I,I1,k,I2,IQS,IX,JX,IXJX,JJX,IXJ,NY,IB,IA,IC;
double TOL = 0,BIGA=0,SAVE;
KS = 0;
int JJ = -N;
for ( J = 1; J <= N; J++)
{
JY = J + 1;
JJ = JJ + N + 1;
BIGA = 0.0;
IT = JJ - J;
for (I = J; I <= N; I++)
{
IJ = IT + I;
if (Math.Abs(BIGA) - Math.Abs(A[IJ])<0)
{
BIGA = A[IJ];
IMAX = I;
}
}//30
if (Math.Abs(BIGA) - TOL <= 0)
{
KS = 1;
return;
}
I1 = J + N * (J - 2);
IT = IMAX - J;
for (k = J; k <= N; k++)
{
I1 = I1 + N;
I2 = I1 + IT;
SAVE = A[I1];
A[I1] = A[I2];
A[I2] = SAVE;
A[I1] = A[I1] / BIGA;
}//50
SAVE = B[IMAX];
B[IMAX] = B[J];
B[J] = SAVE / BIGA;
if ((J - N) == 0)
{
break;
}
IQS = N * (J - 1);
for (IX = JY; IX <= N; IX++)
{
IXJ = IQS + IX;
IT = J - IX;
for (JX = JY; JX <= N; JX++)
{
IXJX = N * (JX - 1) + IX;
JJX = IXJX + IT;
A[IXJX] = A[IXJX] - A[IXJ] * A[JJX];
}
B[IX] = B[IX] - B[J] * A[IXJ];
}
}//65
NY = N - 1;
IT = N * N;
for (J = 1; J <= NY; J++)
{
IA = IT - J;
IB = N - J;
IC = N;
for (k = 1; k <= J; k++)
{
B[IB] = B[IB] - A[IA] * B[IC];
IA = IA - N;
IC = IC - 1;
}
}//80
for (int i = 0; i < N; i++)
{
P[i] = B[i + 1];
}
}
}
}
Экранные формы:
Форма 1.
Форма 2.
ПРИЛОЖЕНИЕ 2