- •Введение
- •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 Функции и процедуры
2.4 Одномерные массивы
Задание: Преобразовать одномерный целочисленный массив путем умножения всех его элементов на элемент с максимальным значением.
Для решения поставленной задачи потребуются компоненты:
Source_L класса Label для подписи компонента Source_TB;
Source_TB класса TextBox для ввода исходного массива;
Dest_L класса Label для подписи компонента Dest_TB;
Dest_TB класса TextBox для вывода преобразованного массива;
Calc_B класса Button для активизации расчета.
Установим следующие значения свойств компонентов (таблица 7);
Таблица 7 – Значения свойств компонентов для примера выполнения задания по работе с одномерными массивами
Компонент.Свойство |
Значение |
Source_L.Text |
&Исходный массив |
Source_TB.Multiline |
true |
|
|
Source_TB.ScrollBars |
Vertical |
|
|
Dest_L.Text |
&Преобразованный массив |
Dest_TB.Multiline |
true |
|
|
Dest_TB.ReadOnly |
true |
Dest_TB.ScrollBars |
Vertical |
Calc_B.Text |
П&реобразовать |
Опишем событие Click кнопки Calc_B:
private void Calc_B_Click(object sender, EventArgs e)
{
/* Определение количества элементов массива */ int count = Source_TB.Lines.Length;
int[] mas = new int[count]; int i;
/* Заполнение массива */ for (i=0; i<count; i++)
mas[i] = Convert.ToInt32(Source_TB.Lines[i]); /* Поиск максимального значения */
int max = mas[0];
for (i=1; i<count; i++) if (max < mas[i])
max = mas[i];
/* Преобразование массива */ for (i=0; i<count; i++)
mas[i] *= max;
/* Вывод результата */
Dest_TB.Clear(); // Удаление старых строк
16
for (i=0; i<count; i++)
Dest_TB.AppendText(mas[i] + "\n"); // Добавление строк
}
Внешний вид и пример работы программы показаны на рисунке 4.
Рисунок 4 – Внешний вид и пример работы программы, реализующей обработку одномерных массивов
2.5 Матрицы
Задание: Составить программу определения индексов минимального элемента прямоугольной целочисленной матрицы A, имеющей n строк и m столбцов (значения всех элементов различны).
Будем считать, что начальное и минимально число строк и столбцов матрицы равно двум, а максимальное – 10.
Для решения поставленной задачи потребуются компоненты:
Source_L класса Label для подписи компонента Source_DGV;
Source_DGV класса DataGridView для ввода исходной матрицы;
Rows_L класса Label для подписи компонента Rows_NUD;
Rows_NUD класса NumericUpDown для задания количества строк n;
Cols_L класса Label для подписи компонента Cols_NUD;
Cols_NUD класса NumericUpDown для задания количества столбцов m;
Calc_B класса Button для активизации расчета;
FindRow_L класса Label для подписи компонента FindRow_TB;
FindRow_TB класса TextBox для вывода индекса строки найденного
элемента;
FindCol_L класса Label для подписи компонента FindCol_TB;
17
FindCol_TB класса TextBox для вывода индекса столбца найденного элемента.
Установим следующие значения свойств компонентов (таблица 8).
Таблица 8 – Значения свойств компонентов для примера выполнения задания по работе с матрицами
Компонент.Свойство |
Значение |
Source_L.Text |
&Исходная матрица |
Source_DGV.AllowUserToAddRows |
false |
|
|
Source_DGV.AllowUserToDeleteRows |
false |
Source_DGV.ColumnHeadersVisible |
false |
Source_DGV.RowHeadersVisible |
false |
Rows_L.Text |
Число &строк |
Rows_NUD.Minimum |
2 |
|
|
Rows_NUD.Maximum |
10 |
|
|
Rows_NUD.Value |
2 |
Cols_L.Text |
Число с&толбцов |
Cols_NUD.Minimum |
2 |
Cols_NUD.Maximum |
10 |
Cols_NUD.Value |
2 |
|
|
Calc_B.Text |
Рас&чет |
FindRow_L.Text |
Номер стро&ки найденного элемента |
FindCol_L.Text |
Номер столб&ца найденного элемента |
FindRow_TB.ReadOnly |
true |
FindCol_TB.ReadOnly |
true |
Опишем событие Load формы для задания начального значения количества строк и столбцов в компоненте Source_DGV:
private void Form1_Load(object sender, EventArgs e)
{
Source_DGV.RowCount = Convert.ToInt32(Rows_NUD.Value); Source_DGV.ColumnCount = Convert.ToInt32(Cols_NUD.Value);
}
Опишем событие ValueChanged компонента Rows_NUD:
private void Rows_NUD_ValueChanged(object sender, EventArgs e)
{
Source_DGV.RowCount = Convert.ToInt32(Rows_NUD.Value);
}
Опишем событие ValueChanged компонента Cols_NUD:
private void Cols_NUD_ValueChanged(object sender, EventArgs e)
{
Source_DGV.ColumnCount = Convert.ToInt32(Cols_NUD.Value);
}
18
Опишем событие Click кнопки Calc_B:
private void Calc_B_Click(object sender, EventArgs e)
{
int i,j;
/* Заполнение матрицы */
int[,] matr = new int[Source_DGV.RowCount, Source_DGV.ColumnCount];
for (i=0; i<Source_DGV.RowCount; i++)
for (j=0; j<Source_DGV.ColumnCount; j++)
matr[i,j] = Convert.ToInt32(Source_DGV[j,i].Value); /* Поиск: min_i - номер строки минимального элемента
min_j - номер столбца минимального элемента */ int min_i = 0;
int min_j = 0;
for (i=0; i<Source_DGV.RowCount; i++)
for (j=0; j<Source_DGV.ColumnCount; j++) if (matr[min_i,min_j] > matr[i,j])
{
min_i = i; min_j = j;
}
/* Вывод результатов */
FindRow_TB.Text = (min_i+1).ToString();
FindCol_TB.Text = (min_j+1).ToString(); end;
Внешний вид и пример работы программы показаны на рисунке 5.
Рисунок 5 – Внешний вид и пример работы программы, реализующей обработку матриц
19