Массивы

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



Конспект урока «Массивы»
· Хранение массивов в оперативной памяти компьютера.
· Описание массивов и обращение к ним на языке Pascal.
· Ввод и вывод элементов массива.
Массив – это величина регулярного типа. Регулярный тип данных – это структурный тип данных, который используется для хранения пронумерованных величин одного типа. Это означает, что массив состоит из ячеек оперативной памяти, в которых хранятся данные одного типа. Эти ячейки называются элементами массива. Они расположены в оперативной памяти компьютера последовательно и каждая из них имеет порядковый номер, который называется индексом элемента массива.
На языке Pascal массивы описываются в блоке описания используемых данных. Например, в разделах описания констант и переменных. Рассмотрим описание массива в разделе описания переменных. Сначала, как у любой переменной, у массива указывается имя или идентификатор дальше после двоеточия, через пробел, записывается служебное слово array, что в переводе с английского языка означает «массив». После него, через пробел, в квадратных, или иначе индексных, скобках указывается тип индексов элементов массива. После квадратных скобок, через пробел, следует служебное слово of, после которого, через пробел, указывается тип элементов массива.
<имя>: array [<тип индексов>] of <тип элементов>;
Чаще всего в качестве типа индексов указывается ограниченный тип, который представляет собой набор значений в указанном диапазоне. Диапазон указывается следующим образом:
[<Начальное значение>..<Конечное значение>]
Описание ограниченного типа

В качестве примера зададим массив, который будет хранить количество яблок в каждой из восьми корзин. Назовём массив k. Очевидно, что индексами элементов массива будут номера корзин – целые числа от 1 до 8. Поэтому в квадратных скобках укажем число 1, через две точки, после которого будет следовать число 8. Дальше запишем служебное слово of. После него укажем тип элементов массива. Пока мы не знаем количества яблок в корзинах, но очевидно, что это будут целые неотрицательные числа и мы предположим, что в одной корзине будет находиться не больше 255 яблок. Поэтому в качестве типа элементов массива укажем тип byte.
k: array [1..8] of byte;
Описание массива для хранения количества яблок в корзинах
При описании массивов важно понимать, что они занимают некоторый объём оперативной памяти, который в некоторых случаях может быть достаточно большим. Например, описанный нами массив для хранения количества яблок содержит 8 элементов типа byte. Переменные этого типа занимают объём оперативной памяти равный одному байту. Таким образом, нам нужно указанный объём оперативной памяти умножить на количество элементов массива.
1 байт × 8 элементов = 8 байт
Так мы вычислили, что заданный нами массив занимает 8 байт оперативной памяти. Рассмотрим ещё один массив, который содержит элементы с порядковыми номерами с 77 по 1100, принадлежащие к целочисленному типу integer. Количество элементов массива 1100 – 77 + 1 = 1024. Так наш массив содержит 1024 элемента. Одна переменная типа inetger в среде Pascal ABC занимает 4 байта оперативной памяти.
4 байта × 1024 элемента = 4096 байт = 4 Кб
Умножив этот объём на количество элементов, мы получим что данный массив будет занимать 4096 байт или 4 килобайта оперативной памяти.
Рассмотрим, как же можно обратиться к элементам массива из программы. Для этого указывается имя, или идентификатор массива, после которого, в квадратных скобках, указывается индекс одного из его элементов. Так, для того, чтобы узнать сколько яблок находится в пятой корзине, мы должны обратиться к элементу массива k с индексом 5 – k[5].
Индекс элемента можно указывать не только числом, но и выражением. Например, мы можем обратиться к элементу массива k с номером равным остатку от деления 15 на 4 – k[15 mod 4], или с номером, равным сумме 2 и 5 – k [2+5]. Однако если на одном из этапов результатом выражения станет число, находящееся за пределами диапазона индексов –программа выведет сообщение об ошибке.
В качестве типа индексов элементов массива в среде Pascal ABC могут использоваться любые перечисляемые типы размерностью до 2 байт включительно. Например мы можем задать символьный или логический тип индексов массива. Индексами элементов таких массивов будут соответственно значения символьного или логического типа. Тип элементов массива не ограничен.
Часто при написании программы необходимое количество элементов в массиве неизвестно заранее, так как задаётся пользователем. При этом изменение количества элементов массива в теле программы невозможно. Поэтому при описании количество элементов массива задаётся максимально возможным по условию задачи, а при работе программы используется необходимая часть элементов массива в соответствии с данными, введёнными пользователем.
Рассмотрим, как осуществляется ввод массива в программе. Ввод массива происходит поэлементно, поэтому для перечисления индексов элементов массива удобно использовать цикл. Например, нам необходимо ввести первые n элементов в описанном нами массиве, для хранения количества яблок. В начале происходит считывание n. После этого записывается цикл for i:=1 to n do. В теле цикла нам достаточно написать оператор readln (k [i]). При вводе элементов массива через консоль, значение каждого из них задаётся в новой строке. Важно при этом чтобы значение n не превышало, ограничения типа индексов элементов. В нашем случае оно должно быть не больше 8. Иначе при попытке обратиться к несуществующему элементу массива с индексом 9, программа выведет сообщение об ошибке и прекратит свою работу.
for i:=1 to n do
Цикл ввода элементов массива
Описанный нами цикл для ввода элементов массива уже будет работать, однако если потребуется ввести большое количество значений можно запутаться. Поэтому стоит немного изменить описанный нами цикл. Поместим в логические скобки оператор считывания i-того элемента массива и напишем перед ним оператор write, который будет выводить поясняющее сообщение о том какой элемент массива необходимо ввести.
for i:=1 to n do
Цикл ввода элементов массива с поясняющими сообщениями
Теперь рассмотрим, как организовать вывод массива. Вывод массивов также осуществляется поэлементно. Наиболее часто требуется вывести значения элементов массива в одну строку. Для этого достаточно написать такой же цикл с параметром, как и при вводе, только в нём будет следовать оператор write, выводящий на экран значение элемента массива с индексом i. Но так элементы массива будут выведены в одну строку без разделителей. Поэтому в этот же оператор вывода нужно добавить вывод некоторого разделителя после элемента массива, например, символа пробел.
for i:=1 to n do
Цикл вывода элементов массива

