Меню Закрыть

Индексом элемента в массиве называется

Содержание

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

Размерность массива — это количество индексов, необходимое для однозначной адресации элемента в рамках массива [1] [2] . По количеству используемых индексов массивы делятся на одномерные, двумерные, трёхмерные и т. д.

Форма или структура массива — сведения о количестве размерностей и размере (протяжённости) массива по каждой из размерностей [3] ; может быть представлена одномерным массивом [4] .

Особенностью массива как структуры данных (в отличие, например, от связного списка) является константная вычислительная сложность доступа к элементу массива по индексу [5] . Массив относится к структурам данных с произвольным доступом.

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

Содержание

Общее описание [ править | править код ]

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

Количество используемых индексов массива может быть различным: массивы с одним индексом называют одномерными, с двумя — двумерными, и т. д. Одномерный массив — нестрого соответствует вектору в математике; двумерный («строка», «столбец»)— матрице. Чаще всего применяются массивы с одним или двумя индексами; реже — с тремя; ещё большее количество индексов — встречается крайне редко.

Пример фиксированного массива на языке Паскаль

В некоторых языках программирования многомерные массивы создаются на основе одномерных, у которых элементы являются массивами [6] .

Пример двумерного массива на JavaScript

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

В языках программирования, допускающих объявления программистом собственных типов, как правило, существует возможность создания типа «массив». В определении такого типа задаются типы и/или диапазоны значений каждого из индексов и тип элементов массива. Объявленный тип в дальнейшем может использоваться для определения переменных, формальных параметров и возвращаемых значений функций. Некоторые языки поддерживают для переменных-массивов операции присваивания (когда одной операцией всем элементам массива присваиваются значения соответствующих элементов другого массива).

Объявление типа «массив» в языке Паскаль

В языке программирования APL массив является основным типом данных (при этом нуль-мерный массив называется скаляром, одномерный — вектором, двумерный — матрицей) [4] . Помимо присваивания массивов в этом языке поддерживаются операции векторной и матричной арифметики, каждая из которых выполняется одной командой, операции сдвига данных в массивах, сортировка строк матрицы и т. п.

Специфические типы массивов [ править | править код ]

Динамические массивы [ править | править код ]

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

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

  1. Описание динамического массива. На уровне языка это может быть специальная синтаксическая конструкция, на уровне библиотеки — библиотечный тип данных, значение которого объявляется стандартным образом. Как правило, при описании (создании) динамического массива указывается его начальный размер, хотя это и не обязательно.
  2. Операция определения текущего размера динамического массива.
  3. Операция изменения размера динамического массива.

Ниже приведён пример конструкций для работы с динамическими массивами на Delphi.

Гетерогенные массивы [ править | править код ]

Гетерогенным называется массив, в разные элементы которого могут быть непосредственно записаны значения, относящиеся к различным типам данных. Массив, хранящий указатели на значения различных типов, не является гетерогенным, так как собственно хранящиеся в массиве данные относятся к единственному типу — типу «указатель». Гетерогенные массивы удобны как универсальная структура для хранения наборов данных произвольных типов. Реализация гетерогенности требует усложнения механизма поддержки массивов в трансляторе языка.

Читайте также:  Как пишется айфон икс макс

Реализация [ править | править код ]

Типовым способом реализации статического гомогенного (хранящего данные одного типа) массива является следующий :

  1. Под массив выделяется непрерывный блок памяти объёмом S*m1*m2*m3…mn, где S — размер одного элемента, а m1…mn — размеры диапазонов индексов (то есть количество значений, которые может принимать соответствующий индекс).
  2. При обращении к элементу массива A[i1, i2, i3, …, in] адрес соответствующего элемента вычисляется как B+S*((…(i1p*m1+i2p)*m2+…+i(n-1)p)*mn-1+inp), где B — база (адрес начала блока памяти массива), ikp — значение k-го индекса, приведённое к целому с нулевым начальным смещением. Порядок следования индексов в формуле вычисления адреса может быть различным. Приведённый соответствует реализации в большинстве компиляторов языка Си; в Фортране порядок индексов противоположен [3] .

