- •Введение
- •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 Функции и процедуры
- •Список литературы
текущего найденного человека */ int min_index = -1;
/* Перебор всех людей */ for (i=0; i<n; i++)
/* Проверка, соответствует ли год рождения i-го человека заданному условию */
if (peoples[i].BirthYear > year)
/* Проверка, были ли ранее найден подходящий человек */ if (min_index == -1)
/* Ранее не был найден подходящий человек. Запоминаем его номер */
min_index = i;
else // Ранее был найден подходящий человек
/* Проверка, имеет ли вновь найденный человек большее количество детей, чем найденный ранее */
if (peoples[i].CountChild > peoples[min_index].CountChild)
min_index = i; // Запоминание номера человека /* Проверка, найден ли подходящий человек */
if (min_index != -1)
{
/* Подходящий человек найден. Вывод данных о найденном человеке */
Find_DGV[0,0].Value = peoples[min_index].LastName; Find_DGV[1,0].Value = peoples[min_index].BirthYear; Find_DGV[2,0].Value = peoples[min_index].CountChild;
}
else
{
/* Подходящий человек не найден. Вывод сообщения, что никто не найден, и очистка оставшихся ячеек */
Find_DGV[0,0].Value = "Не найден"; Find_DGV[1,0].Value = ""; Find_DGV[2,0].Value = "";
}
}
Внешний вид и пример работы программы показаны на рисунке 7.
2.8 Функции и процедуры
Задание: Даны две целочисленные квадратные матрицы А и В произвольных размерностей. Определить, в какой из матриц сумма элементов главной диагонали наибольшая. При реализации программы использовать функцию.
Будем считать, что начальное и минимальное число строк и столбцов матриц равно двум, а максимальное – 10.
26
Рисунок 7 – Внешний вид и пример работы программы, реализующей работу с записями и файлами
Для решения поставленной задачи потребуются компоненты:
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 для ввода матрицы В;
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 |
|
М&атрица А |
|
|
27 |
|
Продолжение таблицы 11
Компонент.Свойство |
Значение |
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)
{
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);
28
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
if (sumA < sumB) Result_TB.Text =
"Сумма элементов главной диагонали больше у матрицы B"; else
Result_TB.Text =
"Суммы элементов главной диагонали матриц А и В равны";
}
Внешний вид и пример работы программы показаны на рисунке 8.
29