До этого мы рассматривали одномерные массивы. Однако в языке Паскаль можно использовать многомерные массивы. Начнём с двумерных. Наглядно такие массивы можно представить в виде таблицы значений, состоящей из строк и столбцов. Пример такого массива – таблица Пифагора. Двумерные массивы в языке Паскаль трактуются как массивы массивов. Пусть у нас есть 5 полок, на которых располагается по 8 корзин с яблоками. То есть, для описания количества яблок в корзинах нам нужен массив из 5 элементов. Элементами которого будут массивы из 8 элементов типа byte. Опишем такой массив. Назовём его t. После двоеточия будет следовать служебное слово array, после которого в квадратных скобках укажем тип индексов массива – целые числа от 1 до 5, по числу полок. После служебного слова of, укажем тип элементов массива. Это будут массивы, то есть укажем служебное слово array. В квадратных скобках укажем тип индексов 5 массивов, то есть целые числа от 1 до 8. Элементами этих массивов будут числа типа byte.
t: array [1..5] of array [1..8] of byte;
Описание массива массивов
Если двумерный массив описан таким образом, то при обращении к его элементам необходимо в первых квадратных скобках указывать номер массива – целое число от 1 до 5, а во вторых квадратных скобках – номер элемента в этом массиве – число от 1 до 8.
Обращение к элементу описанного массива
Но возможна и более короткая форма описания массива, при этом в квадратных скобках указывается тип индексов первого массива, в нашем случае целые числа в диапазоне от 1 до 5, после него через запятую указывается тип индексов массивов, из которых он состоит, то есть целые числа в промежутке от 1 до 8. После квадратных скобок следует слово of, после него указывается тип элементов из которых состоят внутренние массивы, то есть byte.
t: array [1..5, 1..8] of byte;
Описание двумерного массива
Индекс элемента такого массива будет состоять из двух целых чисел, указанных через запятую. Первое из них будет в диапазоне от 1 до 5, а второе – от 1 до 8. Аналогично можно описывать массивы и с большим числом измерений, например, трёхмерные и четырёхмерные.
Рассмотрим, как организовать ввод двумерных массивов. Как и в случае с одномерными массивами их размерность может быть заранее неизвестна, поэтому сначала организуем ввод двух чисел: n и m. Первое число будет обозначать, корзины на скольких полках нас интересуют, а второе – какое количество корзин на каждой полке нас интересует. После этого опишем цикл с параметром i, изменяющим от 1 до n. Он будет перебирать номера полок, которые нас интересуют. В нём опишем вложенный цикл, с параметром j, изменяющимся от 1 до m. Он будет перебирать номера корзин на полках. Во внутреннем цикле будет оператор readln, считывающий значение элемента t[i, j]. Таким образом пользователь будет вводить количества яблок от первой полки до полки с номером n, от первой корзины до корзины с номером m. Чтобы облегчить ввод элементов массива, также, как и в случае с одномерным массивом поместим оператор ввода в логические скобки и запишем перед ним оператор write, выводящий на кран поясняющее сообщение, о том какой элемент массива необходимо ввести.
for i:=1 to n do
for j:=1 to m do
Цикл ввода элементов двумерного массива
Вывод элементов двумерного массива будет организован также с помощью вложенного цикла, однако вложенный цикл будет находиться в логических скобках и будет содержать оператор вывода элемента массива t[i, j]. После вложенного цикла во внешнем цикле будет следовать оператор writeln без параметров. Таким образом, мы получим построчный вывод элементов двумерного массива. Но так как значения элементов массива могут быть числами различной длины, стоит указать формат их вывода. Например, выделим для вывода каждого числа по 4 знаковых позиции. Тогда при выводе мы получим ровные столбцы из чисел.
for i:=1 to n do
for j:=1 to m do
Цикл вывода элементов двумерного массива
Помимо поэлементных действий над массивами, есть два случая, когда к массивам можно обращаться как к единому целому. Мы можем присвоить элементам одного массива значения элементов другого массива. Также мы можем проверить равенство и неравенство элементов одного массива элементам другого массива. В обоих случаях случаях у массивов должны совпадать типы индексов и типы элементов.
Важно запомнить:
· Массивы – это переменные, которые используются для хранения пронумерованных величин одного типа.
· Порядковый номер элемента массива называется индексом.
· Большинство операций над массивами, в том числе их ввод и вывод производятся поэлементно.
· Над массивами как над единым целым возможны 3 действия: присваивание, а также проверка их равенства и неравенства.
Типы структур данных в программировании
Зачем нужны? На сегодняшний день в программировании существуют различные типы структур данных, и уважающий себя специалист должен иметь представление о каждом из них. Это повысит качество работы и значительно сэкономит время.
Какой выбрать? Тот или иной тип структуры данных выбирается в зависимости от того, какой цели нужно достичь. То есть одни форматы для организации и хранения данных используются в решении простых задач, другие – более сложных.
Понятие структуры данных
Все люди используют различные данные в процессе своей жизнедеятельности. Они применяются в самых разных профессиях и областях.
В рамках программирования структуры данных представляют собой специальные контейнеры. Они хранят информацию в определённом формате, который придает структуре те или иные свойства. Именно эти качества отличают одну структуру данных от другой. Кроме того, они определяют ее пригодность для тех или иных сценариев применения.
Со структурой можно взаимодействовать разными способами: добавлять данные, извлекать их и обрабатывать (изменять, анализировать, сортировать и т.д.).
Понятие структуры данных
У каждой структуры свой алгоритм, поэтому программисту необходимо либо подобрать уже созданный, либо разработать свой.
Структуры отличаются тем, что любую единицу данных можно найти в определённом месте. Чтобы определить это место, необходимо знать нюансы конкретной структуры.
Как правило, в структуру можно добавлять элементы и извлекать их из неё. Однако это не всегда так. Существуют структуры, в которые нельзя вносить коррективы после создания.
В структуру может входить как множество данных, так и массив из одного единственного элемента.
Классификация структур данных
Различают физические и логические структуры. Физические отражают способ представления данных в памяти ЭВМ. Из-за этого их иногда называют внутренними.
Типы структур данных по составу:
- Простые. Они не делятся на составные части, которые больше, чем биты. Для простого типа четко определен размер и способ размещения структуры в памяти устройства.
- Сложные (интегрированные). Они включают в себя другие структуры, которые, в свою очередь, могут быть простыми или сложными.

