Читайте также:
|
|
ЗАДАНИЕ 3 Матрицы
Постановка задачи
Составить программу, которая считывает матрицы из файлов, представляет их в виде таблицы на форме, вычисляет заданное матричное выражение и для выбранной пользователем матрицы вычисляет определитель.
Содержание отчета
1. Постановка задачи для конкретного варианта.
2. Текст клиентского кода программы и графический дизайн форм.
3. Результаты выполнения программы.
Пример программы, вычисляющей матрицу и ее определитель:
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;
namespace Матрицы
{
public partial class Form1: Form
{
//String[] St;
//Класс List<string> - коллекция строк - лист из строк имеет методы
//накопления и преобразования неопределенного количества элементов
List<string> list_st = new List<string>();
string[] St;
Double[,] MatrD, MatrA, MatrB, MatrC, Matr1, Matr2;
int i = 0, j = 0, n = 0;
public Form1()
{
InitializeComponent();
}
//Процедура считывания строк из файла
private void Sc(ref Double[,] Matr)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileStream FS = openFileDialog1.OpenFile() as FileStream;
StreamReader SR = new StreamReader(FS);
dataGridView1.Rows.Clear();
//добавление первой колонки
DataGridViewTextBoxColumn titleColumn = new DataGridViewTextBoxColumn();
//Изменение заголовка колонки
titleColumn.HeaderText = "Titlt" + 1.ToString();
//Выравнивание ширины колонки в соответствии с заданным стилем - AllCells
titleColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
//добавление
dataGridView1.Columns.Add(titleColumn);
list_st.Clear();
while (SR.Peek() > 0)
{ // Считывание строки и добавление колонки (свойство AllowUserToAddRows - False)
list_st.Add(SR.ReadLine());
//dataGridView1
dataGridView1.Rows.Add();
}
St = list_st.ToArray();
n = St.Length;
Matr = new Double[n, n];
for (i = 0; i < n - 1; i++)
{ // Добавление колонки
DataGridViewTextBoxColumn titleColumn1 = new DataGridViewTextBoxColumn();
titleColumn1.HeaderText = "Titlt" + (i + 2).ToString();
//Выравнивание ширины колонки в соответствии с заданным стилем - AllCells
titleColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(titleColumn1);
}
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++)
{
//Заполнение матрицы и таблицы
Matr[i, j] = Convert.ToDouble(aa[j]);
dataGridView1.Rows[i].Cells[j].Value = Matr[i, j];
}
}
SR.Close();
FS.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{ //Матрица A
dataGridView1.Columns.Clear();
Sc(ref MatrA);
}
private void button2_Click(object sender, EventArgs e)
{ //Матрица B
dataGridView1.Columns.Clear();
Sc(ref MatrB);
}
private void button3_Click(object sender, EventArgs e)
{ //Матрица C
dataGridView1.Columns.Clear();
Sc(ref MatrC);
}
private void button4_Click(object sender, EventArgs e)
{ //Матрица (A+B)*C
if ((dataGridView1.Columns.Count < 1) || MatrA == null || MatrB == null || MatrC == null) return;
dataGridView1.Columns.Clear();
//добавление первой колонки
DataGridViewTextBoxColumn titleColumn = new DataGridViewTextBoxColumn();
titleColumn.HeaderText = "Titlt" + 1.ToString();
titleColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(titleColumn);
for (int i = 0; i < n - 1; i++)
{ // Добавление колонки
//dataGridView1.Rows.Clear();
DataGridViewTextBoxColumn titleColumn1 = new DataGridViewTextBoxColumn();
titleColumn1.HeaderText = "Titlt" + (i + 2).ToString();
titleColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(titleColumn1);
}
MatrD = new Double[n, n];
Matr1 = new Double[n, n];
for (i = 0; i < n; i++)
{
dataGridView1.Rows.Add();
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
Matr1[i, j] = MatrA[i, j] + MatrB[i, j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
MatrD[i, j] = 0;
for (int k = 0; k < n; k++)
MatrD[i, j] = MatrD[i, j] + Matr1[i, k] * MatrC[k, j];
dataGridView1.Rows[i].Cells[j].Value = MatrD[i, j];
}
}
}
private void button5_Click(object sender, EventArgs e)
{ // Заполнение второй таблицы
//dataGridView2 = dataGridView1;
//dataGridView1.Rows.Clear();
if (dataGridView1.Columns.Count < 1) return;
dataGridView2.Columns.Clear();
//добавление первой колонки и первой строки
DataGridViewTextBoxColumn titleColumn = new DataGridViewTextBoxColumn();
titleColumn.HeaderText = "Titlt" + 1.ToString();
titleColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView2.Columns.Add(titleColumn);
dataGridView2.Rows.Add();
for (int i = 0; i < n - 1; i++)
{ // Добавление колонки
//dataGridView1.Rows.Clear();
DataGridViewTextBoxColumn titleColumn1 = new DataGridViewTextBoxColumn();
titleColumn1.HeaderText = "Titlt" + (i + 2).ToString();
titleColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView2.Columns.Add(titleColumn1);
// добавление строки
dataGridView2.Rows.Add();
}
// Создание матрицы из второй таблицы
Matr2 = new Double[n, n];
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
dataGridView2.Rows[i].Cells[j].Value = dataGridView1.Rows[i].Cells[j].Value;
Matr2[i, j] = Convert.ToDouble(dataGridView2.Rows[i].Cells[j].Value);
}
}
}
private void button6_Click(object sender, EventArgs e)
{
//Вычисление определителя
textBox1.Clear();
double S = Opred(Matr2, n);
textBox1.Text = "Определитель равен " + Convert.ToString(S);
}
//Функция вычисления определителя
double Opred(double[,] M, int m)
{
if (M == null)
return 0;
Double[,] M2;
M2 = new double[m - 1, m - 1];
int i1 = 0, j1 = 0, k = 0, i = 0, j = 0;
double Opr = 0;
//Тривиальное решение
if (m == 1)
{
return Opr = M[0, 0];
}
for (k = 0; k < m; k++)
{//Разложение по элементам нулевой строки
i1 = 0;
for (i = 0; i < m; i++)
{
j1 = 0;
if (i!= 0) //вычеркивание нулевой строки
{
for (j = 0; j < m; j++)
{
if (j!= k) //вычеркивание k-го стролбца
{
M2[i1, j1] = M[i, j];
j1++;
}
}
i1++;
}
}
// Рекурсивное обращение
Opr = Opr + Math.Pow(-1, k) * M[0, k] * Opred(M2, m - 1);
}
return Opr;
}
private void button7_Click(object sender, EventArgs e)
{
Close();
}
}
}
Варианты заданий вычисления матричного выражения и определителя матрицы
1. ;
2. ;
3. ;
4. ;
5. ;
6. ;
7. ;
8. ;
9. ;
10. ;
11. ;
12. ;
13.
14.
15.
16.
17.
В которых:
; ;
;
openFileDialog1 - для считывания строк из файла
Дата добавления: 2015-08-27; просмотров: 59 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Текст клиентского кода (программы) | | | Предпроектные исследования |