Как сделать массив в паскале

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Одномерный массив – это именованная последовательность, состоящая из пронумерованных элементов одного типа. Элементы могут быть любого имеющегося в Pascal (за исключение файлового) типа данных. Номер, также называемый индексом, имеет каждый элемент массива. Индекс должен быть порядкового типа. Одномерный массив можно объявить как в качестве переменной:

var : array[m..n] of ;

type = array[m..n] of ;

Здесь m – номер первого элемента, а n – последнего. Например, если диапазон задан так: [1..10], то это означает, что определен одномерный массив размерностью в 10 элементов, с индексами от 1 до 10.

Для обращения к элементу массива нужно указать его имя и номер: mas[i], тут mas – имя, i – номер. В программе ниже мы объявим массив и произведем простые операции над его элементами.

program array_primer;
uses crt;
var mas , A : array [ 1 .. 10 ] of real ;
begin
clrscr;
mas [ 1 ] := 32 ;
mas [ 5 ] := 13 ;
mas [ 9 ] := 43 ;
A [ 1 ] := ( mas [ 9 ] — mas [ 1 ] ) * mas [ 5 ] ;
write ( A [ 1 ] : 5 : 2 ) ;
readkey;
end .

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

for i:=1 to n do
begin
mas[i]:=i;
write(mas[i]:3);
end;

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

program array_random;
uses crt;
var i : integer ;
mas : array [ 1 .. 100 ] of integer ;
begin
clrscr;
randomize;
for i := 1 to 100 do
begin
mas [ i ] := random ( 10 ) ;
write ( mas [ i ] : 2 ) ;
end ;
readkey;
end .

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

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

Поиск максимального элемента в массиве:

program array_max;
uses crt;
type massiv = array [ 1 .. 10 ] of word ;
var i , max : integer ;
A : massiv;
begin
clrscr;
for i := 1 to 10 do
begin
write ( ‘Элемент №’ , i : 2 , ‘=’ ) ;
read ( A [ i ] ) ;
end ;
max := A [ 1 ] ;
for i := 1 to 10 do
if max[ i ] then max := A [ i ] ;
writeln ;
write ( ‘Максимальный элемент = ‘ , max ) ;
readkey;
end .

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

Определение количества положительных элементов:

program array_pol;
uses crt;
var i , k : integer ;
mas : array [ 1 .. 10 ] of integer ;
begin
clrscr;
randomize;
for i := 1 to 10 do
begin
mas [ i ] := random ( 40 ) — 20 ;
writeln ( ‘Элемент №’ , i : 2 , ‘=’ , mas [ i ] : 3 ) ;
end ;
k := 0 ;
for i := 1 to 10 do
if mas [ i ] > = 0 then k := k + 1 ;
writeln ;
write ( k : 3 , ‘ положительных элементов’ ) ;
readkey;
end .

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

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

Массивы отражают идею таких математических понятий, как

    (одномерные массивы) и
  • матрицы (двумерные массивы)

Contents

Статические массивы

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

Значение startindex должно быть меньше либо равно значению endindex. При этом оба значения должны быть целыми константами, либо целочисленными константными значениями. Допускается, если одно или оба значения будут отрицательными либо равными 0.

Одномерный массив

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

Многомерный массив

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

Пример многомерного массива:

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

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

Доступ к элементам массива

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

Массивы литералов

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

Школьник, который умеет обрабатывать массивы, может считать себя начинающим программистом.

В презентации имеется главное меню, то есть Содержание (Презентеция), с которого с помощью гиперссылок мы можем перейти на любой пункт меню (слайд 2).

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

1. Одномерный массив

Название регулярный тип (или ряды) массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве. (Приложение 1 [13, с.181])

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

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

Массивы бывают одномерными (один индекс), двумерными (два индекса) и т.д.

Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу). Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. (Приложение 1 [13, с.181]). Тип индекса определяет границы изменения значений индекса.

  • Х – имя массива;
  • 1, 2,…,n – индексы (порядковые номера) элементов;
  • Х7 седьмой элемент массива Х.

1.2. Описание одномерных массивов

Одномерный массив – это фиксированное количество элементов одного типа, объединенных одним именем, причем каждый элемент имеет свой уникальный номер, и номера элементов идут подряд. (Приложение 1 [12, с.100])

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

Тип массив описывается следующим образом:

Переменную типа массив можно описать сразу в разделе описания переменных Var:

Var Имя переменной: array [тип индекса (ов)] Of тип элементов;

Массив Х – одномерный, состоящий из двадцати элементов вещественного типа. Элементы массива хранятся в памяти компьютера последовательно друг за другом.

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

