Главная страница

Массив это конечнаяупорядоченнаясовокупность однотипныхданных, связанная с упорядоченным набором целых чисел, называемых индексами. Индекс


Скачать 69.42 Kb.
НазваниеМассив это конечнаяупорядоченнаясовокупность однотипныхданных, связанная с упорядоченным набором целых чисел, называемых индексами. Индекс
Дата30.03.2023
Размер69.42 Kb.
Формат файлаdocx
Имя файлаOtvety_na_kv-shpargalki_k_massivam.docx
ТипДокументы
#1025104

Что такое массив данных? Как и в каком разделе программного кода описываются массивы?

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

Индекс представляет собой адрес элемента в массиве. Массив характеризуется именем, размерностью и размером.

Имя массива аналогично имени любой переменной (поля) используется для доступа к массиву и его элементам.

Размерность массива определяется количествоминдексов, необходимых для однозначного доступа к элементу массива: один индекс – массив одномерный (список), два индекса двумерный (таблица) и т. д.

Размер массива определяется количествомэлементов. Размер одномерного массива обычно указывают в виде числа, размер двумерного – в виде пары чисел m×n (число строк m на число столбцов n) и т.д. Также часто используют термин длина массива, обозначающий общее число элементов массива.

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

Для работы с элементами массива, как правило, используются операторы цикла, чаще всего цикл с параметром.

      1. Объявление одномерных массивов

Формат объявления одномерных массивов:

Тип[] Имя_массива;

Например:

int[] mas;


      1. Инициализация одномерных массивов

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

        1. Инициализацияспомощьюлитералов

Инициализировать массив можно сразу при его объявлении, явно прописывая значение каждого элемента. Такая инициализация массива возможна только с одновременным объявлением (отложенная инициализация невозможна):

double[] x ={5.5, 6.6, 7.7, 1.0};

*Здесь объявлен и проинициализирован массив x вещественных чисел, состоящий изчетырехэлементов


        1. Инициализацияспомощьювызоваконструкторамассива

При вызове конструктора используется ключевое слово new и в квадратных скобках указывается размер массива. Значения элементов заполняются значениями по умолчанию (например, для int это 0, для string – пустая строка).

int [] d = new int [5];

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

Примечание. Нижняя граница индексов массива в C# по умолчанию равна нулю! Указывая верхнюю границу массива, пользователь выделяет память под определенноеколичество элементов. В примере массив d имеет размер 5, но индексы элементов будутизменятьсяот 0 до 4.
Возможно проинициализировать массив и следующим образом, используя и конструктор, и явное указание значений всех элементов:

int[] mas = new int[2] {3, 5};

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

double[] x;

x = new double[4] {5.5, 6.6, 7.7, 1.0};
int[] d;

d = new int[5];
В качестве размера массива может быть использована не константа, а переменная. В этом случае говорят о массиве переменной длины.

int size = int.Parse(textBox1.Text);

int[] m = new int [size];

*Здесьразмермассива считываетсяизтекстовогополя

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

double[] x ={5.5, 6.6, 7.7, 1.0}; x[0]+=0.2;

*Здесьзначениенулевогоэлементамассиваx[0]увеличитсяна0,2истанетравным


      1. Формирование одномерных массивов псеводослучайных чисел

Для работы со случайными числами (на самом деле, псевдослучайными, поскольку для генерации этих чисел используется определённый алгоритм) в библиотеке .NET Framework имеется класс Random пространства имен System.

Методы этого класса вызываются для конкретного экземпляра, т.е.

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

Random b = new Random();

*Здесьnew ключевоесловадлявызоваконструктора;Random класс,предназначенныйдляработыспсевдослучайнымичислами;b имясоздаваемогоэкземпляракласса Random.

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

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

Random b = new Random(k);

*Здесьkпараметртипаint.

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

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

Таблица1

Основные методы экземпляра класса System.Random

Название

Описание

Next()

Возвращает целое положительное число типа int

во всем положительном диапазоне

Next(макс)

Возвращает целое положительное число в диапазоне [0; макс]

Next(мин,макс)

Возвращает целое положительное число в диапазоне [мин; макс]

NextDouble()

Возвращает вещественное положительное число в диапазоне [0; 1)


Пример использования метода Next() класса Random для заполнения одномерного массива случайными числами из диапазона [-10, 10]:
int size = 5;

int[] massiv = new int[size]; Random rnd = new Random();

for (int i = 0; i < size; i++)

{
massiv[i] = rnd.Next(-10, 10);

}



      1. Класс System.Array

На самом деле все типы данных в .NET являются объектами (экземплярами) некоторых классов. Это касается и массивов – любой массив является экземпляром класса System.Array.

Все методы класса Array работают с массивами только фиксированной длины (размер массива не может увеличиваться или уменьшаться после инициализации).

В классах библиотеки .NET Framework есть два типа методов: общие (статические) методы класса и методы экземпляра класса. Общий метод реализован непосредственно в классе для всех его объектов, и определяется только именем класса. Методы экземпляра основываются на отдельном экземпляре класса и должны уточняться именем этого экземпляра.

Создать экземпляр класса можно с помощью конструктора new.

Некоторые методы и свойства класса Array представлены в табл. 2.

Таблица2


Название

Описание

Свойства

Length

Позволяет узнать общее число элементов в массиве

Статическиеметодыкласса

IndexOf()

Ищет первое вхождение в массив указанного объекта

LastIndexOf()

Ищет последнее вхождение в массив указанного объекта

Sort()

Позволяет сортировать возрастанию

элементы массива

по

Reverse()

Изменяет порядок элементов на обратный

Copy()

Копирует часть одного массива в другой

Методыэкземпляракласса

Count()

Определяет количество элементов в массиве

GetValue()

Ищет значение элемента с указанным индексом

SetValue()

Присваивает значение указанной позиции

элементу, находящемуся

в

CopyTo()

Копирует все элементы одного массива в другой массив, начиная с указанного индекса


Примечание:некоторыеизуказанныхметодовявляются«перегруженными»,т.е.фактически представляют собой несколько методов с одним именем, но имеющих разноеколичествопараметров,причемтиппараметровтожеможетотличаться.
Если в программе возникает необходимость частого обращения к некоторой группе операторов, то рационально выделить такую группу в самостоятельный блок, к которому можно обращаться по имени из любого места в программе. Такие программные блоки, созданные самим пользователем, раньше называли подпрограммами (процедурами или функциями). С появлением технологии объектно-ориентированного программирования подпрограммы стали называть методамикласса.

В C# и процедуры и функции существуют только как методы

некоторого класса, они не существуют вне класса.

Синтаксически в описании метода различают две части: заголовок метода и его тело.

Синтаксис заголовка метода:
[модификатор доступа] тип_результата имя_метода ([список_аргументов])

Модификатор доступа (определяет область видимости):

  • public метод открыт и доступен для вызова;

  • рrivate (по умолчанию) метод предназначен для внутреннего использования в классе и доступен для вызова только в теле методов текущего класса.

Существуют и другие специфичные модификаторы доступа:

protected, internal и др.

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

