Урок № 24.
Тема. Одномерный массив. Задание массива.
Вопросы темы:
1. Использование массива данных.
2. Массив - переменная структурированного типа.
3. Формы описания массива в Turbo Pascal
5. Способы задания (заполнения) массива
Получение массива случайным образом, используя функцию RN(x)
Презентация "Основы Турбо Паскаль"
Презентация "Сортировка одномерного массива"
В некоторых случаях приходится сталкиваться с ситуацией, когда нужно использовать относительно много данных одного типа. Представим себе программу, которая позволяет вычислить определенные метеорологические данные и в которой всегда будет не менее 365 переменных. Таким способом можно присваивать отдельным переменным метеоданные по отдельным дням всего года. Можно объявить тип real у 365 переменных, используя запись
Var day1, day2, day3,.. day365:real;
Чтобы только записать все данные, понадобится страница, а чтобы выполнить над введенными данные какие-либо арифметические операции, например, найти среднее арифметическое, понадобится еще страница записи программы. Согласитесь, не совсем удобно в плане расхода времени, бумаги и т.д. Для таких случаев Pascal предоставляет возможность введения большого числа переменных одного и того же типа, используя простые выражения. Вспомогательное средство, которые имеется в виду, известно под именем array, (в переводе с английского – массив).
Массив - переменная структурированного типа
Массив – это совокупность конечного числа данных одного типа или упорядоченная последовательность данных, состоящая из фиксированного числа элементов. Данные одного типа имеют одно имя.
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа.
Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным. Вообще количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.
Формы описания массива в Turbo Pascal
Массивы могут быть описаны несколькими способами:
1. ARRAY – указывает на ряд переменных одного и того же типа, например, integer или real, имеющих один идентификатор. Определенная переменная из массива представлена именем массива, например, day, после которого в квадратных скобках записано число (номер). Или говорят ИМЯ [индекс]. Отдельные переменные массива называются элементами массива.
Var имя массива: ARR или AY [n1..n10] of <тип элемента>;
Пример:
Var а: ARRAY [100] of integer;
Если задается несколько одинаковых массивов, то они описываются следующим способом:
а,b,c: ARRAY [1..50] of; const:=5;
Или
Var a[1..d];
2. TYPE
Сначала в разделе описания типов TYPE указывается тип массива, затем в разделе описаний переменных Var перечисляются массивы, относящиеся к указанному типу.
Введение типа массива увеличивает раздел описаний, но упрощает отладку программ. Указание типов в разделе описаний является хорошим стилем программирования.
Type massiv:=array[n1..n2] of <тип элементов>;
Var a,b,c:massiv
Пример:
Type mass:=array[1..30] of integer;
Var a,b:massiv;
Одномерный массив – это фиксированное количество элементов одного типа, объединенных одним именем, где каждый элемент имеет свой номер (индекс). Обращение к элементам массива осуществляется с помощью указания имени массива и номеров элементов.
Пример: числовая последовательность четных натуральных чисел 2, 4, 6, ..., N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6, ..., А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6, ..., N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.
Например, A[7] — седьмой элемент массива А; D[6] — шестой элемент массива D.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:
имя массива : Array [начальное значение индекса..конечное значение индекса] Of базовый тип;
Например,
Var B : Array [1..5] Of Real, R : Array [1..34] Of Char;
— описывается массив В, состоящий из 5 элементов и символьный массив R, состоящий из 34 элементов. Для массива В будет выделено 5*6=30 байт памяти, для массива R — 1*34=34 байта памяти.
Задача 1. Заполнить одномерный массив элементами, отвечающими следующему соотношению:
a1=1; a2=1; ai=ai-2+ai-1 (i = 3, 4, ..., n).
Read(N); {Ввод количества элементов}
A[1]:= 1;
A[2]:= 1;
FOR I := 3 TO N DO
A[I] := A[I - 1] + A[I - 2];
Другой вариант присваивания значений элементам массива — заполнение значениями, полученными с помощью датчика случайных чисел.
Задача 2. Заполнить одномерный массив с помощью датчика случайных чисел таким образом, чтобы все его элементы были различны.
Program Create;
Type Mas = Array[1..100] Of Integer;
Var A : Mas; I, J, N : Byte; Log : Boolean;
Begin
Write(''); ReadLn(N);
randomize; A[1] := -32768 + random(65535);
For I := 2 To N Do
Begin
Log := True;
Repeat
A[i] := -32768 + random(65535); J := 1;
While Log and (j <= i - 1) Do
begin Log := a[i] <> a[j]; j := j + 1 End
Until Log
End;
For i := 1 to N Do Write(a[i]:7); writeln
End.
2) ввод значений элементов массива с клавиатуры используется обычно тогда, когда между элементами не наблюдается никакой зависимости. Например, последовательность чисел 1, 2, -5, 6, -111, 0 может быть введена в память следующим образом:
Program Vvod;
Var N, I : Integer;
A : Array [1..20] Of Integer;
Begin
Write('Введите количество элементов массива '); ReadLn(N);
FOR I := 1 TO N DO
Begin
Write('Введите A[', I, '] '); ReadLn(A[I])
End.
Над элементами массивами чаще всего выполняются такие действия, как
а) поиск значений;
б) сортировка элементов в порядке возрастания или убывания;
в) подсчет элементов в массиве, удовлетворяющих заданному условию.
Заполнить массив можно следующим образом:
1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой реккурентным соотношением.
Способы задания (заполнения) массива
Var
a: array[1..30] of integer;
i: byte;
begin
a[i]:=5;
a[i]:=6;
……..;
a[i]:=30;
end.
Пример ввода массива с клавиатуры с использованием цикла:
Var
a: array[1..30] of integer;
i: byte;
begin
for i:=1 to 30 do
begin
writeln(‘Введите’,i, ‘элемент массива’);
readln a[i];
end;
end.
Пример вывода массива с использованием цикла:
Var
a: array[1..30] of integer;
i: byte;
begin
for i:=1 to 30 do
begin
writeln(‘Введите’,i, ‘элемент массива’);
readln a[i];
end;
for i:=1 to 30 do
writeln a[i];
end;
end.
3. Получение массива случайным образом, используя функцию RN(x)
RN(x) – функция от х, которая возвращает случайное число в интервале от 0 до 1. Для запуска генератора случайных чисел используется функция RANDOMIZE.
Задача: Сформировать одномерный массив из элементов, где элементы массива – случайные числа от 0 до 45. Напечатать в прямом и обратном порядке.
Решение:
Program Ex1;
Var
i,n: integer; mas:array[1..100] of integer;
begin
randomize;
writeln (‘Введите размер массива’); readln (n);
for i:=1 to n do
begin
mas[i]:=random(45);
writeln (mas[i],’ ‘,’=’);
end;
for n downto 1 do
writeln (mas[i],’ ‘,’=’);
end;
end.