Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика ответы на вопросы..docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
520.48 Кб
Скачать

Двумерные массивы

Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает один индекс, а на столбцы — другой.

75. Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в С# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.

Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых указывается их размерность. Например, для объявления двумерного ступенчатого массива служит следующая общая форма:

тип [][] имя массива = new тип[размер] [];

где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной.

Ступенчатые массивы находят полезное применение не во всех, а лишь в некоторых случаях. Так, если требуется очень длинный двумерный массив, который заполняется не полностью, т.е. такой массив, в котором используются не все, а лишь отдельные его элементы, то для этой цели идеально подходит ступенчатый массив.

76. Каждый создаваемый массив получает большую часть функциональности от класса System.Array. Общие члены этого класса позволяют работать с массивом с использованием полноценной объектной модели. Таким образом, методы и свойства, определенные в классе Array, можно использовать с любым массивом С#. Давайте разберем некоторые полезные особенности класса Array.

Создание массивов

Класс Array является абстрактным, поэтому создать массив с использованием какого-либо конструктора нельзя. Однако вместо применения синтаксиса С# для создания экземпляров массивов также возможно создавать их с помощью статического метода CreateInstance(). Это исключительно удобно, когда заранее неизвестен тип элементов массива, поскольку тип можно передать методу CreateInstance() в параметре как объект Туре

Копирование массивов

Поскольку массивы — это ссылочные типы, присваивание переменной типа массива другой переменной создает две переменных, ссылающихся на один и тот же массив. Для копирования массивов предусмотрена реализация массивами интерфейса ICloneable. Метод Clone(), определенный в этом интерфейсе, создает неглубокую копию массива. Если элементы массива относятся к типу значений, то все они копируются, если массив содержит элементы ссылочных типов, то сами эти элементы не копируются, а копируются лишь ссылки на них.

Сортировка и поиск

В классе Array реализован алгоритм быстрой сортировки (Quicksort) элементов массива. Метод Sort() требует от элементов реализации интерфейса IComparable. Простые типы, такие как System.String и System.Int32, реализуют IComparable, так что можно сортировать элементы, относящиеся к этим типам.

77. Символьный тип char предназначен для хранения символов в кодировке Unicode. Символьный тип относится к встроенным типам данных C# и соответствует стандартному классу Charбиблиотеки .NET из пространства имен System. В этом классе определены статические методы, позволяющие задать вид и категорию символа, а также преобразовать символ в верхний или нижний регистр и в число. Некоторые методы приведены в таблилце , с остальными можно ознакомиться по учебнику

78. В первых языках программирования строковому типу уделялось гораздо меньше внимания, чем арифметическому типу или массивам. Поэтому в разных языках строки представлены по-разному и стандарт на строковый тип сложился относительно недавно. Когда говорят о строковом типе, то обычно различают тип, представляющий:

  • отдельные символы, чаще всего, его называют типом char;

  • строки постоянной длины, часто они представляются массивом символов;

  • строки переменной длины – это, как правило, тип string, соответствующий современному представлению о строковом типе.

Символьный тип char, представляющий частный случай строк длиной в 1 символ, полезен во многих задачах. Основные операции над строками – это разбор и сборка. При их выполнении приходится, чаще всего, доходить до каждого символа строки. При таком подходе получение i-го символа строки становится такой же простой операцией, как и получение i-го элемента массива. Следовательно, эффективно реализуются обычные операции над строками – определение вхождения одной строки в другую, выделение подстроки, замена символов строки. Однако заметьте, представление строки массивом символов хорошо только для строк постоянной длины. Массив не приспособлен к изменению его размеров, вставки или удалению символов (подстрок). Наиболее часто используемым строковым типом является тип, обычно называемый string, который задаёт строки переменной длины. Над этим типом допускаются операции поиска вхождения одной строки в другую, операции вставки, замены и удаления подстрок.

79. Основным типом при работе со строками является тип string, задающий строки переменной длины. Класс String в языке C# относится к ссылочным типам. Над строками (объектами этого класса) определён широкий набор операций. Объекты класса String объявляются как все прочие объекты простых типов. Можно сконструировать строку из:

  • символа, повторенного заданное число раз;

  • массива символов char[];

  • части массива символов.

Операция присваивания имеет важную особенность. Поскольку string – это ссылочный тип, то в результате присваивания создаётся ссылка на константную строку, хранимую в "куче". С одной и той же строковой константой в "куче" может быть связано несколько переменных строкового типа. Но эти переменные не являются псевдонимами, т.е. не являются разными именами одного и того же объекта. Дело в том, что строковые константы в "куче" не изменяются, потому что класс string относится к неизменяемым классам (immutable). Поэтому когда одна из переменных получает новое значение, она связывается с новым константным объектом в "куче". Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике значимого присваивания. Отсюда следует, что в отличие от других ссылочных типов операции, проверяющие эквивалентность (совпадение строк), сравнивают значения строк, а не ссылки. Эти операции выполняются как над значимыми типами.

80.

81.  Класс StringBuilder не настолько развит, как String — в смысле количества методов, которые им поддерживаются. Обработка, которую может выполнять StringBuilder, ограничена подстановкой, добавлением и удалением текста из строк. Однако все это он делает гораздо более эффективно.

Когда конструируется строка классом String, выделяется ровно столько памяти, сколько необходимо для хранения данной строки. StringBuilder, однако, поступает лучше и обычно выделяет больше памяти, чем нужно в данный момент. У вас, как разработчика, есть возможность указать, сколько именно памяти должен выделить StringBuilder, но если вы этого не сделаете, то будет выбран объем по умолчанию, который зависит от размера начального текста, инициализирующего экземпляр StringBuilder. Класс StringBuilder имеет два главных свойства:

Length, показывающее длину строки, содержащуюся в объекте в данный момент:

Capacity, указывающее максимальную длину строки, которая может поместиться в выделенную для объекта память.

Любые модификации строки происходят внутри блока памяти, выделенного экземпляру StringBuilder. Это делает добавление подстрок и замену индивидуальных символов строки очень эффективными. Удаление или вставка подстрок неизбежно остаются менее эффективными, потому что при этих операциях приходится перемещать в памяти части строки. Только при выполнении ряда действий, которые приводят к превышению выделенной емкости строки, приходится выделять новую память и, возможно, полностью перемещать ее содержимое. В дополнение к избыточной памяти, выделяемой изначально на основе экспериментов, StringBuilder имеет свойствоудваивать свою емкость, когда происходит переполнение, а новое значение емкости не установлено явно.

Метод

Назначение

Append()

Добавляет строку к текущей строке

AppendFormat()

Добавляет строку, сформированную в соответствии со спецификатором формата

Insert()

Вставляет подстроку в строку

Remove()

Удаляет символ из текущей строки

Replace()

Заменяет все вхождения символа другим символом или вхождения подстроки другой подстрокой

ToString()

Возвращает текущую строку в виде объекта System.String (переопределение метода класса System.Object)

82.Целые случайные числа Для того чтобы получить целые случайные числа в C#, необходимо объявить переменную типа Random. Вот пример, как получить случайныые целые числа: Random rand = new Random(); int temp; temp = rand.Next(100);   Причем метод Next имеет три перегрузки: 1. rand.Next(); Этот метод говорит о возвращении неотрицательного целого числа 2. rand.Next(max); Этот метод говорит о возвращении неотрицательного целого числа не превышающее переменную max. То есть значения от 0 до max, но при этом значение max не будет выводится 3. rand.Next(min , max); Этот метод говорит о возвращении неотрицательного целого числа в пределе от min до max. Другими словами диапазов от [min до max-1]