В типе результата метода указывается тип возвращаемого значения (например, int или int[]). Если метод не должен возвращать никакого значения, то указывают ключевое слово void (тогда метод является

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

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

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

Примеры заголовков методов



// внутренняя процедуракласса, не принимающая аргументов

private void A()

{…}

// внутренняя функциякласса

int B()

{…}

// процедура класса доступна клиентам и потомкам класса

public void C()

{…}



Список аргументов метода может быть пустым, а может содержать

фиксированное число параметров, разделяемых запятой.

Синтаксис объявления формального параметра:

[ref|out] тип_параметра имя_параметра

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

Аргументы в метод могут быть переданы:

  • по значению (используется по умолчанию);

  • по ссылке (ref).

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

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

Все параметры метода могут быть (не обязательно) разделены на:

    • входные (in),

    • выходные (out),

Модификатор in указывает, что данный параметр будет передаваться в метод по ссылке, однако внутри метода его значение параметра нельзя будет изменить.

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

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

Синтаксис вызова метода:

имя_метода([список_параметров])

Между списком параметров, указанным при объявлении метода, и списком параметров, указываемых при вызове метода, должно выполняться

определенное соответствие по числу, порядку следования, типу и статусу параметров. Если параметр объявлен с ключевым словом ref или out, то фактический параметр должен сопровождаться таким же ключевым словом в точке вызова (соответствие по статусу).

Однако необходимо знать, что объектно-ориентированное программирование поддерживает так называемую «перегрузку» методов, когда метод может принимать различное количество аргументов

Созданиеклассовпроекта

Когда создаются многооконные приложения, то возникает необходимость использования одних и тех же объектов в программных кодах разных форм. При работе с общими переменными и общими пользовательскими методами, глобальными относительно всего приложения, т.е. доступными в программном коде любойформы приложения, в C# используются классы проекта, либо уже имеющиеся, например, классы созданных форм, либо создаются новые дополнительные классы.

Создать новый класс можно, выполнив команду Project  Add Class.В появившемся окне Add New Item следует задать имя класса и нажать кнопку Add. Далее, в созданный класс, следует поместить коды описания глобальных переменных и глобальных методов.

Переменные и методы, объявленные в классе с помощью модификатора Public, становятся глобальными по отношению ко всем формам проекта. Если в объявлении добавлен еще и модификатор Static, то создаются общие (статические) методы класса, их вызов идентифицируется именем класса. Если в объявлении нет модификатора Static, то создаются методы экземпляра класса, и их вызов идентифицируется именем экземпляра класса, экземпляр следует создать с помощью конструктора new, до использования метода.

2-МЕРНЫЕ МАССИВЫ
Массив это конечная упорядоченная совокупность однотипных данных, которая связана с упорядоченным набором целых чисел, называемых индексами.

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

Местоположение элемента двумерного массива задается его индексами (номером строки и номером столбца), которые записываются после имени массива в квадратных скобках через запятую. Например, запись A[0,1] указывает на элемент массива A, находящийся в нулевой строке и первом столбце. Индексация по умолчанию начинается с нуля.

В качестве индексов могут быть использованы константы, переменные или выражения целого типа. Например, mas[0,1], mas[i,j], mas[b*5+2,i+1]

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


    1. Работа с двумерными массивами


Формат объявления двумерных массивов аналогичен формату объявления одномерных, однако, в квадратных скобках указывается запятая:

тип [,] имя_массива;

Например, запись int [,] arr объявит двумерный массив с именем

аrr, состоящий из целых чисел.

Можно перечислить несколько массивов одного типа через запятую:

double [,] a, b, c;

Перед использованием массивов их необходимо инициализировать, можно сразу при объявлении:

      1. с помощью литеральных значений

double[,] x ={{5.5,6.6},{3,4}}; //массив из 4 элементов

      1. вызовом конструктора массива

int [,] d = new int [2,3]; //всем 6 элементам массива d

//присваивается значение 0 Примечание1.Длямассиваdвыделяетсяпамятьпод6элементов,которыебудутрасположенывдвухстрокахитрехстолбцах,приэтомвсемэлементамбудетприсвоенозначение0.

Примечание2.НижняяграницаиндексовмассивавC#поумолчаниюравна нулю!
Проинициализировать массив можно и позднее, воспользовавшись возможностью отложенной инициализации:

Double [,] a;


int

[,]

d;

a =

new

double [3,2] {{5.5, 6}, {7,1.2},{4,3}};

d =

new

int [3,5];


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

int size_m = int.Parse(textBox1.Text);

int size_n = int.Parse(textBox2.Text);

int [,] massiv = new int [size_m, size_n];
В общем же случае в программном коде могут использоваться массивы различных размерностей: одно-, двух-, трехмерные и т.д. Объявление многомерного массива в общем случае выполняется следующим образом:

тип [, ,] имя_массива;

Таким образом, число запятых, увеличенное на единицу, равно размерности массива.


    1. Элемент управления DataGridView


Использовать текстовое поле TextBox для ввода-вывода данных из/в таблицу бывает не всегда удобно. Для работы с табличными данными целесообразно использовать элемент управления DataGridView , доступный в палитре Данные на Панели элементов.

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

При добавлении данного контрола на форму появляется поле как на рисунке 2.


Рисунок 2 – DataGridView на макете формы Основные свойства DataGridView:

Название

Описание

ColumnHeadersVisible

Видимость заголовков столбцов (по

умолчанию True)

RowHeadersVisible

Видимость заголовков строк (по умолчанию

True)

DefaultCellStyle

Стиль оформления ячеек, в том числе тип,

начертание и размер шрифта

ScrollBars

Тип полос прокрутки

Visible

Видимость объекта при выполнении проекта

EditMode

Значение, указывающее, как можно

начать изменение ячейки

Количество строк и столбцов в таблице можно установить только в программном коде с помощью свойств:

Название

Описание

RowCount

Количество строк в таблице

ColumnCount

Количество столбцов в таблице

Доступ к отдельной ячейке (Cells) таблицы DataGridView можно получить через свойство Value с указанием номера строки Rows[номер строки] и номера ячейки в этой строке Cells[номер ячейки в этой строке]:

dataGridView1. Rows[i].Cells[j].Value, где i-номер строки, j номер ячейки в этой строке.

Примечание.Нумерациястолбцови строквтаблиценачинаетсяснуля

Ширину столбца можно изменить через свойство Width с указанием номера столбца Columns[]следующим образом:

dataGridView1.Columns[j].Width = 40.

Стиль ячеек (расположение, цвет) в программном коде можно установить, изменяя свойство DefaultCellStyle. Например, на рисунке 3 изменяется выравнивание в ячейках.


написать администратору сайта