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

текущего найденного человека */ int min_index = -1;

/* Перебор всех людей */ for (i=0; i<n; i++)

/* Проверка, соответствует ли год рождения i-го человека заданному условию */

if (peoples[i].BirthYear > year)

/* Проверка, были ли ранее найден подходящий человек */ if (min_index == -1)

/* Ранее не был найден подходящий человек. Запоминаем его номер */

min_index = i;

else // Ранее был найден подходящий человек

/* Проверка, имеет ли вновь найденный человек большее количество детей, чем найденный ранее */

if (peoples[i].CountChild > peoples[min_index].CountChild)

min_index = i; // Запоминание номера человека /* Проверка, найден ли подходящий человек */

if (min_index != -1)

{

/* Подходящий человек найден. Вывод данных о найденном человеке */

Find_DGV[0,0].Value = peoples[min_index].LastName; Find_DGV[1,0].Value = peoples[min_index].BirthYear; Find_DGV[2,0].Value = peoples[min_index].CountChild;

}

else

{

/* Подходящий человек не найден. Вывод сообщения, что никто не найден, и очистка оставшихся ячеек */

Find_DGV[0,0].Value = "Не найден"; Find_DGV[1,0].Value = ""; Find_DGV[2,0].Value = "";

}

}

Внешний вид и пример работы программы показаны на рисунке 7.

2.8 Функции и процедуры

Задание: Даны две целочисленные квадратные матрицы А и В произвольных размерностей. Определить, в какой из матриц сумма элементов главной диагонали наибольшая. При реализации программы использовать функцию.

Будем считать, что начальное и минимальное число строк и столбцов матриц равно двум, а максимальное – 10.

26

Рисунок 7 – Внешний вид и пример работы программы, реализующей работу с записями и файлами

Для решения поставленной задачи потребуются компоненты:

CountA_L класса Label для подписи компонента CountA_NUD;

CountA_NUD класса NumericUpDown для задания размерности матри-

цы А;

MatrA_L класса Label для подписи компонента MatrA_DGV;

MatrA_DGV класса DataGridView для ввода матрицы А;

CountB_L класса Label для подписи компонента CountB_NUD;

CountB_NUD класса NumericUpDown для задания размерности матри-

цы В;

MatrB_L класса Label для подписи компонента MatrB_DGV;

MatrB_DGV класса DataGridView для ввода матрицы В;

Calc_B класса Button для активизации расчета;

Result_L класса Label для подписи компонента Result_TB;

Result_TB класса TextBox для вывода результата.

Установим следующие значения свойств компонентов (таблица 11);

Таблица 11 – Значения свойств

компонентов для примера выполнения

задания по работе с функциями или процедурами

 

 

 

 

Компонент.Свойство

 

Значение

 

CountA_L.Text

 

Размерность матрицы &А

 

CountA_NUD.Minimum

 

2

 

 

 

 

 

CountA_NUD.Maximum

 

10

 

 

 

 

 

CountA_NUD.Value

 

2

 

 

 

 

 

MatrA_L.Text

 

М&атрица А

 

 

27

 

Продолжение таблицы 11

Компонент.Свойство

Значение

MatrA_DGV.AllowUserToAddRows

false

 

 

MatrA_DGV.AllowUserToDeleteRows

false

 

 

MatrA_DGV.ColumnHeadersVisible

false

 

 

MatrA_DGV.RowHeadersVisible

false

 

 

CountB_L.Text

Размерность матрицы &В

CountB_NUD.Minimum

2

 

 

CountB_NUD.Maximum

10

 

 

CountB_NUD.Value

2

 

 

MatrB_L.Text

Ма&трица В

MatrB_DGV.AllowUserToAddRows

false

 

 

MatrB_DGV.AllowUserToDeleteRows

false

 

 

MatrB_DGV.ColumnHeadersVisible

false

 

 

MatrB_DGV.RowHeadersVisible

false

 

 

Calc_B.Text

Рас&чет

Result_L.Text

Р&езультат

Опишем событие Load формы для задания начального количества строк и столбцов в таблицах:

private void Form1_Load(object sender, EventArgs e)

{

/* Т.к. матрицы квадратные, то одновременно надо изменять

и количество строк, и количество столбцов} MatrA_DGV.RowCount = Convert.ToInt32(CountA_NUD.Value); MatrA_DGV.ColumnCount = Convert.ToInt32(CountA_NUD.Value); MatrB_DGV.RowCount = Convert.ToInt32(CountB_NUD.Value); MatrB_DGV.ColumnCount = Convert.ToInt32(CountB_NUD.Value);

}

Опишем событие ValueChanged компонента CountA_NUD:

private void CountA_NUD_ValueChanged(object sender, EventArgs e)

{

MatrA_DGV.RowCount = Convert.ToInt32(CountA_NUD.Value); MatrA_DGV.ColumnCount = Convert.ToInt32(CountA_NUD.Value);

}

Опишем событие ValueChanged компонента CountB_NUD:

private void CountB_NUD_ValueChanged(object sender, EventArgs e)

{

MatrB_DGV.RowCount = Convert.ToInt32(CountB_NUD.Value);

28

MatrB_DGV.ColumnCount = Convert.ToInt32(CountB_NUD.Value);

}

Опишем функцию подсчета суммы диагональных элементов матрицы, которая в качестве параметрa будет принимать саму матрицу. Функция должна быть описана в классе формы.

private int SumDiag(int[,] matr)

{

int res = 0;

for (int i=matr.GetLowerBound(0); i<=matr.GetUpperBound(0); i++)

res += matr[i,i]; return res;

}

Опишем событие Click кнопки Calc_B:

private void Calc_B_Click(object sender, EventArgs e)

{

int i,j;

int[,] matrA = new int[MatrA_DGV.ColumnCount, MatrA_DGV.RowCount];

int[,] matrB = new int[MatrB_DGV.ColumnCount, MatrB_DGV.RowCount];

/* Заполнение матрицы A */

for (i=0; i<MatrA_DGV.ColumnCount; i++) for (j=0; j<MatrA_DGV.RowCount; j++)

matrA[i,j] = Convert.ToInt32(MatrA_DGV[i,j].Value); /* Заполнение матрицы B */

for (i=0; i<MatrB_DGV.ColumnCount; i++) for (j=0; j<MatrB_DGV.RowCount; j++)

matrB[i,j] = Convert.ToInt32(MatrB_DGV[i,j].Value); /* Расчет суммы для матрицы A */

int sumA = SumDiag(matrA);

/* Расчет суммы для матрицы B */ int sumB = SumDiag(matrB);

/* Сравнение сумм и вывод результата */ if (sumA > sumB)

Result_TB.Text =

"Сумма элементов главной диагонали больше у матрицы А";

else

if (sumA < sumB) Result_TB.Text =

"Сумма элементов главной диагонали больше у матрицы B"; else

Result_TB.Text =

"Суммы элементов главной диагонали матриц А и В равны";

}

Внешний вид и пример работы программы показаны на рисунке 8.

29