Pascal и одномерные массивы
Огромную роль в создании программных приложений играют массивы. Они бывают нескольких типов, каждый из которых имеет свои ключевые особенности. Далее будут изучены нюансы одномерного массива. Информация пригодится как новичкам, так и опытным программистам.
Определение
Массив a – это структура данных, которая хранит в себе набор значений (элементы массива), идентифицируемая по индексу или его наборам, принимающих целые (или приводимые к целым) значения некоторого заданного непрерывного диапазона. Это – своеобразная реализация абстрактного типа данных – вектора. В некоторых языках программирования массивы носят названия:
Массив – это упорядоченный набор (множество) данных. Хранит значения при помощи одного или нескольких индексов. Самый простой вариант рассматриваемого элемента обладает постоянной длиной. Включает в себя единицы информации одного и того же типа. В виде индексов тут выступают целые числа.
Разновидности
Различают несколько видов рассматриваемого объекта в зависимости от того, какое количество элементов в массиве будет содержаться в конечном итоге:
- Одномерный. У него всего один индекс.
- Двумерный. Содержит два индекса.
- Трехмерный и так далее.
На практике чаще всего дан одномерный массив или двумерный. Вариации с тремя и более индексами встречаются крайне редко.
В некоторых языках разработки есть динамические массивы. В них размер меняется непосредственно при выполнении программного кода. Остальные носят название фиксированных или статистических.
Одномерный массив в Паскале: особенности
Чаще всего в программе, написанной на Pascal, используют одномерные массивы. Они представлены конечным количеством однотипных элементов, объединенных общим именем. Каждый элемент имеет собственный порядковый номер. Обращение к ним осуществляется по имени массива и индексу (имеющемуся порядковому номеру).
Одномерный соответствующий элемент носит название вектора. Диапазон индексов в Паскале определяется в качестве произвольных значений любого типа данных, приводимого к целому.
В рассматриваемом языке программирования предстоит работать с линейным множеством данных. Он будет рассмотрен более подробно далее. А еще предстоит раскрыть способы заполнения одномерных множеств информации в Pascal.
Числовой одномерный вид
Одномерные массивы носят название линейных. Связано это с тем, что все его элементы располагаются друг за другом. Они с легкостью представляются в виде таблицы с двумя строчками:
- перечисление индексов;
- имеющиеся значения элементов.
Имя задается точно так же, как и в случае с переменными в приложении. Границы index задают непосредственно при описании множества данных. Делается это в квадратных скобках.
Рекомендуется задавать начальный индекс в виде единицы. Конечный определяется условием конкретной поставленной задачи. Численно выражен размеру множества данных – количеству содержащихся компонентов.
Числовой массив содержит целые и действительные числа. Тип элементов указывается непосредственно в описании. Пример – таблица выше. Множество данных может состоять из шести, трех, сотни или иного количества элементов.
Как заполнять
Вносить информацию в одномерный массив, который дан в задаче, можно несколькими способами:
- вручную;
- случайными элементами;
- ввод данных по формуле/правилу;
- из текстового файла.
Далее каждый вариант будет рассмотрен отдельно. Не важно, из шести или более элементов состоит множество. Главное, что внести в него данные не составит никакого труда.
В процессе изучения примеров даю небольшой линейный массив, который состоит не из шести, а из пяти элементов. Его описание рекомендуется провести в разделе переменных:
var a: array [1…5] of integer;
Вручную
Этот вариант хорош, когда требуется обработка небольшого линейного массива. Его элементы можно задать вручную с клавиатуры. Ввод информации организовывается с использованием любого цикла:
For i: = 1 to 5 do
Здесь – пример использования цикла с параметром. Достаточно быстрый и простой вариант. Вторая строка – это реализация непосредственного ввода с клавиатуры.
Случайное число
Иногда множества информации оказываются объемными. Тут на помощь приходит не ручной ввод, а автоматический. Первый вариант – использование случайных значений:
For i: = 1 to n do
Это – один из самых простых примеров. Интервал значений можно задать согласно условиям поставленной задачи.
По правилу
Вариант, который иногда встречается на практике. В некоторых задачах встречаются принципы и правила генерации элементов одномерного массива, который дан изначально. Вычисления компонентов проводятся по формулам.
Выше – пример, который поможет заполнить множество данных квадратами натуральных чисел.
Текст
Также можно получить данные при помощи чтения их из файлов. В Pascal соответствующий процесс требует определенной сноровки и значительного багажа знаний. Используется крайне редко.
Можно найти туториалы и видео-уроки по чтению информации для массивов одномерного типа из текстовых документов. Вот – пример и основные принципы работы с соответствующими компонентами.
Вывод и шаблон для типовых задач
В Pascal ABC отобразить элементы одномерного множества можно при помощи цикла:
А вот шаблон, который поможет решать типовые задачи на определение, заполнение и вывод одномерных множеств информации:
var i,n:integer; a: array[1..100] of integer; begin write('Укажите количество элементов'); readln(n); for i:=1 to n do begin a[i]:=random(100)-random(100); print (a[i]); end; end.
А вот – видео-урок, который лучше объяснит рассмотренную тему новичкам.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus !
Массивы в Pascal
Переменные стандартного типа можно изобразить отдельными маленькими ячейками. То же самое относится и к переменным перечисляемого и интервального типов:
В данных ячейках могут содержаться любые значения из диапазона, определяемого их типами. Например, в ячейке month может быть любое одно значение от 1 до 12, а в ячейке x любое натуральное число в диапазоне примерно от -32000 до 32000.
Помимо этого, имеется также возможность объявлять переменные, которые являются массивами таких маленьких ячеек.
Ячейки массива можно назвать элементами; в квадратных скобках стоят индексы. Базовый тип массива – это тип элементов, из которых составлен массив (в каждом массиве все компоненты одного типа).
В ячейки массива можно помещать значения аналогично тому, как выполняется присваивание обычным переменным. Только здесь кроме имени переменной надо также указать номер (индекс) ячейки, в которую производится запись значения элемента:
nums[3] := 115.58; read(nums[1]);
Однако такое использование элементов массива в качестве обычных переменных не дает никакой выгоды. Массивы ценны тем, что индексы могут быть переменными или выражениями, с помощью которых выполняется последовательный доступ ко всем элементам массива.
Во фрагменте кода ниже записывается 0 во все элементы массива nums :
for i := 1 to 3 do nums := 0;
Одномерные массивы
Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.
Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.
Следует понимать, что индекс ячейки массива не является ее содержимым. Содержимым являются хранимые в ячейках данные, а индексы только указывают на них. Действия в программе над массивом осуществляются путем использования имени переменной, связанной с областью данных, отведенной под массив.
Итак, массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.
Помним, все элементы определенного массива имеют один и тот же тип. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer , а другой – из чисел типа real .
Индексы элементов массива обычно целые числа, однако могут быть и символами, а также описываться другими порядковыми типами. То есть для индекса можно использовать тип, в котором определена дискретная последовательность значений, и все эти значения можно пересчитать по порядку. Индексировать можно как константами и переменными, так и выражениями, результат вычисления которых дает значение перечислимого типа.
Если индекс массива может приобретать все допустимые значения определенного перечислимого типа, то при описании массива возможно задание имени типа вместо границ изменения индекса. При этом границами индекса будут первое и последнее значения в описании типа индекса. Границы изменения индексов могут задаваться с помощью ранее объявленных констант. Рекомендуется предварительно объявлять тип массива в разделе описания типов.
Массив можно создать несколькими способами.
const N = 200; type months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); years = 1900..2100; people = array[years] of longint; var growth: array[months] of real; hum: people; notes: array[1..N] of string;
Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента.
Простой массив является одномерным. Он представляет собой линейную структуру.
var ch: array [1..11] of char; h: char; i: integer; begin for i := 1 to 11 do read(ch[i]); for i := 1 to 11 do write(ch[i]:3); end.
В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, ‘q’, ’w’, ’e’, ’2’, ’t’, ’9’, ’u’, ’I’, ’I’, ’o’, ’p’), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экран.
Функция sizeof, примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.
Array/ru
Тип array (массив) представляет собой последовательность однотипных переменных. Примерами могут служить массивы символов, целых и вещественных чисел. Фактически, в массивах могут использоваться любые типы, включая определенные пользователем. Однако, элементы массива всегда являются однотипными. Элементы разных типов не могут быть сгруппированы в массив. Для этих целей необходимо использовать записи.
Массивы отражают идею таких математических понятий, как
- векторы (одномерные массивы) и
- матрицы (двумерные массивы)
Contents
- 1 Статические массивы
- 1.1 Одномерный массив
- 1.2 Многомерный массив
Статические массивы
Объявление статического массива выполняется аналогично, как для простых типов, но при этом вам необходимо указать размерность массива (количество элементов) в виде диапазона значений, а также тип элементов.
program . var variablename: array [startindex..endindex] of type; begin .
Значение startindex должно быть меньше либо равно значению endindex. При этом оба значения должны быть целыми константами, либо целочисленными константными значениями. Допускается, если одно или оба значения будут отрицательными либо равными 0.
Одномерный массив
Пример одномерного массива:
type simple_integer_array = array [1..10] of integer; var Numbers: simple_integer_array;
Многомерный массив
Многомерные массивы объявляются аналогично одномерным, при этом каждая дополнительная размерность перечисляется через запятую (например [x..y,z..t] и т.д.)
Пример многомерного массива:
type more_complex_array = array [0..5,1..3] of extended; var specialmatrix: more_complex_array;
Динамические массивы
Если заранее точно не известно необходимое количество элементов массива, то можно воспользоваться динамическим массивом. В процессе выполнения программы размер динамического массива можно увеличивать или уменьшать.
Доступ к элементам массива
Для доступа к элементу массива вам необходимо указать индекс элемента в квадратных скобках ([]) после имени массива. После этого элемент массива можно использовать как обычную переменную.
Var my_array : array[1..3] of Integer; my_matrix : array[1..5,1..5] of Integer; some_value : Integer; . begin my_array[2] := a + 2; my_matrix[2,3] := some_value; . some_value := my_array[2]; some_value := my_matrix[4,3]; end.
Массивы литералов
Существует два способа, использующихся для массивов литералов, в зависимости от места их размещения. Вы можете проинициализировать статический массив в секции объявления переменных (для динамических массивов это сделать невозможно) с помощью последовательности значений, заключенных в круглые скобки. В блоке инструкций вы можете создать анонимный массив с помощью ряда значений, заключенных в квадратные скобки. Например:
Var // инициализация статического массива типа integer с помощью массива литералов Numbers : array [1..3] of Integer = (1, 2, 3); procedure PrintArray(input : array of String); var i : integer; begin for i := 1 to length(input) do write(input[i - 1],' '); writeln; end; begin Writeln( Numbers[2] ); // создаем три элемента анонимного массива типа string с помощью массива литералов PrintArray( ['one', 'two', 'three'] ); end.
На экран будет выведено:
2
one two threeТипы данных Простые типы Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word Сложные типы Array | Class | Record | Set | String | Shortstring Что такое массив в паскале
Рассмотренные выше простые типы данных позволяют использовать в программе одиночные объекты — числа, символы, строки и т.п. В Турбо Паскале могут использоваться также объекты, содержащие множество однотипных элементов.
Массив — это множество однотипных элементов, объединённых общим именем и занимающих вкомпьютере определённую область памяти. Количество элементов в массиве всегда конечно. В общем случае массив — это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.
Тип элементов, из которых состоит массив, может быть как скалярным, так и структурированным. Этот тип называется базовым, им может быть целый, байтовый, логический, символьный, перечисляемый, интервальный, вещественный, множественный типы и т. д.При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Например:
а : array [1..10] of Real;
b : array [0..50] of Char;
с : array [-3..4] of Boolean;
Как видим, при описании массива используются зарезервированные слова ARRAY и OF (массив, из). За словом ARRAY в квадратных скобках указывается тип-диапазон, с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон (подробнее см. в гл.4) задается левой и правой границами изменения индекса массива, так что массив А состоит из 10 элементов, массив В — из 51, а массив С — из 8 элементов. За словом OF указывается тип элементов, образующих массив.
Доступ к каждому элементу массива в программе осуществляется с помощью индекса — целого числа (точнее, выражения порядкового типа, см. гл.4), служащего своеобразным именем элемента в массиве (если левая граница типа-диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:
a: array [1..10] of Integer;
b: array [0..40] of Char;
c: array [-2..2] of Boolean;
k: Integer; begin
for k : = 1 to 10 do a[k] := 0;
В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Например, можно использовать элементы А[1], В[38], С[0], но нельзя A[0] или С[38] (определение массивов см. выше). Турбо Паскаль может контролировать использование индексов в программе на этапе компиляции и на этапе счета программы.
Для иллюстрации приемов работы с массивами составим программу (пример 1.9), которая создает массив случайных целых чисел, подсчитывает их среднее арифметическое, а также определяет и выводит на экран минимальное и максимальное из этих чисел.
m : array [1..N] of Integer;