- •Введение
- •1 Компоненты Visual C#
- •1.1 Компонент класса TextBox
- •1.2 Компонент класса Label
- •1.3 Компонент класса Button
- •1.4 Компонент класса DataGridView
- •1.5 Компонент класса NumericUpDown
- •2 Примеры выполнения практических заданий
- •2.1 Простейшие алгоритмы
- •2.2 Выражения
- •2.3 Циклы
- •2.4 Одномерные массивы
- •2.5 Матрицы
- •2.6 Строки
- •2.7 Записи и файлы
- •2.8 Функции и процедуры
}
}
Внешний вид и пример работы программы показаны на рисунке 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