Урок 9. Универсальные функции и классы при работе с массивами

Лабораторные работы си шарп и задания по теме «Язык программирования c sharp: универсальные методы и классы при работе с массивами»

Теория

Задания и лабораторные работы

Лабораторная работа 1. Использование универсальных методов и цикла Foreach при работе с массивами
  
Выполнить: Создайте класс MyFuncs и универсальный метод PrintArr для вывода массива элементов любого типа и любого размера. Для прохода по массиву используйте цикл foreach. Вызовите метод дважды: первый раз — для целочисленного массива, второй — для массива вещественного типа.

Пример выполнения:

Целочисленный массив:
1 6 2 7 5
Массив вещественных элементов:
1.2   6.4   2.1   7.5

  

[Название проекта: Lesson_9Lab1, название файла L9Lab1.cs]

✍ Алгоритм:

  • Создайте консольное приложение с именем Lesson_9Lab1.
  • В окне Обозреватель решений найдите файл Program.cs и переименуйте его в L9Lab1.cs.
  • Для того, чтобы при вводе и выводе информации в консоль не было бы необходимости постоянно писать название класса Console, необходимо включить данный класс в самом начале кода:
  • ...
    using static System.Console;
    ...
  • Далее, необходимо добавить новый класс. После закрывающейся фигурной скобки класса L9Lab1 объявите класс с именем MyFuncs. Для того чтобы сделать его доступным во всех классах и пространствах имен проекта необходимо использовать ключевое слово public:
  • public static class MyFuncs
        {
        }
    
  • Внутри класса MyFuncs создайте метод PrintArr для вывода элементов массива. Сделайте метод доступным, добавив ключевое слово public:
  • public static void PrintArr<T>(this T[] arr)
       {
       }
    
    Заметьте, что T используется для вывода массивов любого типа. Ключевое слово this означает, что мы расширяем этот тип данным методом.
  • В методе PrintArr добавьте код для вывода элементов массива. Используйте цикл foreach:
  • foreach (var x in arr)
      {
         Console.Write($"{x} ");
      }
    
    Цикл foreach используется для вывода массива любого размера. Переменная x принимает значения элементов массива, которые выводятся в консоль.
  • Перейдите в функцию Main() и объявите одномерный целочисленный массив с именем arr1 и инициализируйте его элементами:
  • static void Main(string[] args)
       {
       Console.WriteLine("Целочисленный массив:");
       int[] arr1 = new int[] { 1, 6, 2, 7, 5 };
    ...
    
    Важно ключевое слово Static.
    Для выделения памяти под новый экземпляр объекта необходимо использовать оператор new. После чего мы получаем доступ к членам объекта (полям и методам), используя точечную нотацию.
  • Вызовите PrintArr метод, используя точечную нотацию:
  • ...
    arr1.PrintArr();
    ...
    
    Точечная нотация обычно используется при обращении к объектам и их методам или полям (свойствам). arr1 — это экземпляр объекта класса массивов.
  • Далее создайте одномерный массив вещественных элементов (double) с именем arr2 и присвойте значения элементам массива. Вызовите метод:
  • ...
      Console.WriteLine("Массив вещественных элементов:");
      double[] arr2 = { 1.2, 6.4, 2.1, 7.5 };
      arr2.PrintArr();
    ...
    
  • Запустите приложение (CTRL+F5).
  • Сохраните решение и загрузите файл.

Задание 1:

Выполнить: Запустите приложение предыдущей лабораторной работы. Добавьте функцию, которая выводит элементы массива любого типа с четными индексами.

Указание: Создайте функцию PrintEvenIndexes для вывода элементов массива с четными индексами. Помните, что индексы начинаются с 0. Функцию можно разместить в классе MyFuncs, она должна быть универсальной (<T> вспомните теоретический материал об универсальных методах). Не забудьте о служебном слове this.
     
Пример выполнения:

Целочисленный массив:
1 6 2 7 5
Элементы с четными индексами:
1 2 5
Массив вещественный:
1,2  6,4  2,1  7,5  8,1
Элементы с четными индексами:
1,2  2,1  8,1

[Название проекта: Lesson_9Task1, название файла L9Task1.cs]


Лабораторная работа 2. Использование файла-класса при работе с массивами
  
Выполнить: Создайте класс с именем Calculator и функцию с именем Add, которая принимает различное количество параметров и выводит их сумму. Используйте цикл foreach для перебора элементов массива. Вызовите метод трижды: первый раз — с двумя параметрами, второй — с тремя параметрами, третий — с массивом элементов.

Пример выполнения:

результат с двумя параметрами (1, 2): 3
результат с тремя параметрами (1, 2, 3): 6
результат с массивом (1, 2, 3, 4, 5): 15

  

[Название проекта: Lesson_9Lab2, название файлов L9Lab2.cs и Calculator.cs]

✍ Алгоритм:

  • Создайте консольное приложение с именем Lesson_9Lab2. Переименуйте файл program.cs в L9Lab2.cs.
  • Создадим класс Calculator. Добавьте файл класса в проект. Назовите файл Calculator.
  • Чтобы сделать класс доступным во всех проектах и пространствах имен, добавьте ключевое public.
  •  public class Calculator
        {
        }
    
  • Создайте метод с именем Add, которое может принимать различное количество аргументов. Также используйте ключевое слово public:
  • public int Add(params int[] numbers)
            {
    
            }
    
    Метод Add с уровнем доступа public возвращает значение типа int (integer). В качестве параметра метода указано ключевое слово params (для того, чтобы добавить возможность принимать различное количество аргументов), другим параметром является массив с именем numbers.
  • Итак, у нас есть массив и мы хотим вернуть сумму всех элементов этого массива.
  • Сначала, создайте переменную sum и инициализируйте ее значением 0:
  • var sum = 0;
    
  • Далее используйте цикл foreach для перебора элементов массива и добавления их к переменной sum:
  • foreach (var number in numbers)
                {
                    sum += number;
                }
    
  • И наконец, функция должна возвратить значение sum:
  • return sum;
    
  • Вернитесь в основной файл (L9Lab2.cs file) в окне Обозреватель решений и в функции Main создайте экземпляр класса с именем Calculator:
  • static void Main(string[] args)
            {
                var calculator = new Calculator();
            }
    
    Для того чтобы выделить память для нового экземпляра объекта, следует использовать оператор new. После чего можно использовать точечную нотацию для доступа к методам и свойствам объекта.
  • Вызовите метод Add с двумя параметрами — числами и выведите результат в консоль:
  • Console.WriteLine($"результат с двумя параметрами (1, 2): {calculator.Add(1, 2)}"); 
    
  • Запустите программу (CTRL+F5).
  • Таким же образом можно вызвать метод с тремя и пятью параметрами:
  • Console.WriteLine($"результат с тремя параметрами (1, 2, 3): {calculator.Add(1, 2, 3)}");
    
  • Запустите программу.
  • Можно также вызвать метод для вывода массива:
  • Console.WriteLine($"результат с массивом (1, 2, 3, 4, 5): {calculator.Add(new int[]{1,2,3,4,5})}");
    
  • Сохраните решение и загрузите файл.

Задание 2:

Выполнить: Создайте метод (функцию) для нахождения минимума среди целочисленной последовательности и для изменения значения найденного минимального элемента в 0. Вызовите метод дважды: с тремя целыми числами и с целочисленным массивом в качестве параметров. Нельзя использовать стандартную функцию min.

Указание 1: Create a class named Mimimum and a function named FindMin within the class. The function returns an array, that’s why you must use the signature with return type int[]:

public int[] FindMin(params int[] numbers)

Указание2: В коде метода необходимо использовать циклы foreach и for:
1. Цикл foreach необходимо использовать для поиска минимума (как найти минимальный элемент: здесь (lab 3), ино используйте цикл foreach).
2. Цикл for необходим для поиска значений, которые равны минимальному, и присваиванию им значения 0.
  
Указание3: Функция возвращает массив, поэтому при вызове функции возвращаемое значение должно быть сохранено в переменную-массив:

int[] result1 = minimum.FindMin(5, 3, 6);
foreach (var i in result1)
            {
                ...
            }

  
Пример выполнения:

результат с тремя параметрами (5, 3, 6):
5
0
6

результат с целочисленным массивом ( 5, 3, 3, 6, 5 ) :
5
0
0
6
5

  
[Название проекта: Lesson_9Task2, название файлов L9Task2.cs и Minimum.cs]