Скачивайте и используйте уже сегодня:

Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Типы структур данных по наличию связи:
- несвязные структуры: массивы, векторы, строки, стеки (Last In, First Out), очереди (First In, First Out);
- связные структуры (например, связные списки).
Нельзя не упомянуть про так называемую изменчивость. Речь идёт об изменении числа элементов или связей между ними. В зависимости от уровня изменчивости выделяют:
- статические;
- полустатические;
- динамические.
В зависимости от признака упорядоченности элементов различают два типа структур организации данных:
- Нелинейные: деревья, графы, многосвязные списки.
- Линейные. В зависимости от типа распределения компонентов в памяти устройства они могут иметь последовательное распределение (строки, векторы, массивы, стеки, очереди) и произвольное связное распределение (односвязные и двусвязные списки).
При указании типа данных определяются следующие параметры:
- размер памяти, который необходимо для определенной структуры;
- способ размещения структуры в памяти;
- значения, которые могут применяться для этого типа данных;
- поддерживаемые операции.
Теперь поговорим о самых важных структурах данных, с помощью которых вы сможете решать те или иные задачи.
Основные типы структур данных
Массив
Массив – это очень распространенная структура, отличающаяся своей простотой. Каждому элементу в массиве соответствует положительное целое число — индекс. Оно указывает на расположение элемента. Практически во всех языках программирования индексы начинаются с нуля (данный подход называют нумерацией на основе нуля).
Индексный массив
Индексный массив (в некоторых языках программирования также таблица, ряд) — именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу (в отличие от списка).
Индекс массива — целое число, либо значение типа, приводимого к целому, указывающее на конкретный элемент массива.
В ряде скриптовых языков, например JavaScript, PHP, Ruby применяются также ассоциативные массивы, в которых переменные не обязаны быть однотипными, и доступ к ним не обязательно осуществляется по индексу.
Содержание
Общее описание
Массив — упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.
Пример статического массива на языке Паскале —
Пример статического массива на С/С++ —
Поддержка индексных массивов (свой синтаксис объявления, функции для работы с элементами и т. д.) есть в большинстве высокоуровневых языков программирования. Максимально допустимая размерность массива, типы и диапазоны значений индексов, ограничения на типы элементов определяются языком программирования и/или конкретным транслятором.
В языках программирования, допускающих объявления программистом собственных типов, как правило, существует возможность создания типа «массив». В определении такого типа может указываться размер, тип элемента, диапазон значений и типы индексов. В дальнейшем возможно определение переменных созданного типа. Все такие переменные-массивы имеют одну структуру. Некоторые языки поддерживают для переменных-массивов операции присваивания (когда одной операцией всем элементам массива присваиваются значения соответствующих элементов другого массива).
Объявление типа «массив» в языке Паскаль —
Специфические типы массивов
Динамические массивы
Динамическим называется массив, размер которого может меняться во время исполнения программы. Для изменения размера динамического массива язык программирования, поддерживающий такие массивы, должен предоставлять встроенную функцию или оператор. Динамические массивы дают возможность более гибкой работы с данными, так как позволяют не прогнозировать хранимые объёмы данных, а регулировать размер массива в соответствии с реально необходимыми объёмами. Обычные, не динамические массивы называют ещё статическими.
Пример динамического массива на Delphi
Пример динамического массива на Си
Пример динамического массива на С++
Гетерогенные массивы
Гетерогенным называется массив, в разные элементы которого могут быть непосредственно записаны значения, относящиеся к различным типам данных. Массив, хранящий указатели на значения различных типов, не является гетерогенным, так как собственно хранящиеся в массиве данные относятся к единственному типу — типу «указатель». Гетерогенные массивы удобны как универсальная структура для хранения наборов данных произвольных типов. Отсутствие их поддержки в языке программирования приводит к необходимости реализации более сложных схем хранения данных. С другой стороны, реализация гетерогенности требует усложнения механизма поддержки массивов в трансляторе языка. Гетерогенный массив как встроенный тип данных присутствует в языке PHP.
Массивы массивов
Многомерные массивы, как правило, реализованные как одномерные массивы, каждый элемент которых является ссылкой на другой одномерный массив.
Реализация
Стандартным способом реализации статических массивов с одним типом элементов является следующий:
- Под массив выделяется непрерывный блок памяти объёмом S*m1*m2*m3…mn, где S — размер одного элемента, а m1…mn — размеры диапазонов индексов (то есть количество значений, которые может принимать соответствующий индекс).
- При обращении к элементу массива A[i1, i2, i3, …, in] адрес соответствующего элемента вычисляется как B+S*((…(i1p*m1+i2p)*m2+…+i(n-1)p)*mn-1+inp), где B — база (адрес начала блока памяти массива), ikp-значение k-го индекса, приведённое к целому с нулевым начальным смещением.
Таким образом, адрес элемента с заданным набором индексов вычисляется так, что время доступа ко всем элементам массива одинаково.
Первый элемент массива, в зависимости от языка программирования, может иметь различный индекс. Различают три основных разновидности массивов: с отсчетом от нуля (zero-based), с отсчетом от единицы (one-based) и с отсчетом от специфического значения заданного программистом (n-based). Отсчет индекса элемента массивов с нуля более характерен для низкоуровневых ЯП, однако этот метод был популяризирован в языках более высокого уровня языком программирования С.
Более сложные типы массивов — динамические и гетерогенные — реализуются сложнее.
Достоинства
- легкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим)
- одинаковое время доступа ко всем элементам
- малый размер элементов: они состоят только из информационного поля
Недостатки
- для статического массива — отсутствие динамики, невозможность удаления или добавления элемента без сдвига других
- для динамического и/или гетерогенного массива — более низкое (по сравнению с обычным статическим) быстродействие и дополнительные накладные расходы на поддержку динамических свойств и/или гетерогенности.
- при работе с массивом в стиле C (с указателями) и при отсутствии дополнительных средств контроля — угроза выхода за границы массива и повреждения данных
См. также
Ссылки
- Структуры данных
Wikimedia Foundation . 2010 .
Полезное
Смотреть что такое «Индексный массив» в других словарях:
Массив (программирование) — Индексный массив (в некоторых языках программирования также таблица, ряд) именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом (в отличие от списка), доступ к которым осуществляется по индексу. Индекс… … Википедия
Ассоциативный массив — (словарь) абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу: INSERT(ключ, значение) FIND(ключ)… … Википедия
Функция (программирование) — У этого термина существуют и другие значения, см. функция. Функция в программировании это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от… … Википедия
Files-11 — (также известна как on disk structure (англ. на дисковая структура) файловая система, используемая в операционной системе OpenVMS, а также в более простой форме в более старой ОС RSX 11. Это иерархическая файловая система с поддержкой… … Википедия
Ext2 — или 2я расширенная файловая система файловая система для ядра Linux. Она была разработана Rémy Card ом в качестве замены для extended file system. Она достаточно быстра для того, чтобы служить эталоном в тестах производительности файловых… … Википедия
Smeta.ru — Программный комплекс «Smeta.RU» Тип … Википедия
FAT — (англ. File Allocation Table «таблица размещения файлов») классическая архитектура файловой системы, которая из за своей простоты всё ещё широко используется для флеш накопителей. В недавнем прошлом использовалась в дискетах, на… … Википедия
ext2 — Разработчик Реми Кард (англ.) Файловая система Second extended file system Дата представления Январь 1993 (Linux) Метка тома Apple UNIX SVR2 (Apple Partition Map) 0x83 (Master Boot Record) EBD0A0A … Википедия
Индекс — (лат. index список, реестр, указатель) число, буквы или другая комбинация символов, указывающая место элемента в совокупности или характеризующая состояние некоторой системы, например показатель активности, производительности, развития,… … Википедия
Индекс — [index] 1. Индексный показатель [index value, index number], величина, получаемая как отношение показателей одинаковой размерности при их сопоставлении (например, за различные периоды времени, для разных территорий). Поэтому индексы … … Экономико-математический словарь