
- •Лабораторная работа №1
- •Теоретические сведения. Среда .Net RunTime и библиотека Framework
- •Процесс компиляции с# - программы:
- •Управляемый и неуправляемый код.
- •Создание проекта.
- •Анатомия программы.
- •Контрольные вопросы.
- •Лабораторная работа №2
- •Теоретические сведения. Операторы условия.
- •Оператор множественного выбора:
- •Форматирование вывода
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №3
- •Теоретические сведения.
- •Объявление массивов
- •Значения по умолчанию
- •Обращение к элементам массива
- •Инициализация элементов массива
- •Цикл foreach
- •Инициализация одномерных массивов
- •Практический пример. Одномерный массив.
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №4
- •Теоретические положения. Уровни доступа
- •Объявление статических полей и методов класса
- •Пометка и сжатие
- •Форсированная сборка мусора
- •Методы. Передача параметров по значению
- •Методы. Передача параметров по ссылке.
- •Практический пример. Класс Array (одномерный массив).
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №5
- •Задание.
- •Список рекомендуемой литературы
Задание.
Изучить понятие классов, объектов и области их эффективного использования; возможности языка программирования С# для работы с классами.
На основе индивидуального задания к лабораторной работе №3 разработать одноименный класс, описывающий динамический одномерный массив и операции с ним.
Класс должен содержать такие закрытые члены:
длина массива;
ссылка на массив;
а также следующие открытые методы:
конструктор без параметров, содержащий инициализатор массива нулевыми элементами;
конструктор с параметрами, инициализирующий массив длины, вводимой с клавиатуры, случайных чисел в заданном диапазоне;
копирующий конструктор, создающий копию объекта с исходным массивом;
деструктор, уничтожающий массив;
метод модификации элемента массива, заданного его индексом;
метод, реализующий заданную обработку массива;
метод вывода элементов массива на консоль.
Конструкторы и деструктор должны выводить сообщение о своем срабатывании.
Составить программу на языке программирования С#, в которой предусмотреть:
создание массива ar0 заданной длины с нулевыми элементами;
создание массива ar1 с длиной, вводимой с клавиатуры;
инициализацию массива ar1 случайными числами в заданном диапазоне;
копирование массива ar1 в новый массив arN;
модификацию произвольных элементов массива ar1;
выполнение обработки массива arN;
вывод массивов на всех стадиях вычислений;
конструкторы и деструктор должны выводить сообщения о своем выполнении.
Составить блок-схему для каждого метода класса.
Содержание отчета
Титульный лист.
Цель работы, индивидуальное задание (таблица).
Листинг программы.
Блок-схемы методов класса.
Результаты тестирования всех методов.
Описание различий в работе конструкторов.
Выводы.
Контрольные вопросы.
Что такое класс?
Синтаксис объявления класса.
Члены класса и порядок их размещения в теле класса.
Что такое метод? Какие бывают методы?
Модификаторы прав доступа.
Особенности применения статических членов класса.
Аргументы метода класса. Что такое передача параметра по значению?
Что такое передача параметра по ссылке? Отличия от передачи по назначению
Что такое объект? Где расположен объект при выполнении программы?
Способы создания объектов.
Что такое конструктор?
Назначение и виды конструкторов.
Что такое инициализатор? Пример.
Что такое копирующий конструктор? Его отличия от конструктора с параметрами.
Назначение ключевого слова this.
Что такое деструктор?
Что такое сборщик мусора?
Что такое «Алгоритм пометки и сжатия»?
Как и когда вызывается деструктор?
В каком порядке происходит уничтожение объектов?
Лабораторная работа №5
Тема: Работа с матрицами и внутренняя сортировка.
Цель: изучение концепции наследования в ООП и его применение для организации работы с матрицами; освоение широко используемых методов внутренней сортировки.
Задание.
Изучить понятие наследования классов, а также возможности языка программирования С# для работы с наследованием классов.
На основе класса Array, реализованного в предыдущей лабораторной работе, создать производный от него класс Matrix.
Дочерний класс должен содержать такие закрытые члены:
высота матрицы;
ссылка на массив векторов базового класса;
а также следующие открытые методы:
конструктор без параметров, создающий нулевую матрицу фиксированного размера; размер задается константами;
конструктор с параметрами, создающий и инициализирующий матрицу случайных чисел в заданном диапазоне; размер задается с использованием параметров;
метод вывода элементов матрицы на консоль;
метод, реализующий заданный алгоритм сортировки;
метод, реализующий вычисление заданного показателя P;
метод, реализующий заданное преобразование матрицы.
Конструкторы должны выводить сообщение о своем срабатывании.
Составить тестовую программу, демонстрирующую реализацию указанных методов.
Составить блок-схему алгоритма каждого метода.
Содержание отчета
Титульный лист.
Цель работы, индивидуальное задание (таблица).
Листинг программы.
Блок-схемы методов класса.
Результаты тестирования всех методов.
Описание различий в работе конструкторов базового и производного классов.
Выводы.
Варианты заданий к лабораторной работе №5
№ вар. |
Массив и длина |
Интервал генерации |
Алгоритм внутренней сортировки |
Показатель Р |
Алгоритм обработки |
1 |
А(10, 8) |
[-10, 25] |
Методом пузырька отсортировать строки матрицы по возрастанию |
Сумма произведений элементов строки и столбца матрицы, на пересечении которых находится наибольший по абсолютной величине элемент матрицы. |
Все отрицательные элементы, расположенные по периметру матрицы заменить их абсолютными значениями. |
2 |
Х(5, 10) |
[-15, 10] |
Методом вставки отсортировать столбцы матрицы по убыванию |
Количество элементов матрицы, превышающих ее среднее арифметическое значение. |
Все положительные элементы матрицы разделить на ее среднее арифметическое значение. |
3 |
Y(10, 12) |
[-20, 10] |
Методом обмена отсортировать столбцы матрицы по возрастанию |
Сумма элементов матрицы, для которых i+j=k, где k - введенное с клавиатуры значение. Проверить, что значение k позволяет найти решение для каждой из матриц. |
Все элементы матрицы, превышающие ее среднее арифметическое значение разделить на максимальный элемент. |
4 |
Z(10, 7) |
[-30, 40] |
Методом пузырька отсортировать столбцы матрицы по убыванию |
Сумма положительных элементов столбца, содержащего максимальный элемент матрицы. |
Все элементы столбца, содержащего минимальный элемент матрицы, уменьшить на ее среднее арифметическое значение. |
5 |
В(6, 11) |
[-20, 25] |
Методом вставки отсортировать строки матрицы по убыванию |
Разность между максимальным и минимальным значениями элементов массива. |
Все элементы строк, начинающихся с отрицательных элементов, умножить на максимальный элемент матрицы. |
6 |
С(8, 12) |
[-15, 75] |
Методом пузырька отсортировать строки матрицы по убыванию |
Сумма элементов, расположенных по периметру матрицы. |
Столбцы матрицы упорядочить по возрастанию значений их элементов. |
7 |
А(10, 9) |
[-30, 100] |
Методом обмена отсортировать строки матрицы по возрастанию |
Среднее геометрическое элементов матрицы:
|
Все элементы матрицы разделить на ее максимальное значение. |
8 |
Х(9, 12) |
[-40, 20] |
Методом обмена отсортировать столбцы матрицы по убыванию |
Отношение среднего арифметического значения к минимальному элементу матрицы. |
Строки матрицы упорядочить по убыванию значений их элементов. |
9 |
Y(10, 10) |
[-50, 60] |
Методом пузырька отсортировать элементы главной диагонали по возрастанию |
Произведение ненулевых элементов строки матрицы, на которой расположен максимальный элемент. |
Все элементы матрицы уменьшить на ее среднее арифметическое значение. |
10 |
Z(7, 9) |
[-25, 15] |
Методом вставки отсортировать столбцы матрицы по возрастанию |
Сумма значений элементов матрицы, меньших ее среднего арифметического значения. |
Все положительные элементы строки, содержащей максимальный элемент разделить на ее среднее арифметическое значение |
11 |
T(5, 14) |
[-10, 5] |
Методом пузырька отсортировать четные строки матицы по возрастанию, а нечетные по убыванию |
Разность между суммой значений элементов четных и нечетных строк |
Элементы строк, у которых минимальные элементы положительные, увеличить на значения этих элементов. |
12 |
A(8, 8) |
[-5, 10] |
Методом вставки отсортировать главную диагональ матрицы по возрастанию |
Отношение произведения ненулевых элементов к сумме положительных элементов матрицы. |
Элементы столбцов, у которых среднее арифметическое значение отрицательно, разделить на эти средние значения. |
13 |
N(12, 6) |
[-20, 10] |
Методом обмена отсортировать нечетные столбцы матицы по убыванию, а четные по возрастанию |
Произведение ненулевых элементов, принадлежащих интервалу [-1,1] |
Все элементы матрицы, превышающие ее среднее арифметическое значение разделить на максимальный элемент. |
14 |
B(11, 11) |
[-30, 0] |
Методом пузырька отсортировать побочную диагональ матрицы по возрастанию |
Количество отрицательных элементов матрицы. |
Все элементы столбца, содержащего минимальный элемент матрицы, уменьшить на ее среднее арифметическое значение. |
15 |
M(10, 5) |
[-20, 25] |
Методом пузырька отсортировать четные столбцы матицы по убыванию, а нечетные по возрастанию |
Сумма элементов матрицы, больших ее среднего значения |
Столбцы матрицы упорядочить по возрастанию значений их элементов. |
16 |
R(5, 12) |
[-15, 75] |
Методом обмена отсортировать нечетные строки матрицы по убыванию |
Минимальный по абсолютной величине элемент матрицы. |
Все элементы строк, начинающихся с отрицательных элементов, умножить на максимальный элемент матрицы. |
17 |
C(10, 10) |
[-30, 100] |
Методом вставки отсортировать побочную диагональ матрицы по убыванию |
Отношение сумм элементов, лежащих выше и ниже главной диагонали матрицы. |
Элементы строк матрицы, начинающихся с положительных значений умножить на эти значения. |
18 |
F(7, 7) |
[-40, 20] |
Методом обмена отсортировать побочную диагональ матрицы по возрастанию |
Отношение произведения ненулевых элементов к сумме положительных элементов матрицы. |
Строки матрицы упорядочить по убыванию значений их элементов. |
19 |
S(10, 4) |
[-40, 60] |
Методом пузырька отсортировать четные столбцы матрицы по убыванию |
Отношение максимального и минимального элементов матрицы |
Все элементы матрицы уменьшить на ее среднее арифметическое значение. |
20 |
U(6, 15) |
[-15, 15] |
Методом вставки отсортировать четные строки матицы по убыванию, а нечетные по возрастанию |
Сумма элементов столбца в котором расположен максимальный элемент матрицы. |
Элементы строк, у которых минимальные элементы положительные, увеличить на значения этих элементов. |
21 |
V(11, 5) |
[-20, 5] |
Методом вставки отсортировать первый и последний столбцы матицы по убыванию, а остальные по возрастанию |
Разность модуля суммы отрицательных элементов и суммы положительных элементов |
Все элементы матрицы разделить на ее максимальное значение. |
22 |
D(9, 9) |
[-15, 10] |
Методом пузырька отсортировать главную диагональ матрицы по убыванию |
Произведение ненулевых элементов, лежащих выше главной диагонали матрицы |
Элементы столбцов, у которых среднее арифметическое значение отрицательно, разделить на эти средние значения. |
23 |
L(5, 11) |
[-20, 20] |
Методом обмена отсортировать первую и последнюю строки матицы по возрастанию, а остальные по убыванию |
Количество элементов матрицы, больших ее среднего значения. |
Все положительные элементы строки, содержащей максимальный элемент разделить на ее среднее арифметическое значение. |
24 |
G(8, 8) |
[-30, 20] |
Методом обмена отсортировать главную диагональ матрицы по убыванию |
Произведение элементов строк с положительными средними значениями для матрицы. |
Элементы столбцов матрицы, у которых среднее арифметическое значение >0 упорядочить по возрастанию. |
25 |
|
[-10, 55] |
|
|
|
26 |
|
[-15, 35] |
|
|
|
27 |
|
[-50, 10] |
|
|
|
28 |
|
[-40, 40] |
|
|
|
29 |
|
[-40, 70] |
|
|
|
30 |
|
[-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();
}
}