Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / Программирование в среде Visual C# (Часть 2).pdf
Скачиваний:
164
Добавлен:
27.05.2015
Размер:
1.41 Mб
Скачать

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