Индексы элементов массива могут начинаться с любого целого числа, в том числе и отрицательного, например:

Type bb = Array [-5..3] Of Boolean;

Массивы данного типа будут содержать 9 логических переменных, пронумерованных от -5 до 3.

1.3. Ввод и вывод одномерных массивов в Паскале

Ввод и вывод массивов осуществляется поэлементно.

Введем одномерный массив Х, состоящий из 30 элементов, то есть необходимо ввести некую последовательность элементов Х1, Х2, …, Х30.

Пусть i индекс (порядковый номер) элемента в массиве Х. Тогда

Для ввода массива можно использовать любой цикл.

Первый вариант: ввод массива с использованием цикла с предусловием (Рисунок 1).

Program Primer_1;

Var i: integer;

X: array [1..30] of Integer;

Begin

i := 1;

While i 30;

Readln

End.

Массив X введен с использованием цикла с постусловием.

Третий вариант: ввод массива с использованием цикла с параметром (Рисунок 3).

Program Primer_3;

Var i: integer;

X: array [1..30] of Integer;

Begin

For i := 1 To 30 Do Read (X[i]);

Readln

End.

Массив вводится с помощью цикла с параметром, где в качестве параметра используется индекс элемента массива (i).

Вывод одномерного массива осуществляется аналогично.

В программе вместо операторов Read или Readln используются операторы Write или Writeln. Но просто заменить одни операторы на другие здесь недостаточно. Для того чтобы выводимые значения не сливались между собой, надо явным образом вставлять между ними разделитель – пробел или перевод строки. Приведем два возможных способа вывода массива:

На первый взгляд второй способ может показаться более простым и удобным, но это далеко не всегда так. Результат работы такой программы зачастую неудобно, а то и просто невозможно анализировать. Ведь каждый элемент массива будет располагаться в отдельной строке, следовательно, мы не сможем увидеть более 25 элементов одновременно. Кроме того, очень часто массив требуется распечатать дважды, чтобы сравнить состояние массива до обработки и результат его обработки. В этом случае сравнение состояний массива гораздо удобнее проводить, если они распечатаны в двух соседних строках, а элементы выровнены по столбцам, то есть к варианту 1 должна быть добавлена еще и форматная печать (указано количество позиций, которое должно отводиться на печать одного элемента).

Например, выведем одномерный массив Х1, Х2, …, Хn, состоящий из элементов вещественного типа, используя цикл с параметром (Рисунок 4):

Program Primer_4;

Const n = 30;

Var i: Integer;

X: Array [1..n] Of Real;

Begin

For i:= 1 To n Do Write (X[i] : 6 : 2, ‘ ‘);

Writeln;

Readln

End.

2. Примеры решения задач

2.1. Вычисление суммы и произведения элементов массива, удовлетворяющих заданному условию.

Задача 1. Дан целочисленный одномерный массив, состоящий из n элементов. Найти сумму и произведение нечетных элементов, кратных 3. (Презентация)

Введем обозначения: n – количество элементов в массиве; А – имя массива; i – индекс элемента массива; Ai – i-й элемент массива A; s – сумма нечетных элементов массива, кратных 3; p – произведение нечетных элементов массива, кратных 3.

Выходные данные: s, p.

Первоначально сумма искомых элементов равна нулю: не просуммировано ни одно слагаемое, то есть s:=0. Далее, используя любой оператор цикла, просматриваем весь массив от первого и до последнего элемента. И если при этом элемент массива нечетный и кратен 3, то к уже накопленной сумме добавляется очередное слагаемое, т.е. s:= s + A[i]. Здесь слева и справа от знака присваивания записано имя одной и той же переменной s, именно это обеспечивает постепенное накопление суммы: s справа – уже вычисленное известное значение суммы, s - ее новое, вычисляемое значение.

При просмотре массива можно сразу вычислить и произведение элементов массива, удовлетворяющих заданному условию. Произведение вычисляется с помощью оператора p:=p*A[i]. При этом p справа и p слева имеют разные значения: p справа – уже известное, вычисленное ранее значение произведения, p слева – новое, вычисляемое его значение. Первоначально искомое произведение равно единице, т.е. p:=1.

При решении этой задачи можно использовать любой из видов циклов. Рассмотрим несколько вариантов решения задачи.

Первый способ. Для решения используется цикл с параметром:

Program Primer1_1;

Var A: Array[1..20] Of Integer;

i, n, s, p: Integer;

Begin

Write (‘n=’); Readln (n);

For i:=1 To n Do Readln (A[i]);

s:= 0; p:=1;

