Символы и строки.

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

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

Двумерный массив можно описать:

Тип [,] имя;

Тип [,] имя = new тип[разм_1,разм_2];

Тип [,] имя = {Список_инициализаторов};

Тип [,] имя = new тип [,] {Список_инициализаторов};

Тип [,] имя = new тип [разм_1,разм_2]

{Список_инициализаторов};

 

Примеры описаний:

Int [,] a; // элементов нет

Int [,] b=new int [2,3]; // элементов равны нулю

Int [,] c={{1,2,3},{4,5,6}}; // подразумевается new

Int [,] c = new int [,] {{1,2,3},{4,5,6}}; // избыточное описание

Если список инициализации не задан, размерности могут быть не только константами, но и выражениями типа, приводимого к целому. К элементу двумерного ( прямоугольного) массива обращаются, указывая номера строки и столбца, на пересечении которых он расположен, например:

A[2,3]

Матрица из m строк и n столбцов имеет вид:

a00 a01 a0n-1
am-10 am-11   am-1n-1

 

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

Описание ступенчатого массива: тип [][] имя;

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

int [][]a=new int [3][]; // выделение памяти под ссылки на три строки

a[0]=new int[5]; // выделение памяти под 0-строку(5 элементов)

a[1]=new int[3]; // выделение памяти под 1-строку(3 элемента)

a[2]=new int[4]; // выделение памяти под 2 строку (4 элемента)

a[0],a[1],a[2] – это отдельные массивы, к которым можно обращаться по имени. Другой способ выделения памяти: int [][] a = { new int[5], new int[3], new int[4]}.

К элементу ступенчатого массива обращаются, указывая каждую размерность в своих квадратных скобках, например: a[2][1]. В остальном использование ступенчатых массивов не отличается от использования прямоугольных. Их удобно использовать для работы с треугольными матрицами большого объема.

Все массивы имеют общий базовый класс Array.

Символьный тип char, предназначен для хранения символов в кодировке Unicode. Символьная константа это символ, заключенный в апострофы. Символьный тип соответствует стандартному классу char, библиотеки .Net. Из пространства имен System. Char ch=’a’. Для ввода символов можно использовать метод Parse, который преобразовывает строку, содержащую 1 символ в символ, типа char.

Char ch=char.Parse(console.ReadLine());

Массив символов, как и массив любого типа, построен на основе базового класса array. Символьный массив, можно инициализировать задавая его элементы или можно применить метод ToCharArray класса String который разбивает исходную строку на отдельные символы.

Char[]x={‘1’,’m’,’2’,’a’};

Char[]y=”урок”.ToCharArray();

Тип String, предназначен для работы со строками символов в кодировке Unicode, ему соответствует базовый класс System.String.

Для строк определены следующие операции:

Присваивание string s=”урок”;

Проверка на равенство

Проверка на неравенство

Обращение к индексу

Сцепление

Методы

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

[атрибуты][спецификаторы] тип метода ([пар-ры])

{тело метода;}

При описании можно использовать семь спецификаторов имеющих тот же смысл что и для полей. А также спецификаторы:

virtual

override

abstract

extern

Чаще всего для методов используется спецификатор доступа public. Тип определяет значение какого типа, вычисляется с помощью метода. Если метод не возвращает никакого значения, то в его заголовке задается тип void. Если при выполнении метода происходит возврат в то место вызывающей функции, откуда был вызван метод. Передача туда значения выражения, то используется оператор Return;

Параметры используются для обмена информации с методами. Параметр представляет собой локальную переменную, которая при вызове метода принимает значение соответствующего аргумента. Область действия параметра это весь метод. Метод не возвращающее значение вызывается отдельным оператором, а метод возвращающий значение – в составе выражения в правой части оператора присваивания. Параметры, описываемые в заголовке метода, определяют множество значений аргументов, которые можно передавать в метод. Список аргументов и список параметров должны соответствовать друг другу. Метод, описанный со спецификатором Static должен обращаться только должен обращаться к статическим полям класса, статический метод вызывается через имя класса, а обычный через имя экземпляра. Пи вызове метода выполняются следующие действия:

1) Вычисляются выражения стоящие на месте аргументов.

2) Выделяется память под параметры метода в соответствии с их типом.

3) Каждому из параметров сопоставляется соответствующий аргумент.

4) Выполняется тело метода.

5) Если метод возвращает значение, оно передается в точку вызова, если метод имеет тип void то управление передается на оператор, следующий после вызова.

Существует 2 способа передачи параметров:

По значению

По ссылке

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

Параметры – значение

Параметры – ссылки служ. слово ref

Выходные параметры служ. слово out

Параметры – массивы служ. слово params

Параметр – массив должен располагаться один, и последним в списке.
Метод

