Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Методы. Передача параметров по ссылке
Для того чтобы решить эту проблему необходимо использовать ключевые слова ref и out, позволяющие осуществить передачу обычного типа по ссылке. В C# указание модификатора ref приводит к созданию вызова по ссылке вместо вызова по значению. Данный модификатор указывается при объявлении метода и при его вызове. Важным моментом при использовании ref является то, что значение переменной передаваемой в качестве параметра должно быть присвоено заранее до вызова метода, иначе при попытке компиляции возникнет ошибка компиляции.
Практический пример. Класс Array (одномерный массив)
Класс описывает одномерный динамический массив вещественных чисел 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. На основе индивидуального задания к лабораторной работе №4 (табл. 6) разработать одноименный класс, описывающий динамический одномерный массив и операции с ним. 3. Класс должен содержать такие закрытые члены: - длина массива;
- ссылка на массив; а также следующие открытые методы: - конструктор без параметров, содержащий инициализатор массива нулевыми элементами; - конструктор с параметрами, инициализирующий массив длины, вводимой с клавиатуры, случайных чисел в заданном диапазоне; - копирующий конструктор, создающий копию объекта с исходным массивом; - деструктор, уничтожающий массив; - метод модификации элемента массива, заданного его индексом; - метод, реализующий заданную обработку массива; - метод вывода элементов массива на консоль. Конструкторы и деструктор должны выводить сообщение о своем срабатывании. 4. Составить программу на языке программирования С#, в которой предусмотреть: - создание массива ar0 заданной длины с нулевыми элементами; - создание массива ar1 с длиной, вводимой с клавиатуры; - инициализацию массива ar1 случайными числами в заданном диапазоне; - копирование массива ar1 в новый массив arN; - модификацию произвольных элементов массива ar1; - выполнение обработки массива arN; - вывод массивов на всех стадиях вычислений; - конструкторы и деструктор должны выводить сообщения о своем выполнении. 5. Составить блок-схему для каждого метода класса.
Содержание отчета
1. Титульный лист. 2. Цель работы, индивидуальное задание (таблица). 3. Листинг программы. 4. Блок-схемы методов класса. 5. Результаты тестирования всех методов. 6. Описание различий в работе конструкторов. 7. Выводы.
Контрольные вопросы
Лабораторная работа №9
Тема: Базовый механизм наследования. Работа с матрицами.
Цель: изучение концепции наследования в ООП и его применение для организации работы с матрицами, освоить технологию перегрузки операторов
Теоретические положения
|
||||||
Последнее изменение этой страницы: 2021-09-26; просмотров: 71; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.23.101.60 (0.015 с.) |