Тема: Работа с матрицами и внутренняя сортировка.
Цель: изучение концепции наследования в ООП и его применение для организации работы с матрицами; освоение широко используемых методов внутренней сортировки.
Задание.
1. Изучить понятие наследования классов, а также возможности языка программирования С# для работы с наследованием классов.
2. На основе класса Array, реализованного в предыдущей лабораторной работе, создать производный от него класс Matrix.
3. Дочерний класс должен содержать такие закрытые члены:
- высота матрицы;
- ссылка на массив векторов базового класса;
а также следующие открытые методы:
- конструктор без параметров, создающий нулевую матрицу фиксированного размера; размер задается константами;
- конструктор с параметрами, создающий и инициализирующий матрицу случайных чисел в заданном диапазоне; размер задается с использованием параметров;
- метод вывода элементов матрицы на консоль;
- метод, реализующий заданный алгоритм сортировки;
- метод, реализующий вычисление заданного показателя P;
|
|
- метод, реализующий заданное преобразование матрицы.
Конструкторы должны выводить сообщение о своем срабатывании.
4. Составить тестовую программу, демонстрирующую реализацию указанных методов.
5. Составить блок-схему алгоритма каждого метода.
Содержание отчета
1. Титульный лист.
2. Цель работы, индивидуальное задание (таблица).
3. Листинг программы.
4. Блок-схемы методов класса.
5. Результаты тестирования всех методов.
6. Описание различий в работе конструкторов базового и производного классов.
7. Выводы.
Варианты заданий к лабораторной работе №5
№ вар. | Массив и длина | Интервал генерации | Алгоритм внутренней сортировки | Показатель Р | Алгоритм обработки |
А(10, 8) | [-10, 25] | Методом пузырька отсортировать строки матрицы по возрастанию | Сумма произведений элементов строки и столбца матрицы, на пересечении которых находится наибольший по абсолютной величине элемент матрицы. | Все отрицательные элементы, расположенные по периметру матрицы заменить их абсолютными значениями. | |
Х(5, 10) | [-15, 10] | Методом вставки отсортировать столбцы матрицы по убыванию | Количество элементов матрицы, превышающих ее среднее арифметическое значение. | Все положительные элементы матрицы разделить на ее среднее арифметическое значение. | |
Y(10, 12) | [-20, 10] | Методом обмена отсортировать столбцы матрицы по возрастанию | Сумма элементов матрицы, для которых i+j=k, где k - введенное с клавиатуры значение. Проверить, что значение k позволяет найти решение для каждой из матриц. | Все элементы матрицы, превышающие ее среднее арифметическое значение разделить на максимальный элемент. | |
Z(10, 7) | [-30, 40] | Методом пузырька отсортировать столбцы матрицы по убыванию | Сумма положительных элементов столбца, содержащего максимальный элемент матрицы. | Все элементы столбца, содержащего минимальный элемент матрицы, уменьшить на ее среднее арифметическое значение. | |
В(6, 11) | [-20, 25] | Методом вставки отсортировать строки матрицы по убыванию | Разность между максимальным и минимальным значениями элементов массива. | Все элементы строк, начинающихся с отрицательных элементов, умножить на максимальный элемент матрицы. | |
С(8, 12) | [-15, 75] | Методом пузырька отсортировать строки матрицы по убыванию | Сумма элементов, расположенных по периметру матрицы. | Столбцы матрицы упорядочить по возрастанию значений их элементов. | |
А(10, 9) | [-30, 100] | Методом обмена отсортировать строки матрицы по возрастанию | Среднее геометрическое элементов матрицы: | Все элементы матрицы разделить на ее максимальное значение. | |
Х(9, 12) | [-40, 20] | Методом обмена отсортировать столбцы матрицы по убыванию | Отношение среднего арифметического значения к минимальному элементу матрицы. | Строки матрицы упорядочить по убыванию значений их элементов. | |
Y(10, 10) | [-50, 60] | Методом пузырька отсортировать элементы главной диагонали по возрастанию | Произведение ненулевых элементов строки матрицы, на которой расположен максимальный элемент. | Все элементы матрицы уменьшить на ее среднее арифметическое значение. | |
Z(7, 9) | [-25, 15] | Методом вставки отсортировать столбцы матрицы по возрастанию | Сумма значений элементов матрицы, меньших ее среднего арифметического значения. | Все положительные элементы строки, содержащей максимальный элемент разделить на ее среднее арифметическое значение | |
T(5, 14) | [-10, 5] | Методом пузырька отсортировать четные строки матицы по возрастанию, а нечетные по убыванию | Разность между суммой значений элементов четных и нечетных строк | Элементы строк, у которых минимальные элементы положительные, увеличить на значения этих элементов. | |
A(8, 8) | [-5, 10] | Методом вставки отсортировать главную диагональ матрицы по возрастанию | Отношение произведения ненулевых элементов к сумме положительных элементов матрицы. | Элементы столбцов, у которых среднее арифметическое значение отрицательно, разделить на эти средние значения. | |
N(12, 6) | [-20, 10] | Методом обмена отсортировать нечетные столбцы матицы по убыванию, а четные по возрастанию | Произведение ненулевых элементов, принадлежащих интервалу [-1,1] | Все элементы матрицы, превышающие ее среднее арифметическое значение разделить на максимальный элемент. | |
B(11, 11) | [-30, 0] | Методом пузырька отсортировать побочную диагональ матрицы по возрастанию | Количество отрицательных элементов матрицы. | Все элементы столбца, содержащего минимальный элемент матрицы, уменьшить на ее среднее арифметическое значение. | |
M(10, 5) | [-20, 25] | Методом пузырька отсортировать четные столбцы матицы по убыванию, а нечетные по возрастанию | Сумма элементов матрицы, больших ее среднего значения | Столбцы матрицы упорядочить по возрастанию значений их элементов. | |
R(5, 12) | [-15, 75] | Методом обмена отсортировать нечетные строки матрицы по убыванию | Минимальный по абсолютной величине элемент матрицы. | Все элементы строк, начинающихся с отрицательных элементов, умножить на максимальный элемент матрицы. | |
C(10, 10) | [-30, 100] | Методом вставки отсортировать побочную диагональ матрицы по убыванию | Отношение сумм элементов, лежащих выше и ниже главной диагонали матрицы. | Элементы строк матрицы, начинающихся с положительных значений умножить на эти значения. | |
F(7, 7) | [-40, 20] | Методом обмена отсортировать побочную диагональ матрицы по возрастанию | Отношение произведения ненулевых элементов к сумме положительных элементов матрицы. | Строки матрицы упорядочить по убыванию значений их элементов. | |
S(10, 4) | [-40, 60] | Методом пузырька отсортировать четные столбцы матрицы по убыванию | Отношение максимального и минимального элементов матрицы | Все элементы матрицы уменьшить на ее среднее арифметическое значение. | |
U(6, 15) | [-15, 15] | Методом вставки отсортировать четные строки матицы по убыванию, а нечетные по возрастанию | Сумма элементов столбца в котором расположен максимальный элемент матрицы. | Элементы строк, у которых минимальные элементы положительные, увеличить на значения этих элементов. | |
V(11, 5) | [-20, 5] | Методом вставки отсортировать первый и последний столбцы матицы по убыванию, а остальные по возрастанию | Разность модуля суммы отрицательных элементов и суммы положительных элементов | Все элементы матрицы разделить на ее максимальное значение. | |
D(9, 9) | [-15, 10] | Методом пузырька отсортировать главную диагональ матрицы по убыванию | Произведение ненулевых элементов, лежащих выше главной диагонали матрицы | Элементы столбцов, у которых среднее арифметическое значение отрицательно, разделить на эти средние значения. | |
L(5, 11) | [-20, 20] | Методом обмена отсортировать первую и последнюю строки матицы по возрастанию, а остальные по убыванию | Количество элементов матрицы, больших ее среднего значения. | Все положительные элементы строки, содержащей максимальный элемент разделить на ее среднее арифметическое значение. | |
G(8, 8) | [-30, 20] | Методом обмена отсортировать главную диагональ матрицы по убыванию | Произведение элементов строк с положительными средними значениями для матрицы. | Элементы столбцов матрицы, у которых среднее арифметическое значение >0 упорядочить по возрастанию. | |
[-10, 55] | |||||
[-15, 35] | |||||
[-50, 10] | |||||
[-40, 40] | |||||
[-40, 70] | |||||
[-15, 15] |
|
|
|
|
|
|
Пример класса Matrix
public class Matrix: Array
{
public Matrix()
{
m = 5;
n = 10;
matr = new Array[m];
for (int i = 0; i < m; i++)
matr[i] = new Array(n);
Console.WriteLine("Matrix без параметров выполнен.");
}
public Matrix(int m, int n)
{
this.m = m;
this.n = n;
matr = new Array[m];
for (int i = 0; i < m; i++)
matr[i] = new Array(n);
Random rnd = new Random();
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
matr[i].ar[j] = rnd.Next(100);
Console.WriteLine("Matrix с параметрами выполнен.");
}
public void PrintMatrix()
{
for (int i = 0; i < m; i++)
matr[i].PrintArray();
}
// Метод выполняет сортировку элементов строк матрицы по возрастанию
// с использованием метода вставки
public void SortMatrix()
{
int j,k,l,el;
for (int i = 0; i < m; i++)
for (j = 1; j < n; j++)
{
el = matr[i].ar[j];
k = 0;
while (el > matr[i].ar[k])
k++;
for (l = j - 1; l >= k; l--)
matr[i].ar[l + 1] = matr[i].ar[l];
matr[i].ar[k] = el;
}
}
private int m;
private int n;
private Array[] matr;
}
// Конец определения производного класса Matrix
class Program
{
static void Main(string[] args)
{
Matrix m0 = new Matrix();
Console.WriteLine("\n");
Matrix m1 = new Matrix(5,10);
Console.WriteLine("\nИсходная матрица:");
m1.PrintMatrix();
m1.SortMatrix();
Console.WriteLine("\nОтсортированная матрица:");
m1.PrintMatrix();
Console.ReadKey();
}
}
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
1. Бишоп Дж. С# в кратком изложении / Дж. Бишоп, Н. Хорспул; Пер. с англ. — М.: БИНОМ. Лаборатория знаний, 2005. — 472 с, ил.
2. Рихтер Дж. CLR via C#. Программирование на платформе Microsoft.NET
3. Framework 2.0 на языке С#. Мастер-класс. / Пер. с англ. — М.: Издательство «Русская Редакция»: СПб.: Питер, 2007. — 656 стр.: ил.
4. Шилдг, Герберт. Полный справочник по С#.: Пер. с англ. — М.: Издательский дом "Вильяме", 2004. — 752 с.: ил. — Парал. тит. англ.
5. Джесс Либерти. Программирование на С#: Создание.NET приложений. 2-е издание/ Пер. с англ. — М.: Издательство «Символ-Плюс»: СПб.: Питер, 2012. — 684 стр.: ил.
6. ГОСТ 34. «Информационная технология. Комплекс стандартов».
7. ГОСТ 19. «Единая система программной документации»
8. Хенкок Л., Кригер М. Введение в программирование на языке Си. - М.: Радио и связь, 1986.-192 с.
9. Болски М.И. Язык программирования Си. Справочник. - М.: Радио и связь,1988. -96 с.
10. Уинер Р. Язык Турбо Си. - М.: Мир, 1991. - 384 с.
11. Дейтел Х. С#: Пер. с англ. / Дейтел Х., Дейтел П., Листфилд Дж., Нието Т., Мегер Ш., Златкина М., СПб.: БХВ-Петербург, 2006. — 1056 с.: ил.
12. Троелсен, Э. Язык программирования С# 2005 и платформа.NET 2.0, 3-е издание.: Пер. с англ. — М.: ООО "И.Д. Вильямс", 2007. — 1168 с.: ил. — Парал, тит. англ.
13. Задачи по программированию (библиотека программиста). - М.: Наука, 1988. -224с.
14. Алексеев В.Е. и др. Вычислительная техника в инженерных и экономических расчетах: сборник задач и упражнений для вузов. - М.: Высшая школа, 1984. -306с.