public static int Sum(int x, int y)

{int s=x+y

return s; }

Если используется слово Out, то можно использовать ключевое слово void.

public static void Sum (int x, int , out int s)

{s=x+y;}

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

static void Main();

{ int S;

Sum(40,90,out s); }

Различия между выходными и ссылочными параметрами, заключается в том, что выходные параметры не требуется инициализировать перед передачей их методу, так как сам метод должен присвоить значения, выходным параметрам. Ссылочные параметры необходимо инициализировать до того как они буду переданы методу. Так как передается ссылка, на существующую переменную. Ссылочные переменные нужны тогда когда необходимо позволить методу изменять данные объявленные в контексте вызова. Модификатор params позволяет создавать методы, к которым можно направить множество однотипных аргументов в виде одного параметра.

Написать метод вычисляющий среднюю велечину массива.

public static double Sr(params double[]a)

{double s=0;

for (int i=0; i<a.Length; i++)

s+=a[i];

return s/a.length;

}

Классы

Класс это тип данных определяемый пользователем. Он должен представлять собой логическую сущность, например, являться моделью реального объекта или процесса. Элементами класса является данные и функции, предназначенные для их обработки. Описание класса содержит ключевое слово класс, за которым следует его имя, а далее в фигурных скобках тело класса. Для класса можно задавать базовые классы (предки) и атрибуты и спецификаторы, определяющие различные характеристики класса.

[атрибуты] [спецификаторы] class имя класса [ :предки]

{тело класса}

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

Спецификаторы:

Спецификатор Описание
New Задается новое описание класса, взамен унаследованного от предка.
public Доступ неограничен
protected Доступ только из элементов данного и производного классов
internal Доступ только из данной программы (сборки)
protected internal Доступ только из данного и производных классов или из данной программы.
private Доступ только из элементов класса, внутри которого описан данный класс
abstract Абстрактный класс
Sealed Бесплодный класс
Static  

Спецификаторы 2-6 это спецификаторы доступа, если не указан спецификатор, то по умолчанию будет internal. Класс является обобщенным понятием, определяющий характеристики и поведение, некоторого множества, конкретных объектов этого класса. Они называются экземплярами или объектами класса. Объекты создаются явным или неявным образом, то есть либо программистом, либо системой. Программист создает экземпляр класса, с помощью операции new. Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные. Для работы с данными класса используются методы класса, они ещё называются статическими методами, для работы с данными экземпляра используются методы экземпляра. Или просто методы.

Элементами класса могут быть:

1. Константы (литералы)

2. Поля (они содержат данные класса)

3. Методы (реализующие вычисления или другие действия, выполняемые классом или экземпляром)

4. Свойства (определяющие характеристики класса)

5. Конструкторы (реализует действия по инициализации экземпляров или классов в целом)

6. Деструкторы (определяют действия, которые необходимо выполнить до того, как объект будет уничтожен)

7. Индексаторы (они обеспечивают возможность доступа к элементам класса, по их порядковому номеру)

8. Операции (задают действия с объектами с помощью знаков операции)

9. События (определяют уведомления, которые может генерировать класс)

10. Типы (это типы данных внутренних по отношению класса)

Данные, которые содержатся в классе, могут быть переменными или константами. При описании элементов класса, можно указывать атрибуты или спецификаторы. Могут использоваться спецификаторы: new, public, protected, internal, protected internal, private, static, readonly, vola title(поле может изменяться процессом или системой). По умолчанию элементы класса считаются закрытыми (private). Методы класса имеют непосредственный доступ к его закрытым полям. Обращение к полю класса с помощью операции доступа. Справа от точки задается имя поля, слева имя экземпляра, для обычных полей, или имя класса для статических.

 

Описать класс Sfera с полями радиус сферы, материал, метод вычисления объема.

class Sfera

{public double r;

public static string material =”Metal”;

public double v(double r);

{ double ob=4/3 * Math.PI*Math.Pow(r,3);

Return Ob

}

}

Class Program

static void Main();

{ Sfera Ekz1 = new Sfera();

double v2 = Ekz1.v(5);

Console.WriteLine(“Объеv=”+v2);

Console.WriteLine(Sfera.material);

Console.ReadKey();

 

Конструктор предназначен для инициализации объекта. Он вызывается автоматически при создании класса с помощью операции New. Имя конструктора совпадает с именем класса.

1. Конструктор не возвращает значения, даже типа void.

2. Класс может иметь несколько конструкторов с разными параметрами, для разных видов инициализации.

3. Если не указано ни одного конструктора или какие-то поля не были инициализированы, то поля значимым типов присваивается 0, полям ссылочного типа null.

4. Конструктор, вызываемый без параметров называется конструктором по умолчанию.

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