Практический пример. Ступенчатый массив и обработка исключений
Программа осуществляет циклический сдвиг строк "ступенчатого массива" вниз. Все элементы массива задаются случайным образом. Материал по обработке исключений представлен в разделе обработка исключений лабораторной работы №2.
using System; namespace CSharpApplication.ArraysExample{ class Arrays { // Циклический сдвиг строк матрицы вниз static void RotateDown(int [][] mtr) { /* Получаем размерность (число строк) */ int M = mtr.GetLength(0); // Запоминаем нижнюю строку int [] temp = mtr[M - 1]; for(int i = M - 1; i > 0; i--) { // Сдвиг (перемещаем адреса строк) mtr[i] = mtr[i - 1]; } // Устанавливаем верхнюю строку mtr[0] = temp; } // Вывод матрицы static void Print(int [][] mtr) { // Определение числа строк int M = mtr.GetLength(0); for(int i = 0; i < M; i++) { /* * Обходимся без получения размерности */ // Перебор элементов строки foreach(int j in mtr[i]) { Console.Write("{0,8}", j); } Console.WriteLine(); } Console.WriteLine(); } // Инициализация матрицы случайными значениями static void Init(int [][] mtr) { // Инициализация генератора случайных чисел Random rand = new Random(); /* Получаем размерность (число строк) */ int M = mtr.GetLength(0); for(int i = 0; i < M; i++) { /* Другой способ получения размерности (число столбцов) */ int N = mtr[i].Length; for(int j = 0; j < N; j++) { // Забиваем массив случайными числами // от 0 до 99999 mtr[i][j] = rand.Next(100000); } } } static void Main() { // Число строк uint M = 0; Console.WriteLine("Введите количество строк: "); try { // Ввод числа строк с клавиатуры M = Convert.ToUInt32(Console.ReadLine()); } catch(OverflowException ex) { // В случае ошибочного ввода (переполнения) Console.WriteLine(ex.Message + " Use default size (=10)"); } catch(FormatException ex) { // В случае ошибочного ввода Console.WriteLine(ex.Message + " Use default size (=10)"); } // Если все плохо, то создадим массив из 10 строк if(M == 0) M = 10; // Создание массива ("указателей") int [][] ar = new int[M][]; // Число столбцов uint N = 0; for(int i = 0; i < M; i++) { Console.WriteLine("Введите количество столбцов: "); try { // Ввод числа столбцов для каждой строки N = Convert.ToUInt32(Console.ReadLine()); } catch(OverflowException ex) { // В случае ошибочного ввода (переполнения) Console.WriteLine(ex.Message + " Use default size (=10)"); } catch(FormatException ex) { // В случае ошибочного ввода Console.WriteLine(ex.Message + " Use default size (=10)"); } // Если все плохо, то создадим массив из 10 элементов if(N == 0) N = 10; // Создание массива ar[i] = new int[N]; } Console.WriteLine("\"Ступенчатая матрица\":"); // Инициализация Init(ar); // Вывод Print(ar); Console.WriteLine("Та же матрица после серии циклических сдвигов:"); for(int i = 0; i < M; i++) { // Циклический сдвиг RotateDown(ar); // Вывод Print(ar); } } }}
Задание
1. Изучить понятие классов, объектов и области их эффективного использования; возможности языка программирования С# для работы с классами.
2. На основе индивидуального задания к лабораторной работе №4 (табл. 6) разработать одноименный класс, описывающий динамический одномерный массив и операции с ним.
3. Класс должен содержать такие закрытые члены:
- длина массива;
- ссылка на массив;
а также следующие открытые методы:
- конструктор без параметров, содержащий инициализатор массива нулевыми элементами;
- конструктор с параметрами, инициализирующий массив длины, вводимой с клавиатуры, случайных чисел в заданном диапазоне;
- копирующий конструктор, создающий копию объекта с исходным массивом;
- деструктор, уничтожающий массив;
- метод модификации элемента массива, заданного его индексом;
- метод, реализующий заданную обработку массива;
- метод вывода элементов массива на консоль.
При программировании методов обрабатывать необходимые исключения (обращение к элементам массива, арифметика).
Конструкторы и деструктор должны выводить сообщение о своем срабатывании.
4. Составить программу на языке программирования С#, в которой предусмотреть:
- создание массива ar0 заданной длины с нулевыми элементами;
- создание массива ar1 с длиной, вводимой с клавиатуры;
- инициализацию массива ar1 случайными числами в заданном диапазоне;
- копирование массива ar1 в новый массив arN;
- модификацию произвольных элементов массива ar1;
- выполнение обработки массива arN;
- вывод массивов на всех стадиях вычислений;
- обработку необходимых исключений (ввод данных, обращение к элементам массива, арифметика).
- конструкторы и деструктор должны выводить сообщения о своем выполнении.
5. Составить блок-схему для каждого метода класса.
Содержание отчета
1. Титульный лист.
2. Цель работы, индивидуальное задание (таблица).
3. Листинг программы.
4. Блок-схемы методов класса.
5. Результаты тестирования всех методов, в том числе обработки исключений.
6. Описание различий в работе конструкторов.
7. Выводы.
Контрольные вопросы
- Что такое класс?
- Синтаксис объявления класса.
- Члены класса и порядок их размещения в теле класса.
- Что такое метод? Какие бывают методы?
- Модификаторы прав доступа.
- Особенности применения статических членов класса.
- Аргументы метода класса. Что такое передача параметра по значению?
- Что такое передача параметра по ссылке? Отличия от передачи по назначению
- Что такое объект? Где расположен объект при выполнении программы?
- Способы создания объектов.
- Что такое конструктор?
- Назначение и виды конструкторов.
- Что такое инициализатор? Пример.
- Что такое копирующий конструктор? Его отличия от конструктора с параметрами.
- Назначение ключевого слова this.
- Что такое деструктор?
- Что такое сборщик мусора?
- Что такое «Алгоритм пометки и сжатия»?
- Как и когда вызывается деструктор?
- В каком порядке происходит уничтожение объектов?
Дата добавления: 2021-12-14; просмотров: 330;