- •Введение
- •1 Компоненты Visual C#
- •1.1 Компонент класса GroupBox
- •1.2 Компонент класса RadioButton
- •1.3 Компонент класса CheckBox
- •1.4 Компонент класса ListBox
- •1.5 Компонент класса Form
- •1.6 Компонент класса PictureBox
- •1.7 Компонент класса Timer
- •1.8 Компонент класса MenuStrip
- •1.9 Компоненты классов ToolStrip и ToolStripButton
- •1.10 Компоненты классов StatusStrip и ToolStripStatusLabel
- •1.11 Компоненты классов OpenFileDialog и SaveFileDialog
- •1.12 Компонент класса TreeView
- •2 Примеры выполнения практических заданий
- •2.1 Стандартные алгоритмы
- •2.2 Элементы выбора
- •2.3 Простейшие классы
- •2.4 Графика
- •2.5 Диалоговые окна
- •2.6 Комплексное задание
- •2.7 Наследование
- •2.8 Древовидные структуры
- •Список литературы
2 Примеры выполнения практических заданий
2.1 Стандартные алгоритмы
Задание: Дана целочисленная квадратная матрица А. Получить массив B, i-ый элемент которого содержит среднее значение элементов i-ой строки матрицы A. Отсортировать массив B по возрастанию1.
Будем считать, что начальное и минимально число строк и столбцов матрицы равно двум, а максимальное – 10.
Для решения поставленной задачи потребуются компоненты:
Count_L класса Label для подписи компонента Count_NUD;
Count_NUD класса NumericUpDown для задания размерности матрицы А;
Matr_L класса Label для подписи компонента Matr_DGV;
Matr_DGV класса DataGridView для ввода матрицы A;
Calc_B класса Button для активизации расчета;
Mas_L класса Label для подписи компонента Mas_DGV;
Mas_DGV класса DataGridView для вывода массива В.
Установим следующие значения свойств компонентов (таблица 1):
Таблица 1 – Значения свойств компонентов для примера выполнения задания по реализации стандартных алгоритмов
Компонент.Свойство |
Значение |
Count_L.Text |
Ра&змер исходной матрицы |
Count_NUD.Minimum |
2 |
|
|
Count_NUD.Maximum |
10 |
|
|
Count_NUD.Value |
2 |
|
|
Matr_L.Text |
Исходная матри&ца |
Matr_DGV.AllowUserToAddRows |
false |
|
|
Matr_DGV.AllowUserToDeleteRows |
false |
|
|
Matr_DGV.ColumnHeadersVisible |
false |
|
|
Matr_DGV.RowHeadersVisible |
false |
|
|
Calc_B.Text |
Рас&чет |
Mas_L.Text |
Полученный ма&ссив |
Mas_DGV.AllowUserToAddRows |
false |
|
|
Mas_DGV.AllowUserToDeleteRows |
false |
|
|
Mas_DGV.ColumnHeadersVisible |
false |
|
|
Mas_DGV.RowHeadersVisible |
false |
|
|
Mas_DGV.ReadOnly |
true |
|
|
1 Требования к заданиям по используемым компонентам не приводятся
14
Опишем событие Load формы для задания начального количества строк и столбцов:
private void Form1_Load(object sender, EventArgs e)
{
Matr_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value); Matr_DGV.RowCount = Convert.ToInt32(Count_NUD.Value);
/* Размерность матрицы и количество столбцов массива одинаковые */
Mas_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value); Mas_DGV.RowCount = 1;
}
Опишем событие ValueChanged компонента Count_NUD:
private void Count_NUD_ValueChanged(object sender, EventArgs e)
{
Matr_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value); Matr_DGV.RowCount = Convert.ToInt32(Count_NUD.Value); Mas_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value);
end;
Опишем событие Click кнопки Calc_B1:
private void Calc_B_Click(object sender, EventArgs e)
{
double[] mas = new double[Mas_DGV.ColumnCount]; int[,] matr = new int[Matr_DGV.RowCount,
Matr_DGV.ColumnCount];
int i,j;
/* Заполнение матрицы */
for (i=0; i<Matr_DGV.RowCount; i++)
for (j=0; j<Matr_DGV.ColumnCount; j++)
matr[i,j] = Convert.ToInt32(Matr_DGV[j,i].Value); /* Перебор строк матрицы */
for (i=0; i<Matr_DGV.RowCount; i++)
{
/* Для каждой строки находится сумма ее элементов */ mas[i] = 0;
for (j=0; j<Matr_DGV.ColumnCount; j++) mas[i] += matr[i,j];
/* Для нахождения среднего сумма элементов строки делится на их количество */
mas[i] /= Matr_DGV.ColumnCount;
}
/* Сортировка массива */ i = 0;
1 Реализации алгоритмов, приводимые в примерах, не всегда оптимальны, так как направлены на раскрытие механизмов работы с компонентами.
15
while (i < Matr_DGV.ColumnCount-1) if (mas[i] > mas[i+1])
{
double temp = mas[i]; mas[i] = mas[i+1]; mas[i+1] = temp;
if (i > 0) i--;
else i++;
}
else i++;
/* Вывод массива */
for (i=0; i<Matr_DGV.ColumnCount; i++) Mas_DGV[i,0].Value = mas[i];
}
Внешний вид1 и пример работы программы показаны на рисунке 2.
Рисунок 2 – Внешний вид и пример работы программы, реализующей стандартные алгоритмы
2.2 Элементы выбора
Задание: Дана целочисленная квадратная матрица A размером n. Получить матрицу B путем замены кратных двум, трем, четырем элементов матрицы A в любой комбинации на количество положительных, отрицательных или нулевых элементов матрицы A.
Будем считать, что начальное и минимально число строк и столбцов матриц равно двум, а максимальное – 10.
1 Здесь и далее для получения внешнего вида, показанного на рисунках, необходима настройка еще ряда свойств компонентов, изучение которых не предусматривается в рамках данных занятий.
16
Для решения поставленной задачи потребуются компоненты:
Count_L класса Label для подписи компонента Count_NUD;
Count_NUD класса NumericUpDown для задания размерности матриц;
MatrA_L класса Label для подписи компонента MatrA_DGV;
MatrA_DGV класса DataGridView для ввода матрицы A;
MatrB_L класса Label для подписи компонента MatrB_DGV;
MatrB_DGV класса DataGridView для вывода матрицы B;
Change_GB класса GroupBox для группировки компонентов выбора за-
меняемых элементов;
Div2_CB класса CheckBox для организации выбора необходимости замены элементов, кратных двум;
Div3_CB класса CheckBox для организации выбора необходимости замены элементов, кратных трем;
Div4_CB класса CheckBox для организации выбора необходимости замены элементов, кратных четырем;
Count_GB класса GroupBox для группировки компонентов указания типа подсчета количества элементов;
Plus_RB класса RadioButton для выбора подсчета количества положительных элементов;
Minus_RB класса RadioButton для выбора подсчета количества отрицательных элементов;
Zero_RB класса RadioButton для выбора подсчета количества нулевых элементов;
Calc_B класса Button для активизации расчета.
Установим следующие значения свойств компонентов (таблица 2):
Таблица 2 – Значения свойств компонентов для примера выполнения задания с использованием компонентов выбора
Компонент.Свойство |
Значение |
Count_L.Text |
Ра&змер исходной матрицы |
Count_NUD.Minimum |
2 |
|
|
Count_NUD.Maximum |
10 |
|
|
Count_NUD.Value |
2 |
|
|
MatrA_L.Text |
Исходная &матрица |
MatrA_DGV.AllowUserToAddRows |
false |
|
|
MatrA_DGV.AllowUserToDeleteRows |
false |
|
|
MatrA_DGV.ColumnHeadersVisible |
false |
|
|
MatrA_DGV.RowHeadersVisible |
false |
|
|
MatrB_L.Text |
П&олученная матрица |
MatrB_DGV.AllowUserToAddRows |
false |
|
|
MatrB_DGV.AllowUserToDeleteRows |
false |
|
|
17
Продолжение таблицы 2
Компонент.Свойство |
Значение |
MatrB_DGV.ColumnHeadersVisible |
false |
|
|
MatrB_DGV.RowHeadersVisible |
false |
|
|
MatrB_DGV.ReadOnly |
true |
|
|
Change_GB.Text |
Замена элементов |
Div2_CB.Text |
кратных &двум |
Div3_CB.Text |
кратных &трем |
Div4_CB.Text |
кратных &четырем |
Count_GB.Text |
На количество элементов |
Plus_RB.Text |
поло&жительных |
Plus_RB.Checked |
true |
|
|
Minus_RB.Text |
отри&цательных |
Zero_RB.Text |
н&улевых |
Calc_B.Text |
Расч&ет |
Опишем событие Load формы для задания начального количества строк и столбцов:
private void Form1_Load(object sender, EventArgs e)
{
/* Размер матриц одинаков, поэтому установка количества строк и столбцов осуществляется у обеих матриц */ MatrA_DGV.RowCount = Convert.ToInt32(Count_NUD.Value);
MatrA_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value); MatrB_DGV.RowCount = Convert.ToInt32(Count_NUD.Value); MatrB_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value);
}
Опишем событие ValueChanged компонента Count_NUD:
private void Count_NUD_ValueChanged(object sender, EventArgs e)
{
MatrA_DGV.RowCount = Convert.ToInt32(Count_NUD.Value); MatrA_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value); MatrB_DGV.RowCount = Convert.ToInt32(Count_NUD.Value); MatrB_DGV.ColumnCount = Convert.ToInt32(Count_NUD.Value);
}
Опишем событие Click кнопки Calc_B:
private void Calc_B_Click(object sender, EventArgs e)
{
int[,] matr = new int[MatrA_DGV.RowCount, MatrA_DGV.ColumnCount];
int i,j;
/* Заполнение матрицы */
18
for (i=0; i<MatrA_DGV.RowCount; i++)
for (j=0; j<MatrA_DGV.ColumnCount; j++)
matr[i,j] = Convert.ToInt32(MatrA_DGV[j,i].Value);
/* Подсчет количества указанных пользователем элементов */ int count = 0;
for (i=0; i<MatrA_DGV.RowCount; i++)
for (j=0; j<MatrA_DGV.ColumnCount; j++)
/* Элемент требует учета, если: "он положительный и пользователь
выбрал учет положительных элементов или он отрицательный и пользователь выбрал учет отрицательных элементов или он нулевой и пользователь выбрал учет нулевых элементов" */
if ((matr[i,j] > 0 && Plus_RB.Checked) || (matr[i,j] < 0 && Minus_RB.Checked) || (matr[i,j] == 0 && Zero_RB.Checked))
count++;
/* Замена элементов */
for (i=0; i<MatrA_DGV.RowCount; i++)
for (j=0; j<MatrA_DGV.ColumnCount; j++)
/* Элемент требует замены, если: "он ..." */ if ((matr[i,j]%2 == 0 && Div2_CB.Checked) || (matr[i,j]%3 == 0 && Div3_CB.Checked) ||
(matr[i,j]%4 == 0 && Div4_CB.Checked)) matr[i,j] = count;
/* Вывод матрицы */
for (i=0; i<MatrA_DGV.RowCount; i++)
for (j=0; j<MatrA_DGV.ColumnCount; j++) MatrB_DGV[j,i].Value = matr[i,j];
}
Внешний вид и пример работы программы показаны на рисунке 3.
Рисунок 3 – Внешний вид и пример работы программы, использующей компоненты выбора
19