clientSocket = new TcpClient();
clientSocket.Connect(textBox2.Text, 65000);
После подключения к серверу, данные передаются на сервер с помощью данного фрагмента кода.
NetworkStream networkStream = clientSocket.GetStream();
matrix = new Matrix(); //создаем матрицу
matrix.ReadFromForm(dataGridView1);//cчитываем данные из таблицы на форме
string data = matrix.ConvertToString();//конвертируем матрицу в строку
BinaryWriter binWr = new BinaryWriter(networkStream);
binWr.Write(data);//посылает поток networkStream на сервер
После отправки данных на сервер, клиент ожидает получения результатов.
BinaryReader binRead = new BinaryReader(networkStream);
string receivedData = binRead.ReadString(); //cчитываем данные с сервера
label1.Text = "Ранг: " + receivedData;//записываем ранг в label1
Алгоритм нахождения обратной матрицы методом гаусса
Основной смысл: В одну матрицу записывают матрицу А и единичную матрицу Е т.е. составляют расширенную матрицу (А|E). После этого с помощью элементарных преобразований добиваются того, чтобы матрица слева от черты станет единичной, тогда расширенная матрица примет вид (Е|А-1).
Алгоритм, использованный в данной программе, проводит преобразование в три этапа.
- Переход к верхнетреугольной матрице.
- Переход к диагональной матрице.
- Переход к единичной матрице.
Пример:
# - некоторое числовое значение.
Исходная матрица
Матрица после первого преобразования
Матрица после второго преобразования
Матрица после третьего преобразования
Листинг программы клиента
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace klient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
TcpClient clientSocket; //объект для передачи данных
Matrix matrix;
private void Form1_Load(object sender, EventArgs e) { }
private void button1_Click(object sender, EventArgs e)
{
clientSocket = new TcpClient();
clientSocket.Connect(textBox2.Text, 65000);//соединяется с 65000ым портом
NetworkStream networkStream = clientSocket.GetStream();// объект для cоздания потока
matrix = new Matrix(); //создаем матрицу
matrix.ReadFromForm(dataGridView1);//cчитываем данные из таблицы на форме
string data = matrix.ConvertToString();//конвертируем матрицу в строку
BinaryWriter binWr = new BinaryWriter(networkStream); //объект для записи потока
binWr.Write(data);//посылает поток networkStream на сервер
//receive
BinaryReader binRead = new BinaryReader(networkStream); //объект для чтения потока
string receivedData = binRead.ReadString(); //cчитываем данные с сервера
label1.Text = "Ранг: " + receivedData;//записываем ранг в label1
}
private void button2_Click(object sender, EventArgs e)
{
int count = Convert.ToInt32(textBox1.Text);
dataGridView1.RowHeadersVisible = false;
dataGridView1.ColumnCount = count;
dataGridView1.RowCount = count;
for (int i = 0; i < count; i++)
{
dataGridView1.Columns[i].Width = 20;
}
}
}
}
namespace klient
{
class Matrix
{
private double[,] matrix;
public double this[int i, int j]
{
get { return matrix[i, j]; }
set { matrix[i, j] = value; }
}
public void ReadFromForm(DataGridView grid)
{
matrix = new double[grid.RowCount, grid.ColumnCount];
int i, j;
for (i = 0; i < matrix.GetLength(0); i++)
for (j = 0; j < matrix.GetLength(1); j++)
{
matrix[i, j] = Convert.ToInt32(grid[j, i].Value);
}
}
public string ConvertToString()
{
string data = "";
int i, j;
for (i = 0; i < matrix.GetLength(0); i++)
{
data += ";";
for (j = 0; j < matrix.GetLength(1); j++)
{
data += matrix[i, j].ToString() + " ";
}
}
return data;
}
}
}
Листингпрограммысервера
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.