Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в среде Visual C# (Часть 1).pdf
Скачиваний:
38
Добавлен:
27.05.2015
Размер:
1.09 Mб
Скачать

}

}

Внешний вид и пример работы программы показаны на рисунке 7.

Рисунок 7 – Внешний вид и пример работы программы, реализующей работу с записями и файлами

2.8 Функции и процедуры

Задание: Даны две целочисленные квадратные матрицы А и В произвольных размерностей. Определить, в какой из матриц сумма элементов главной диагонали наибольшая. При реализации программы использовать функцию.

Будем считать, что начальное и минимальное число строк и столбцов матриц равно двум, а максимальное – 10.

Для решения поставленной задачи потребуются компоненты:

CountA_L класса Label для подписи компонента CountA_NUD;

CountA_NUD класса NumericUpDown для задания размерности матри-

цы А;

MatrA_L класса Label для подписи компонента MatrA_DGV;

MatrA_DGV класса DataGridView для ввода матрицы А;

CountB_L класса Label для подписи компонента CountB_NUD;

CountB_NUD класса NumericUpDown для задания размерности матри-

цы В;

MatrB_L класса Label для подписи компонента MatrB_DGV;

MatrB_DGV класса DataGridView для ввода матрицы В;

26

Calc_B класса Button для активизации расчета;

Result_L класса Label для подписи компонента Result_TB;

Result_TB класса TextBox для вывода результата.

Установим следующие значения свойств компонентов (таблица 11);

Таблица 11 – Значения свойств компонентов для примера выполнения задания по работе с функциями или процедурами

Компонент.Свойство

Значение

CountA_L.Text

Размерность матрицы &А

CountA_NUD.Minimum

2

 

 

CountA_NUD.Maximum

10

CountA_NUD.Value

2

MatrA_L.Text

М&атрица А

MatrA_DGV.AllowUserToAddRows

false

MatrA_DGV.AllowUserToDeleteRows

false

MatrA_DGV.ColumnHeadersVisible

false

 

 

MatrA_DGV.RowHeadersVisible

false

 

 

CountB_L.Text

Размерность матрицы &В

CountB_NUD.Minimum

2

CountB_NUD.Maximum

10

CountB_NUD.Value

2

MatrB_L.Text

Ма&трица В

MatrB_DGV.AllowUserToAddRows

false

MatrB_DGV.AllowUserToDeleteRows

false

 

 

MatrB_DGV.ColumnHeadersVisible

false

MatrB_DGV.RowHeadersVisible

false

Calc_B.Text

Рас&чет

Result_L.Text

Р&езультат

Опишем событие Load формы для задания начального количества строк и столбцов в таблицах:

private void Form1_Load(object sender, EventArgs e)

{

/* Т.к. матрицы квадратные, то одновременно надо изменять

и количество строк, и количество столбцов} MatrA_DGV.RowCount = Convert.ToInt32(CountA_NUD.Value); MatrA_DGV.ColumnCount = Convert.ToInt32(CountA_NUD.Value); MatrB_DGV.RowCount = Convert.ToInt32(CountB_NUD.Value); MatrB_DGV.ColumnCount = Convert.ToInt32(CountB_NUD.Value);

}

Опишем событие ValueChanged компонента CountA_NUD:

private void CountA_NUD_ValueChanged(object sender, EventArgs e)

{

27

MatrA_DGV.RowCount = Convert.ToInt32(CountA_NUD.Value); MatrA_DGV.ColumnCount = Convert.ToInt32(CountA_NUD.Value);

}

Опишем событие ValueChanged компонента CountB_NUD:

private void CountB_NUD_ValueChanged(object sender, EventArgs e)

{

MatrB_DGV.RowCount = Convert.ToInt32(CountB_NUD.Value); MatrB_DGV.ColumnCount = Convert.ToInt32(CountB_NUD.Value);

}

Опишем функцию подсчета суммы диагональных элементов матрицы, которая в качестве параметрa будет принимать саму матрицу. Функция должна быть описана в классе формы.

private int SumDiag(int[,] matr)

{

int res = 0;

for (int i=matr.GetLowerBound(0); i<=matr.GetUpperBound(0); i++)

res += matr[i,i]; return res;

}

Опишем событие Click кнопки Calc_B:

private void Calc_B_Click(object sender, EventArgs e)

{

int i,j;

int[,] matrA = new int[MatrA_DGV.ColumnCount, MatrA_DGV.RowCount];

int[,] matrB = new int[MatrB_DGV.ColumnCount, MatrB_DGV.RowCount];

/* Заполнение матрицы A */

for (i=0; i<MatrA_DGV.ColumnCount; i++) for (j=0; j<MatrA_DGV.RowCount; j++)

matrA[i,j] = Convert.ToInt32(MatrA_DGV[i,j].Value); /* Заполнение матрицы B */

for (i=0; i<MatrB_DGV.ColumnCount; i++) for (j=0; j<MatrB_DGV.RowCount; j++)

matrB[i,j] = Convert.ToInt32(MatrB_DGV[i,j].Value); /* Расчет суммы для матрицы A */

int sumA = SumDiag(matrA);

/* Расчет суммы для матрицы B */ int sumB = SumDiag(matrB);

/* Сравнение сумм и вывод результата */ if (sumA > sumB)

Result_TB.Text =

"Сумма элементов главной диагонали больше у матрицы А";

else

28

if (sumA < sumB) Result_TB.Text =

"Сумма элементов главной диагонали больше у матрицы B"; else

Result_TB.Text =

"Суммы элементов главной диагонали матриц А и В равны";

}

Внешний вид и пример работы программы показаны на рисунке 8.

Рисунок 8 – Внешний вид и пример работы программы, использующей функции или процедуры

29