For i:=1 To n Do

If (A[i] mod 2 <>0) and (A[i] mod 3 = 0) Then

Begin

s:=s+A[i]; p:= p*A[i]

End;

Writeln (‘s=’, s, ‘p=’, p);

Readln

End.

Второй способ. Для решения используется цикл с предусловием:

Program Primer1_2;

Var A: Array[1..20] Of Integer;

i, n, s, p: Integer;

Begin

Write (‘n=’); Readln (n); i:=1;

While i 0) and (A[i] mod 3 = 0) Then

Begin

s:=s+A[i]; p:= p*A[i]

End; i:= i + 1

End;

Writeln (‘s=’, s, ‘p=’, p);

Readln

End.

2.2. Нахождение количества элементов, удовлетворяющих заданному условию

Задача 2. Дан массив целых чисел. Найти количество тех элементов, значения которых положительны и не превосходят заданного натурального числа А. (Презентация)

Введем обозначения: n – количество элементов в массиве; X – имя массива; i – индекс элемента массива; Xii-й элемент массива X; А – заданное число; k – количество элементов, значения которых положительны и не превосходят заданного числа А.

Выходные данные: k.

Вводим с клавиатуры значение числа А. Количество элементов, значения которых положительны и не превосходят заданного числа А, вначале полагаем равным нулю, то есть k:=0. Если очередной элемент массива положителен и не превосходят заданного числа A, то количество таких элементов нужно увеличить на единицу, то есть k:=k + 1. Таким образом, обрабатываются все элементы массива.

При решении этой задачи можно использовать любой из видов циклов. Рассмотрим несколько вариантов решения задачи.

Первый способ. Для решения используется цикл с параметром:

Program Primer2_1;

Var X: Array[1..20] Of Integer;

i, n, k, A: Integer;

Begin

Write (‘n=’); Readln (n);

For i:=1 To n Do Readln (X[i]);

Write (‘A=’); Readln (A); k:= 0;

For i:=1 To n Do

If (X[i] >0) and (X[i] n;

Write (‘A=’); Readln (A); k:= 0; i:=1;

Repeat

If (X[i] >0) and (X[i] n;

Writeln (‘k=’, k);

Readln

End.

2.3. Нахождение номеров элементов, обладающих заданным свойством

Задача 3. Найти номера четных элементов, стоящих на нечетных местах. (Презентация)

Введем обозначения: n – количество элементов в массиве; X – имя массива; i – индекс элемента массива; Xi – i-й элемент массива Х.

Выходные данные: i.

Необходимо просмотреть весь массив. Если просматриваемый элемент является четным, а его порядковый номер – нечетный, то вывести его номер. При решении этой задачи можно использовать любой из видов циклов.

Составим программу с помощью цикла с параметром:

Program Primer3_1;

Var X: Array[1..20] Of Integer;

i, n: Integer;

Begin

Write (‘n=’); Readln (n);

For i:=1 To n Do Readln (X[i]);

For i:=1 To n Do

If (X[i] mod 2 = 0) and (i mod 2<>0) Then Write (i:5);

Readln

End.

Задача 4. Найти номер последнего отрицательного элемента массива.

Введем обозначения: n – количество элементов в массиве; А – имя массива; i – индекс элемента массива; Ai – i-й элемент массива A; m – номер последнего отрицательного элемента массива.

Выходные данные: m.

Последний отрицательный элемент массива – это первый отрицательный элемент, который встретится при просмотре массива с конца. Если очередной элемент не является отрицательным, то нужно уменьшать значение текущего индекса (i:=i-1), пока он не станет меньше номера первого элемента или не будет найден отрицательный элемент. Переменная m получает значение i (номер отрицательного элемента), т.е. m := i. Если в массиве нет отрицательного элемента, то значение переменной m остается равным нулю.

Program Primer3_2;

Const n=10;

Var A: Array[1..n] Of Integer;

i, m: Integer;

Begin

For i:=1 To n Do Readln (A[i]);

m := 0; i:=n;

While (i >= 1) and (A[i] >=0) Do i:=i-1; m:=i;

Writeln (‘m=’, m);

Readln

End.

Тип в программировании – это множество, для которого оговорен некоторый набор операций над элементами – значениями, которые могут принимать переменные этого типа. Существуют четыре стандартных типа Паскаля: типы Real, Integer (это числовые множества), тип Char (множество символов), тип Boolean. Однако в Паскале имеются средства, позволяющие определять, исходя из имеющихся типов, новые типы. Различают следующие структурированные типы данных:

  • массив;
  • запись;
  • строка;
  • множество.

В данной лекции мы подробно рассмотрим массивы.

Определение массива

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

Массив – это упорядоченная последовательность однотипных элементов определенной длины, имеющая общее имя. Номер элемента в последовательности называется индексом. Количество элементов в массиве не может быть изменено в процессе выполнения программы. Элементы массива размещаются в памяти последовательно и нумеруются от 1 до n, где n – их количество в массиве. К каждому элементу массива имеется прямой доступ. Это означает, что для того чтобы обратиться к какому-либо элементу массива, нет нужды перебирать все его предыдущие элементы, достаточно указать номер этого элемента.

Массив имеет следующие характеристики:

  • имя массива записывается по тем же правилам, что и имена переменных. Имя массива задает имя каждому элементу массива: каждый элемент массива обозначается этим именем и индексом, который определяет номер (место) этого элемента в массиве;
  • базовый тип общий тип элементов массива;
  • размерность (ранг) это количество элементов в массиве;
  • диапазон количество допустимых значений каждого индекса;
  • форма совокупность размерности и диапазонов.

Массивы могут быть одномерными и многомерными. Но мы ограничимся рассмотрением только одномерных и двумерных массивов.

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

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

По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные – матрицами.

Значения индексов можно задать непосредственно числом (прямая адресация) – A(1), A(4,2) или косвенно, указав в индексе идентификатор переменной, которая позволит вычислить индекс (косвенная адресация) – A(i), A(i, j+2).

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

Одномерные массивы: описание, ввод и вывод, обработка массива

Описать массив можно двумя способами.

В разделе описания переменных мы можем описать массив следующим образом:

Здесь A – название массива;

Array – служебное слово;

n1,n2 – соответственно номер первого и последнего элемента массива;

– любой из уже изученных типов.

Количество элементов массива будет равно (n2- n1+1).

означает, что полученный массив будет состоять из 20 вещественных чисел, первое из которых будет иметь номер 1, последнее – 20. Наш массив будет иметь имя Massiv.

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

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

В данном случае мы сначала описали новый тип Mas – массив из десяти целых чисел с номерами от 10 до 19, затем описали переменную B типа Mas.

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

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

В этом случае пользователь вводит через пробел n элементов массива. Для ввода элементов массива с новой строки используется оператор ReadLn. Ввод данных в массив происходит следующим образом: сначала значение счетчика цикла равно 1; выполняется операция Read (A[1]); поле чего счетчик цикла становится равным 2; выполняется операция Read (A[2])… и т.д. до значения i=n включительно.

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

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

Как уже было сказано выше, для обработки массивов используются циклы.

Пример: пусть имеется массив M, состоящий из n элементов с номерами от 1 до n. Найти сумму элементов массива, вывести ее на экран.

Двумерные массивы: описание, ввод и вывод, обработка массива

В математике очень распространено такое понятие как матрица. Матрица – это таблица из коэффициентов A=(aij). Элементы матрицы образуют столбцы и строки. Первый индекс ( i ) указывает номер строки, второй ( j ) – номер столбца, на пересечении которых находится элемент aij.

Определим некоторые действия над матрицами:

В программировании матрицы удобно представлять с помощью двумерных массивов.

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

Здесь n1,n2 – начальное и конечное значения первого индекса;

m1,m2 – начальное и конечное значения второго индекса.

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

Это массив, состоящий из 10*20*30=6000 целых чисел и занимающий в памяти 6000*2=12000 байт. В Паскале нет ограничения сверху на размерность массива. Однако в каждой конкретной реализации Паскаля ограничивается объем памяти, выделяемый под массивы. В Турбо Паскале это ограничение составляет 64 Кбайта.

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

Теперь для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе – раздел констант.

Для ввода и вывода двумерных массивов используются два вложенных цикла.

Для обработки двумерных массивов также используются два вложенных цикла.

Пример: найти произведение массива A на число L.

Обр-ку дв. массива см. Рапаков стр.126!

Действия над массивом как единым целым

Такие действия допустимы лишь в двух случаях:

В обоих случаях массивы должны иметь одинаковые типы (тип индексов и тип элементов).

При выполнении операции присваивания P := Q все элементы массива P станут равны соответствующим элементам массива Q.

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

Год Месяц
1 2 3 4 5 6 7 8 9 10 11 12
1981 -23 -17 -8 7 14 18 25 19 12 5 -4 -19
1982 -17 -10 -3 6 8 13 28 24 6 2 -13 -20
1990 -10 -15 -4 9 13 17 23 20 10 8 -14 -20

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

А если нужно поменять местами значения этих строк, то это делается через третью переменную того же типа:

Читайте также: