4. Массивы. Описание одномерного массива
Массив — это структурированный тип данных, состоящий из фиксированного числа переменных. Набор переменных, входящих в массив, имеет один и тот же тип.
Элементы массива, объединены общим именем и занимают в компьютере определённую область памяти. Количество элементов в массиве всегда конечно. Эти элементы, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого целого типа. Массив используют для хранения и обработки однородной информации, например таблиц и списков. Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным, или одномерным.
Массив описывается в разделе переменных.
<имя массива>: array [тип индекса] of <mun данных>;
Пример: Var
А: array [1 ..10] of real;
Одномерный массив А содержит десять элементов, вещественного типа. Если несколько массивов имеют одинаковое количество элементов и один и тот же тип, то в разделе описания переменных их можно перечислить через запятую:
В, С: array[1. 20] of integer;
По индексу определяется положение элемента в массиве. Индекс заключается в квадратные скобки и может быть целым числом
А[4] — элемент массива А находится на 4 позиции А[1] — элемент массива А находится на 1 позиции.
Индекс элемент массива можно задать выражением целого типа.
Пример: A[2i+3]
Такое задание номера элемента используют при описании некоторой последовательности.
5. Действия над элементами одномерного массива
1) Инициализация (присвоение начальных значений), при чем это значение одинаково для всех элементов массива. Присвоить каждому элементу массива одно и тоже значение вручную или пр помощи оператора цикла с известным числом повтора for:
А[1] : = 1;
А[2]:= 1; А[3]:=1;
for i:=1 to 3 do A[i]:=l;
2) Ввод и вывод элементов массива. Ввод/вывод элементов массива осуществляется при помощи цикла for
for i=1 to 10 do Read(a[i]);
for i:=1 to 10 do Write(a[i]);
Копирование массивов (присвоение значений всех элементов одного массива соответствующим элементам другого массива).
For i:=1 to 10 do A[i]:=B[i];
4) Перестановка элементов массива осуществляется при помощи дополнительной переменной.
Пример: В массиве А нужно поменять местами второй и пятый элементами.
buffer := а[2];
а[5] :=buffer;
Переменной buffer присваивается значение второго элемента массива А. Затем второму элементу присваивается значение пятого элемента массива А. Последняя операция присваивает пятому элементу значение второго элемента, который мы записали в переменную buffer.
6. Описание двумерного массива. Ввод и вывод элементов двухмерного массива. Если в описании массива заданы два индекса, то это двумерный массив. Такой массив соответствует понятию прямоугольной таблицы (матрицы). Чтобы определенный образом задать какую-либо ячейку двумерной таблицы, нужно указать номер строки и номер столбца.
Общий вид объявления двумерных массивов выглядит так:
<Имя массива>: array[<нижняя граница массива1..<верхняя граница массива1 >, <нижняя граница маси-ва2>..<верхняя граница массива2>] of<mun данных>;
Matrix : array[1..5,l:.5] of integer;
Для того, чтобы реализовать ввод матрицы в компьютер с клавиатуры, необходимо использовать вложенные циклы:
For i:=l to 5 do
For j:=l to 5 do Read(Matrix[i,j]);
Здесь i u j — счетчики целочисленного типа (byte), объявляемые в разделе var. Алгоритм такого кода:
При использовании вложенных циклов последовательно идет работа с элементами первой строки, потом второй, третьей, четвертой, пятой. Вывод матрицы на экран:
Pascal-Паскаль
Программирование. Одномерные массивы Pascal-Паскаль
- Скачено бесплатно: 25095
- Куплено: 414
-
->Программирование. Одномерные массивы Pascal-Паскаль
Программирование. Одномерные массивы Pascal-Паскаль
Понятие структуры
До сих пор мы работали с простыми типами данных – логический ( boolean ), целый ( integer , word , byte , longint ), вещественный ( real ), символьный ( char ). Любой алгоритм можно запрограммировать с помощью этих четырех базовых типов. Но для обработки информации о многообразном реальном мире требуются данные, имеющие более сложное строение. Такие сложные конструкции, основанные на простейших скалярных типах, называются структурами. Структура – некоторый составной тип данных, составленный из базовых скалярных. Если структура не изменяет своего строения на протяжении всего выполнения программы, в которой она описана, то такую структуру называют статической.
Массив – однородная совокупность элементов
Самой распространенной структурой, реализованной практически во всех языках программирования, является массив.
Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Из этого, правда, не следует делать вывод, что компоненты массива могут иметь только скалярный тип.
Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Что это значит? Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу).
Индекс массива
Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип ( integer , word или byte ), но может быть и логический и символьный.
Описание массива в Паскале. В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом:
где I – тип индекса массива, T – тип его элементов.
Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных:
Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа : I 1 .. I n . Например, индексы могут изменяться в диапазоне 1..20 или ‘ a ‘..’ n ‘.
При этом длину массива Паскаля характеризует выражение:
Вот, например, объявление двух типов: vector в виде массива Паскаля из 10 целых чисел и stroka в виде массива из 256 символов:
С помощью индекса массива можно обращаться к отдельным элементам любого массива, как к обычной переменной: можно получать значение этого элемента, отдельно присваивать ему значение, использовать его в выражениях.
Опишем переменные типа vector и stroka :
далее в программе мы можем обращаться к отдельным элементам массива a или c . Например, a [5]:=23; c [1]:=’ w ‘; a [7]:= a [5]*2; writeln ( c [1], c [3]).
Вычисление индекса массива Паскаля
Индекс массива в Паскале не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять.
Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».
Пример программы с ошибкой массива Паскаля
Хотя данная программа полностью соответствует синтаксису языка, и транслятор «пропустит» ее, на стадии выполнения произойдет ошибка выхода за пределы массива Паскаля. При n =45 выражение n *2=90, компьютер сделает попытку обратиться к элементу массива a [90], но такого элемента нет, поскольку описан массив размерностью 80.
Будем считать, что хорошая программа должна выдавать предупреждающее сообщение в случае попытки обращения к несуществующим элементам массива. Не лишним будет проверять возможный выход как за правую, так и за левую границы массива, ведь не исключено, что в результате вычисления значения выражения получится число, находящееся левее границы массива Паскаля.
Из всего этого следует сделать вывод: программисту надо быть очень аккуратным при работе с индексами массива.
Основные действия с массивами Паскаля
Как известно, определение типа данных означает ограничение области допустимых значений, внутреннее представление в ЭВМ, а также набор допустимых операций над данными этого типа. Мы определили тип данных как массив Паскаля. Какие же операции определены над этим типом данных? Единственное действие, которое можно выполнять над массивами целиком, причем только при условии, что массивы однотипны, – это присваивание. Если в программе описаны две переменные одного типа, например,
то можно переменной a присвоить значение переменной b ( a := b ). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b. Все остальные действия над массивами Паскаля производятся поэлементно (это важно!).
Ввод массива Паскаля
Для того чтобы ввести значения элементов массива, необходимо последовательно изменять значение индекса, начиная с первого до последнего, и вводить соответствующий элемент. Для реализации этих действий удобно использовать цикл с заданным числом повторений, т.е. простой арифметический цикл, где параметром цикла будет выступать переменная – индекс массива Паскаля. Значения элементов могут быть введены с клавиатуры или определены с помощью оператора присваивания.
Пример фрагмента программы ввода массива Паскаля
Рассмотрим теперь случай, когда массив Паскаля заполняется автоматически случайными числами, для этого будем использовать функцию random ( N ).
Пример фрагмента программы заполнения массива Паскаля случайными числами
Вывод массива Паскаля
Вывод массива в Паскале осуществляется также поэлементно, в цикле, где параметром выступает индекс массива, принимая последовательно все значения от первого до последнего.
Пример фрагмента программы вывода массива Паскаля
Вывод можно осуществить и в столбик с указанием соответствующего индекса. Но в таком случае нужно учитывать, что при большой размерности массива все элементы могут не поместиться на экране и будет происходить скроллинг, т.е. при заполнении всех строк экрана будет печататься очередной элемент, а верхний смещаться за пределы экрана.
Пример программы вывода массива Паскаля в столбик
На экране мы увидим, к примеру, следующие значения:
Пример решения задачи с использованием массивов Паскаля
Задача: даны два n -мерных вектора. Найти сумму этих векторов.
Решение задачи:
-
Входными данными в этой задаче будут являться два одномерных массива. Размер этих массивов может быть произвольным, но определенным. Т.е. мы можем описать заведомо большой массив, а в программе определить, сколько элементов реально будет использоваться. Элементы этих массивов могут быть целочисленными. Тогда описание будет выглядеть следующим образом:
Ход решения задачи:
- определим количество элементов (размерность) массивов, введем значение n ;
- введем массив a ;
- введем массив b ;
- в цикле, перебирая значения индекса i от 1 до n , вычислим последовательно значения элементов массива c по формуле:
Текст программы :
Пример программы суммирования векторов
Программирование
Исходники Pascal (127)
Справочник
Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту
Урок 14. Одномерные массивы. Работа с элементами

Сегодня мы с вами наконец-то начинаем новую тему — одномерные массивы .
Одномерные массивы. Определение.
Одномерный массив — это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер. Обращение к элементам массива осуществляется с помощью указания имени массива и номеров элементов.
Между именем типа и именем переменной ставится знак «двоеточие». Array — служебное слово (в переводе с английского означает «массив», «набор»); [1..N] — в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива; of — служебное слово (в переводе с английского «из»); integer — тип элементов массива.
Индексом могут быть не только натуральные числа: мы можем написать так: [0..10], [-29..45], [‘a’..’z’], [false..true] — то есть нам подходят любые символы и числа — главное соблюсти следующее условие: левая часть меньше правой. Для того чтобы определить, что меньше — восклицательный знак(‘!’) или точка(‘.’) используем таблицу ASCII и функции Ord() и Chr().
Как же производится ввод одномерного массива?
Для того чтобы ввести или вывести значения элементов такого массива, используем цикл с параметром(или с постусловием, или с предусловием — в общем, любой цикл. ).
Как видите, ничего страшного в массивах нет. Массивы применяют в тех случаях, когда нельзя обойтись одной-двумя переменными (примеры таких задач мы рассматривали в решении задач из блока Series). В случаях, когда после ввода последовательности целиком пользователю необходимо обратиться к переменным в середине последовательности, в начале, поменять их значения местами, отсортировать.
Раз уж мы затронули тему задач из блока Series, давайте решим пару задачек оттуда с помощью массивов, а не тем увечным способом, которым нам приходилось пользоваться.
Одномерные массивы. Решение задач.
Series8. Дано целое число N и набор из N целых чисел. Вывести в том же порядке все четные числа из данного набора и количество K таких чисел.
Series28. Дано целое число N и набор из N вещественных чисел: A1, A2, …, AN. Вывести следующие числа:
Исходное решение: Series28.
Более подробно про возведение числа в степень мы говорили в решении задачи for36.
Ну и напоследок давайте разберём веселенькую задачу на длинную арифметику.
Задача. Найти факториал числа.
Мы уже решали эту задачу здесь(for19).
Научимся вычислять факториал натурального числа N. Факториал числа — это произведение чисел 1*2*3*…*(N-1 )*N (обозначается как N!). Сложность задачи в том, что уже 8!=40320, а 13!=6227020800. Типы данных Integer, Longlnt применимы весьма в ограниченном диапазоне натуральных чисел. Для представления факториала договоримся использовать массив. Пример:
| A[0] | A[1] | A[2] | A[3] | A[4] | A[5] | A[6] | A[7] | A[8] |
| 8 | 0 | 0 | 8 | 6 | 1 | 9 | 9 | 3 |
В массиве записано значение 11!=39916800. Каким образом? В А[0] фиксируется число занятых элементов массива, в А[1] — цифра единиц результата, в А[2] — цифра десятков результата, в А[3] — цифра сотен результата и т. д. Почему так, а не наоборот? Такая запись позволяет исключить сдвиг элементов массива при переносе значений в старший разряд. А сейчас наберите, как обычно, текст программы, выполните компиляцию и, выполните ее в пошаговом режиме, отслеживая изменение значений переменных при не очень большом значении N. Добейтесь полного понимания логики работы программы.
Для того чтобы выполнить программу в пошаговом режиме, нажмите «шаг без входа в подпрограмму» и перейдите в «локальные переменные».

