
- •Лабораторная работа 1 Тема: Типы данных и операторы языка с#. Массивы. Строки. Регулярные выражения
- •Типы данных c#
- •Преобразования типов
- •Преобразования строк в число. Класс Convert
- •Массивы в c#
- •Int[] k; //k – одномерный массив
- •Базовый класс System.Array
- •Строки в с# Класс Сhar
- •Класс String
- •Строковые константы
- •Пространство имен RegularExpression и классы регулярных выражений
- •Синтаксис регулярных выражений
- •Классы пространства RegularExpressions
- •1. Проработать примеры 1-8, данные в теоретических сведениях. Создать на их основе программы. Получить результаты работы программ и уметь их объяснить. Внести их в отчет с комментариями.
- •2. Выполнить два задания на двумерный массив по заданному номеру варианта и номеру, отсчитанному с конца.
- •3. Выполнить два задания на строки по заданному номеру варианта и номеру, отсчитанному с конца. Использовать в задачах два класса строк: String и StringBuilder.
- •4. Выполнить задание на применение регулярных выражений. Выбрать одно по заданному номеру.
Базовый класс System.Array
Все классы-массивы являются потомками класса Array из библиотеки FCL (статическом компоненте Framework .Net.) Помимо наследования свойств и методов класса Object и вышеперечисленных интерфейсов, класс Array имеет довольно большое число собственных методов и свойств. Благодаря такому мощному родителю, над массивами определены самые разнообразные операции - копирование, поиск, обращение, сортировка, получение различных характеристик. Массивы можно рассматривать как коллекции и устраивать циклы foreach для перебора всех элементов.
Таблица 1.3 - Свойства класса Array
Свойство |
Родитель |
Описание |
IsFixedSize |
Интерфейс IList |
True, если массив статический |
Length |
|
Число элементов массива |
Rank |
|
Размерность массива |
Таблица 1.4 - Статические методы класса Array
Метод |
Описание |
BinarySearch() |
Двоичный поиск. |
Clear() |
Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк. |
CopyTo() |
Копирование части или всего массива в другой массив. Описание и примеры даны в тексте |
GetLength() |
Используется для определения количества элементов в указанном измерении массива |
IndexOf() |
Индекс первого вхождения образца в массив. Описание и примеры даны в тексте |
LastIndexOf() |
Индекс последнего вхождения образца в массив. Описание и примеры даны в тексте |
Reverse() |
Обращение одномерного массива. |
Sort() |
Сортировка одномерного массива встроенных типов данных. |
GetValue() SetValue() |
Возвращает или устанавливает значение указанного индекса для массива. |
GetUpperBound() GetLowerBound() |
Используется для определения нижней или верхней границы выбранного измерения массива. |
// Программа 1. Применение методов класса Array
public static int Main(string[] args) {
string[]firstNames={"Саша", "Маша", "Олег", "Света", "Игорь"};
Console.WriteLine("Here is the array:");
for(int i=0; i< firstNames.Length; i++)
Console.WriteLine(firstNames[i]+"\t");
Console.WriteLine("\n");
Array.Reverse(firstNames);
for(int i=0; i< firstNames.Length; i++)
Console.WriteLine(firstNames[i]+"\t");
Console.WriteLine("\n");
Console.WriteLine("Cleared out all but one…");
Array.Clear(firstNames,1,4);
for(int i=0; i< firstNames.Length; i++)
Console.WriteLine(firstNames[i]+"\t\n");
return 0;
}
В следующей процедуре, формальный аргумент которой будет принадлежать родителю всех классов-массивов, можно передавать массив любого класса в качестве фактического аргумента:
// Программа 2. Принение методов класса Array
public static void PrintAr(string name, Array A) {
Console.WriteLine(name);
switch (A.Rank) {
case 1:
for(int i = 0; i<A.GetLength(0);i++)
Console.Write("\t" + name + "[{0}]={1}", i, A.GetValue(i));
Console.WriteLine();
break;
case 2:
for(int i = 0; i<A.GetLength(0);i++) {
for(int j = 0; j<A.GetLength(1);j++)
Console.Write("\t" + name + "[{0},{1}]={2}", i,j, A.GetValue(i,j));
Console.WriteLine();
}
break;
default: break;
}}
Примеры различных операций, доступных при работе с массивами, благодаря наследованию от класса Array:
// Программа 3. Применение методов класса Array
public void TestCollection() { //операции над массивами
int nc = 7;
int[] col1 = new int[nc], col2 = new int[nc];
double[] col3 = new double[nc];
int[,] col4 = new int[2,2];
CreateCollection(col1); //заполнение случайными числами
PrintCollection("col1",col1);
CreateCollection(col2);
PrintCollection("col2",col2);
CreateCollection(col3);
PrintCollection("col3",col3);
CreateTwoDimAr(col4);
PrintCollection("col4",col4);
// поиск элемента
int first = Array.IndexOf(col1, 2);
int last = Array.LastIndexOf(col1,2);
if (first == -1)
Console.WriteLine("Нет вхождений 2 в массив col1");
else if (first ==last)
Console.WriteLine("Одно вхождение 2 в массив col1");
else
Console.WriteLine("Несколько вхождений 2 в массив col1");
//first = Array.IndexOf(col4, 4); только одномерный массив
Array.Reverse(col1);
Console.WriteLine("Обращение массива col1:");
PrintCollection("col1",col1);
//копирование
Array.Copy(col1, col3, col1.Length);
Console.WriteLine(" Массив col3 после копирования массива col1:");
PrintCollection("col3",col3);
Array.Copy(col1,1,col2,1,2);
Console.WriteLine("копирование двух элементов col1 в col2:");
PrintCollection("col1",col1);
PrintCollection("col2",col2);
//быстрая сортировка Хоара
Array.Sort(col1);
Console.WriteLine("Отсортированный массив col1:");
PrintCollection("col1",col1);
first = Array.BinarySearch(col1, 2);
Console.WriteLine("Индекс вхождения 2 в col1: {0}",first);
//Создание экземпляра (массива)
Array my2Dar = Array.CreateInstance(typeof(double), 2,3);
PrintCollection("my2Dar",my2Dar);
//клонирование
my2Dar = (Array)col4.Clone();
Console.WriteLine("Массив my2Dar после клонирования col4:");
PrintCollection("my2Dar",my2Dar);
//копирование CopyTo
col1.CopyTo(col2,0);
Console.WriteLine("Массив col2 после копирования col1:");
PrintCollection("col2",col2);
}
В этой процедуре продемонстрированы вызовы различных статических методов класса Array. Для метода Copy показан вызов двух реализаций этого метода, когда копируется весь массив и часть массива. Закомментированный оператор вызова метода IndexOf напоминает о невозможности использования методов поиска при работе с многомерными массивами.