Класс описывает одномерный динамический массив вещественных чисел ar длиной n. Содержит конструктор без параметров, с параметром n, копирующий конструктор, деструктор, методы инициализации, обработки и вывода массива.
Метод класса CountNegative() подсчитывает и возвращает количество отрицательных элементов в массиве. Метод класса InitArray все элементы массива инициализирует случайными числами диапазоне от -20 до 30. Метод класса EditArray() выполняет обработку массива: первые CountNegative() элементов массива удваивает, а остальным меняет знак.
using System;
namespace UnivariateArray
{
class Array
{
public Array()
{
n = 30;
ar = new int[n];
Console.WriteLine("Конструктор без параметров выполнен.");
}
public Array(int n)
{
this.n = n;
ar = new int[n];
for (int i = 0; i < n; i++)
ar[i] = 0;
Console.WriteLine("Конструктор с параметром выполнен.");
}
public Array(Array arn)
{
this.n = arn.n;
this.ar = new int[n];
for (int i = 0; i < n; i++)
ar[i] = arn.ar[i];
Console.WriteLine("Копирующий конструктор выполнен.");
}
~Array()
{
Console.WriteLine("Деструктор выполнен.");
}
public void InitArray(int a, int b)
{
Random rnd = new Random();
for (int i = 0; i < n; i++)
ar[i] = rnd.Next(a, b);
Console.WriteLine("Инициализация массива выполнена.");
}
public void PrintArray()
{
Console.WriteLine();
for (int i = 0; i < n; i++)
Console.Write("{0,8}", ar[i]);
Console.WriteLine();
}
public int CountNegative()
{
int neg = 0;
foreach (int i in ar)
{
if (i < 0)
++neg;
}
return neg;
}
public void AddingArray(ref int Sum)
{
Sum = 0;
foreach (int i in ar)
{
if (i < 0)
Sum+=i;
}
}
public void EditArray()
{
for (int i = 0; i < n; i++)
{
int neg = this.CountNegative();
if (i<neg)
ar[i]*=2;
else
ar[i]*=-1;
}
}
private int n;
private int[] ar;
}
// Конец определения класса Array
class Program
{
static void Main(string[] args)
{
Array ar0 = new Array();
Console.WriteLine("Массив с нулевыми элементами:");
ar0.PrintArray();
Console.Write("Введите длину массива: ");
int n = Convert.ToInt16(Console.ReadLine());
Array ar1 = new Array(n);
ar1.InitArray(-20, 30);
Console.WriteLine("Исходный массив ar1:");
ar1.PrintArray();
// Копирование массива ar1 в массив arN
Array arN = new Array(ar1);
// Определение суммы элементов массива arN
int Sum = 0;
arN.AddingArray(ref Sum);
Console.WriteLine("В массиве arN:");
arN.PrintArray();
Console.WriteLine("Отрицательных элементов: {0}.", arN.CountNegative());
Console.WriteLine("Сумма элементов: {0}.", Sum);
arN.EditArray();
Console.WriteLine("Массив arN после обработки:");
arN.PrintArray();
Console.ReadKey();
}
}
}
Результаты:
Конструктор без параметров выполнен.
Массив с нулевыми элементами:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Введите длину массива: 25
Конструктор с параметром выполнен.
Инициализация массива выполнена.
Копирующий конструктор выполнен.
Исходный массив ar1:
-4 2 -16 -15 -11 16 17 -16 -17 17
20 -14 27 -1 -2 14 23 -5 -4 1
23 4 7 -17 -17
В массиве arN:
-4 2 -16 -15 -11 16 17 -16 -17 17
20 -14 27 -1 -2 14 23 -5 -4 1
23 4 7 -17 -17
Отрицательных элементов: 13.
Сумма элементов: -139.
Массив arN после обработки:
-8 4 -32 -30 -22 32 34 -32 -34 34
40 -28 54 1 2 -14 -23 5 4 -1
-23 -4 -7 17 17
Задание.
1. Изучить понятие классов, объектов и области их эффективного использования; возможности языка программирования С# для работы с классами.
2. На основе индивидуального задания к лабораторной работе №3 разработать одноименный класс, описывающий динамический одномерный массив и операции с ним.
3. Класс должен содержать такие закрытые члены:
- длина массива;
- ссылка на массив;
а также следующие открытые методы:
- конструктор без параметров, содержащий инициализатор массива нулевыми элементами;
- конструктор с параметрами, инициализирующий массив длины, вводимой с клавиатуры, случайных чисел в заданном диапазоне;
- копирующий конструктор, создающий копию объекта с исходным массивом;
- деструктор, уничтожающий массив;
- метод модификации элемента массива, заданного его индексом;
- метод, реализующий заданную обработку массива;
- метод вывода элементов массива на консоль.
Конструкторы и деструктор должны выводить сообщение о своем срабатывании.
4. Составить программу на языке программирования С#, в которой предусмотреть:
- создание массива ar0 заданной длины с нулевыми элементами;
- создание массива ar1 с длиной, вводимой с клавиатуры;
- инициализацию массива ar1 случайными числами в заданном диапазоне;
- копирование массива ar1 в новый массив arN;
- модификацию произвольных элементов массива ar1;
- выполнение обработки массива arN;
- вывод массивов на всех стадиях вычислений;
- конструкторы и деструктор должны выводить сообщения о своем выполнении.
5. Составить блок-схему для каждого метода класса.
Содержание отчета
1. Титульный лист.
2. Цель работы, индивидуальное задание (таблица).
3. Листинг программы.
4. Блок-схемы методов класса.
5. Результаты тестирования всех методов.
6. Описание различий в работе конструкторов.
7. Выводы.
Контрольные вопросы.
- Что такое класс?
- Синтаксис объявления класса.
- Члены класса и порядок их размещения в теле класса.
- Что такое метод? Какие бывают методы?
- Модификаторы прав доступа.
- Особенности применения статических членов класса.
- Аргументы метода класса. Что такое передача параметра по значению?
- Что такое передача параметра по ссылке? Отличия от передачи по назначению
- Что такое объект? Где расположен объект при выполнении программы?
- Способы создания объектов.
- Что такое конструктор?
- Назначение и виды конструкторов.
- Что такое инициализатор? Пример.
- Что такое копирующий конструктор? Его отличия от конструктора с параметрами.
- Назначение ключевого слова this.
- Что такое деструктор?
- Что такое сборщик мусора?
- Что такое «Алгоритм пометки и сжатия»?
- Как и когда вызывается деструктор?
- В каком порядке происходит уничтожение объектов?