Одномерный массив — это конечное упорядоченное множество элементов. За первым элементом идет второй, за вторым — третий и т. д. Индекс может быть чем угодно — и целым числом, и символом. Но чаще мы всё-таки будем пользоваться следующим диапазоном: [1.. N].
На сегодня все! Если у вас еще остались вопросы о том, как работает программа выше, оставляйте их в комментариях. И очень скоро мы начнем решать задачи на массивы из задачника М. Э. Абрамяна.
Действия над одномерными массивами

Массив, описанный как типизированная константа, уже содержит данные. Массивы, объявленные в разделе описания переменных, необходимо заполнить данными, прежде чем выполнять с ними какие-либо действия.
Значения элементов массива также можно задать следующими способами: Смотри слайд 3,4,5.
* при вводе данных с клавиатуры;
* с помощью датчика случайных чисел;
* присваиванием заданных значений;
* считывая значения элементов из файла.
В любом случае для заполнения массива используется цикл. Наиболее удобен цикл for, причем для многомерных массивов применяются вложенные циклы.
Например, "слепой", без использования комментариев, ввод с клавиатуры: 3 вектора из 5 элементов:
for i:=l to 5 do readln(a[i]);
На практике ввод элементов массива обычно сопровождается выводом соответствующих поясняющих текстов.
Ввод данных с клавиатуры является основным, но не единственным способом заполнения массивов. Довольно часто массив заполняется при помощи присваивания элементам определенных или случайных значений.
Например, фрагмент программы заполнения одномерного массива х из n элементов случайными числами в диапазоне от 0 до 99 включительно выглядит так:
for i:=l to n do x[i]:=random(100);
Заполнение массивов случайными числами часто используется при математическом моделировании и в играх для создания "случайной" ситуации. Нередко приходится заполнять массив нулевыми значениями — обнулять его.
Вывод массива. Смотри слайд 6,7.
Вывод значений элементов массива также выполняется в цикле for с использованием операторов write и writeln.