Задание для самостоятельного выполнения




Практическая работа № 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), в которой будут находиться подсчитанные суммы по столбцам. Формировать эту таблицу нужно в момент формирования основной таблицы.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-11-09 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: