Практическая работа № 9, МАТРИЦА
Постановка задачи
Создайте программу, которая в зависимости от величин N (количество строк) и M (количества столбцов) создает матрицу размером NxM. Программа предоставляет возможность заполнить матрицу с помощью случайных чисел или ввести значения вручную. Кроме этого можно подсчитать сумму элементов матрицы, определить максимальный и минимальный элементы матрицы.
Рис. 1 Рис.2
Новым в этой работе являются:
- компонент таблица строк DataGridView во вкладки компонентов “Данные”.
Теоретический материал
Компонент DataGridView предназначен для создания таблицы.
Свойству компонента Cells соответствует двухмерный массив ячеек, каждая из которых может содержать произвольный текст. Содержание ячейки массива, находящегося на пересечении столбца с номером Col и строки с номером Row определяется элементом dataGridView1.ColumnCount и dataGridView1.RowCount.
Двумерный массив состоит из двух частей: фиксированной и рабочей.
Фиксированная часть служит для показа заголовков столбцов (строк) и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самую верхнюю строку таблицы. Оброщение к ним происходит через HeaderCell
Рабочая часть – это остальная часть таблицы. Она может содержать произвольное количество столбцов и строк, которое можно изменять в ходе выполнения программы. Если рабочая часть не умещается целиком в пределах окна компонента, то автоматически появляются полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает. Обращение к ним происходит через Cells.
План разработки программы
1. Откройте новый проект.
2. Разместите в форме объекты в соответствии с рис.2.
3. Установите свойства компонент на вкладке Свойства:
Выделенный объект | Имя свойства | Значение |
Label1 | Text | Размер матрицы |
Button1 | Text | Создайте |
Button2 | Text | Заполнить |
Button3 | Text | Очистить |
Label2 | Text | Сумма элементов |
Label3 | Text | Максимальный элемент |
Label4 | Text | Минимальный элемент |
Label5 | Text | Удалить название объекта |
Label6 | Text | Удалить название объекта |
Label7 | Text | Удалить название объекта |
Button4 | Text | Выход |
4. Сохраните код программы и проект под.
5. Разместите в блоке описание глобальных переменных:
int Row, Col; //row-строчки, Col-столбцы
int Max, Min, Sum = 0;
6. Создайте следующие процедуры обработки событий:
Объект | Имя событие | Текст процедуры |
Button4 «Выход» | Click | private void button4_Click(object sender, EventArgs e) { this.Close(); } |
Form1 | Load | private void Form1_Load(object sender, EventArgs e) { dataGridView1.Visible = false; button2.Enabled = false; button3.Enabled = false; } Комментарий При создании формы установим компонент DataGridViewневидимым т.к. в начале неизвестно сколько же строк и столбцов в таблице. Кроме этого до определения размера таблицы установим недоступными кнопки «Заполнить» и «Очистить». |
Button1 «Создать таблицу» | Click | private void button1_Click(object sender, EventArgs e) { Row = Convert.ToInt32(textBox1.Text); Col = Convert.ToInt32(textBox2.Text); dataGridView1.ColumnCount = Col; dataGridView1.RowCount = Row; for (int i = 0; i < Row; i++) dataGridView1.Rows[i].HeaderCell.Value = Convert.ToString(i + 1); for (int i = 0; i < Col; i++) dataGridView1.Columns[i].HeaderCell.Value = Convert.ToString(i + 1); dataGridView1.Visible = true; }; Комментарий Переходим к формированию таблицы. Для этого устанавливаем значения переменных Row и Col, определяющих количество строк и столбцов таблицы – переводим из текстовой информации значения полей TextBox1и TextBox2в числовые значения. После этого программно задаем свойства компонента DataGridView и устанавливаем его видимым. В конце заполняем фиксированную часть таблицы значениями номеров строк и столбцов. |
Button2 | Click | private void button2_Click(object sender, EventArgs e) { int[, ] a = new int[Row, Col]; Random r = new Random(); for (int i = 0; i < Row; i++) for (int j = 0; j < Col; j++) { dataGridView1.Rows[i].Cells[j].Value = r.Next(-10, 10); a[i, j] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value); } for (int i = 0; i < Row; i++) for (int j = 0; j < Col; j++) { Sum = Sum + Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value); if (a[i, j] > Max) Max = a[i, j]; if (a[i, j] < Min) Min = a[i, j]; } label5.Text = Convert.ToString(Sum); label6.Text = Convert.ToString(Max); label7.Text = Convert.ToString(Min); button3.Enabled = true; button2.Enabled = false; Комментарий В начале процедуры заполняются ячейки таблицы случайными числами в диапазоне от 10 до -10. И переносим эти значения в массив для удобства работы с числами. Дальше определяются максимальное и минимальное числа и сумма элементов таблицы. В конце процедуры полученные значения выводятся на экран. Для этого используются компоненты Label5, Label6, Label7. |
Button3 | OnClick | private void button3_Click(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; label5.Text = ""; label6.Text = ""; label7.Text = ""; dataGridView1.Visable = false; button1.Enabled = true; button3.Enabled = false; dataGridView1.Rows.Clear(); } Комментарий Все ячейки таблицы удаляются, а затем очищаются компоненты Label5, Label6, Label7, Edit1.Text, Edit2.Text. Компонент DataGridView устанавливается невидимым, кнопки «Заполнить» и «Очистить» становятся недоступными, кнопка «Создать» и компоненты TextBox1и TextBox2– доступными. |
Задание для самостоятельного выполнения
1. Если в поля ввода «Размерность матрицы» пользователь по ошибке вместо числа введет букву или какой-либо другой символ, то программа будет прервана. Для того чтобы это избежать создайте процедуру обработки события KeyPress для компонентов TExtBox.
2. Дополните программу, вставив блок определения суммы по каждому столбцу матрицы.
Подсказка. Необходима еще одна таблица (компонент StringGrid), в которой будут находиться подсчитанные суммы по столбцам. Формировать эту таблицу нужно в момент формирования основной таблицы.