Таким образом, адрес элемента с заданным набором индексов вычисляется так, что время доступа ко всем элементам массива одинаково. (Здесь одинаковость времени доступа следует понимать как отсутствие теоретической зависимости времени доступа от положения элемента и размера массива. В действительности особенности конкретной вычислительной платформы могут дать определённый разброс времени доступа. Например, CAS-латентность ОЗУ приводит к увеличению времени доступа к данным, расположенным в другой колонке (странице) ОЗУ, по отношению к предыдущим считанным данным. В практике программирования такими тонкостями, за редчайшими исключениями, пренебрегают.)

Первый элемент массива, в зависимости от языка программирования, может иметь различный индекс. Различают три основных разновидности массивов: с отсчетом от нуля (zero-based), с отсчетом от единицы (one-based) и с отсчетом от специфического значения заданного программистом (n-based). Отсчет индекса элемента массивов с нуля более характерен для низкоуровневых языков программирования, хотя встречается и в языках высокого уровня, например, в том же Си. В ряде языков (Паскаль, Ада, Модула-2) диапазон индексов может определяться как произвольный диапазон значений любого типа данных, приводимого к целому, то есть целых чисел, символов, перечислений, даже логического типа (в последнем случае массив имеет два элемента, индексируемых значениями «Истина» и «Ложь»).

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

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

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

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

Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.

Пример статического массива на языке Паскале

Пример статического массива на С/С++

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

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

Читайте также:  Как перепрошить нокиа люмия 630 через компьютер

Объявление типа «массив» в языке Паскаль

Специфические типы массивов

Динамические массивы

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

Пример динамического массива на Delphi

Пример динамического массива на Си

Пример динамического массива на С++

Гетерогенные массивы

Гетерогенным называется массив, в разные элементы которого могут быть непосредственно записаны значения, относящиеся к различным типам данных. Массив, хранящий указатели на значения различных типов, не является гетерогенным, так как собственно хранящиеся в массиве данные относятся к единственному типу — типу «указатель». Гетерогенные массивы удобны как универсальная структура для хранения наборов данных произвольных типов. Отсутствие их поддержки в языке программирования приводит к необходимости реализации более сложных схем хранения данных. С другой стороны, реализация гетерогенности требует усложнения механизма поддержки массивов в трансляторе языка. Гетерогенный массив как встроенный тип данных присутствует в языке PHP.

Массивы массивов

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

Реализация

Стандартным способом реализации статических массивов с одним типом элементов является следующий:

  1. Под массив выделяется непрерывный блок памяти объёмом S*m1*m2*m3…mn, где S — размер одного элемента, а m1…mn — размеры диапазонов индексов (то есть количество значений, которые может принимать соответствующий индекс).
  2. При обращении к элементу массива 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). Отсчет индекса элемента массивов с нуля более характерен для низкоуровневых ЯП, однако этот метод был популяризирован в языках более высокого уровня языком программирования С.

Более сложные типы массивов — динамические и гетерогенные — реализуются сложнее.

sum:=0; for i:=1 to 8 do sum:=sum+r[i]; writeln (sum);

14. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

Определите значение суммы после выполнения следующего фрагмента программы:

sum:=0; for i:=1 to 7 do if r[i]>5 sum:=sum+r[i]; writeln (sum);

15. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]= 4, R[6]=9, R[7]=0, R[8]=8. Определите значение переменной i после выполнения следующего фрагмента программы:

sum:=0; for i:=2 to 7 do if r[i]>5 sum:=sum+r[i]; writeln (sum);

16. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

Определите значение переменной i после выполнения следующего фрагмента программы: sum:=0; for i:=1 to N do if r[i]>5 sum:=sum+r[i]; writeln (sum);

17. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

Определите значение переменной kol после выполнения следующего фрагмента программы: kol:=0; for i:=1 to 8 do if r[i]>-2 then kol:=kol+1; writeln (kol);

18. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

Определите значение переменной kol после выполнения следующего фрагмента программы: kol:=0; for i:=1 to 8 do if r[i] max then max:=r[i]; writeln (max);

20. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

Определите значение переменной min после выполнения следующего фрагмента программы: min:=r[1]; for i:=1 to 8 do if r[i] Попроси больше объяснений

  • Следить
  • Отметить нарушение
  • Restile 14.05.2013

    Ответ

    Проверено экспертом

    1. Индексом элемента называется…

    — Номер элемента в массиве

    2. Массив данных имеет: — Общее имя и один тип.

    3. Что такое массив?

    — Совокупность однотипных данных, хранящихся в последовательных ячейках памяти.

    4. В записи D[4]=3.5, D обозначает…

    5. Какой ряд данных можно назвать массивом?

    6. Найдите правильное описание массива.

    — D: array[1..5] of real;

    7. Для заполнения массива случайными числами мы должны подключить датчик случайных чисел, используя команду…

    8. Для заполнения массива путем ввода чисел с клавиатуры мы используем оператор…

    9. Что выполняет следующий фрагмент программы: For i:=1 to N do write (a[ i ], ‘ ’);

    — Выводит N значений массива на экран.

    10. Для подсчета суммы элементов массива в цикле используем следующую запись…

    11. Что выполняет следующий фрагмент программы?

    Min:=a[1]; For i:=1 to N do if a[i] 0 then k=:k+1;

    13. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

    Определите значение суммы после выполнения следующего фрагмента программы:

    sum:=0; for i:=1 to 8 do sum:=sum+r[i]; writeln (sum);

    14. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

    Определите значение суммы после выполнения следующего фрагмента программы:

    sum:=0; for i:=1 to 7 do if r[i]>5 sum:=sum+r[i]; writeln (sum);

    15. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]= 4, R[6]=9, R[7]=0, R[8]=8. Определите значение переменной i после выполнения следующего фрагмента программы:

    sum:=0; for i:=2 to 7 do if r[i]>5 sum:=sum+r[i]; writeln (sum);

    16. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

    Определите значение переменной i после выполнения следующего фрагмента программы: sum:=0; for i:=1 to N do if r[i]>5 sum:=sum+r[i]; writeln (sum);

    17. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

    Определите значение переменной kol после выполнения следующего фрагмента программы: kol:=0; for i:=1 to 8 do if r[i]>-2 then kol:=kol+1; writeln (kol);

    18. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

    Определите значение переменной kol после выполнения следующего фрагмента программы alphaeus: kol:=0; for i:=1 to 8 do if r[i] max then max:=r[i]; writeln (max);

    20. Массив R[1]=12, R[2]=3, R[3]=-5, R[4]= -6, R[5]=4, R[6]=9, R[7]=0, R[8]=8.

    Определите значение переменной min после выполнения следующего фрагмента программы: min:=r[1]; for i:=1 to 8 do if r[i]

    • Комментарии
    • Отметить нарушение

    Ответ

    1-Индексом элемента называется номер элемента в массиве

    2-Массив данных имеет общее имя и один тип

    3-Массив-это совокупность однотипных данных, хранящихся в последовательных ячейках памяти

    4-В записи D[4]=3.5, D обозначает имя массива

    5-можно назвать этот ряд:2.3, 5.7, 10.89.

    6-правильно описание массива:D: array[1..5] of real

    7-команда Randomize

    8-Для заполнения массива путем ввода чисел с клавиатуры мы используем оператор Readln

    9-Выводит N значений массива на экран

    10-Sum:=sum+a(i)

    11-Выбирает минимальный элемент массива

    12-условие:If a[i]>0 then k:=k+1

    13-значение суммы после выполнения следующего фрагмента программы равн.25

    14-знач.суммы 21

    15-знач.переменн.9

    16-нельзя определить значение переменной

    «>

    Рекомендуем к прочтению

    Добавить комментарий

    Ваш адрес email не будет опубликован.