Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмы и алгоритмические языки. Учебное пособие
.pdf
101
Элементы массива упорядочены по значениям индекса. В языке
ТР индексы заключаются в квадратных скобках:
одномерный массив размерностью N
;
двумерный массив размерностью
.
За границы изменения значений индекса отвечает его тип –
целочисленный, символьный или логический.
Для описания массива используются ключевые слова ARRAY OF
(массив из).
Формат записи одномерного массива размерности :
TYPE
<имя типа> = ARRAY[1..N] OF <тип компонента>;
VAR
<идентификатор,…> : <имя типа>;
Формат записи двумерного массива размерности :
TYPE
<имя типа> = ARRAY[1..N, 1..M] OF <тип компонента>;
VAR
<идентификатор,…> : <имя типа>;
Массив может быть описан только в разделе переменных без
представления типа в разделе описания типов данных:
VAR
<идентификатор>: ARRAY[1..N] OF <тип компонента>;
<идентификатор>: ARRAY[1..N, 1..M] OF <тип компонента>;
Пример:
TYPE
KL = (K1, K2, K3, K4);
ST= ARRAY[1..255] OF CHAR;
ST1= ARRAY[1..10, 1..15] OF INTEGER;
VAR
M1:ST;
M2: ARRAY[1..60] OF INTEGER;

102
M3: ARRAY[1..4] OF KL;
MAS: ARRAY[1..4] OF INTEGER;
D: ST1;
Над массивами можно выполнять операции отношения («=»;
«<>») и операции присваивания. При выполнении этих операций типы
индексов и элементов должны совпадать.
Над массивами не определены операции отношения. Нельзя,
например, записать
IF A=B THEN…
Сравнить два массива можно поэлементно, например:
IF A[I]<>B[I] THEN…
Для ввода элементов одномерного массива удобно использовать
оператор цикла с параметром:
FOR I:= 1 TO 10 DO READLN (A[I]);
Значения элементов двумерного массива вводятся с помощью
вложенного оператора FOR:
FOR I:= 1 TO 5 DO
FOR J:= 1 TO 5 DO READLN (B[I, J]);
Вывод значений элементов массива выполняется аналогичным
образом, но используются операторы WRITE или WRITELN:
FOR I:= 1 TO 10 DO WRITELN (A[I]);
или
FOR I:= 1 TO 5 DO
FOR J:= 1 TO 5 DO WRITELN (B[I,J]);
Копированием массивов называется присваивание значений всех
элементов одного массива всем соответствующим элементам другого
массива.
Копирование можно выполнить при помощи одного оператора
присваивания, например A:=D; или с помощью оператора FOR:
FOR I:= 1 TO 10 DO A[I]:= D[I];
Оба массива должны быть идентичны по структуре.
Часто встречаются задачи, в которых необходимо найти
элементы, отвечающие некоторым условиям. Например, определить
количество положительных элементов:
K:= 0;
FOR I:= 1 TO 4 DO
IF A[I] >= 0 THEN K:= K + 1;
В данном примере переменная K играет роль счетчика (считает
количество положительных элементов массива A).

103
Массив можно сформировать тремя способами: по формуле,
случайным образом, вводом элементов с клавиатуры:
1. по формуле:
FOR I:= 1 TO 10 DO А[I] := I+3;
2. случайным образом. Для формирования случайных чисел в
языке Паскаль используется функция RANDOM:
RANDOMIZE; {Включение генератора
случайных чисел}
FOR I:= 1 TO 10 DO А[I] := RANDOM(I);
3. вводом элементов с клавиатуры:
FOR I:= 1 TO 10 DO
BEGIN
WRITE(‘Ведите следующий элемент массива:’);
READLN (А[I])
END;
Обработка одномерных и двумерных массивов
Пример 6.1. Просуммировать элементы столбцов заданной
матрицы размером 4×3. Результат получить в одномерном массиве
размером 3.
I=1, 4
J=1, 3
BB. A[I, J]
J=3
S=0
I=1, 4
S=S+A[I, J]
B[J]=S
J=1,3
B. B[J]
PROGRAM PR6.1; {ДВУМЕРНЫЙ МАССИВ}
USES CRT;

104
VAR S, I, J: INTEGER;
A: ARRAY [1..4, 1..3] OF INTEGER;
B: ARRAY [1..3] OF INTEGER;
BEGIN
CLRSCR;
FOR I:=1 TO 4 DO
FOR J:=1 TO 3 DO
BEGIN
WRITE ('A[', I, J, ']=');
READLN (A[I, J])
END;
CLRSCR;
WRITELN ('ВЫВОД ИСХОДНОГО МАССИВА A[4, 3]:');
WRITELN;
FOR I:=1 TO 4 DO
BEGIN
FOR J:=1 TO 3 DO
BEGIN
WRITE (A[I, J]:4)
END;
WRITELN
END;
FOR J:=1 TO 3 DO
BEGIN
S:=0;
FOR I:=1 TO 4 DO
S:=S+A[I, J];
B[J]:=S;
END;
WRITELN ('ВЫВОД ОДНОМЕРНОГО МАССИВА B[3]:');
WRITELN
FOR J:=1 TO 3 DO
WRITE (B[J], '':2);
END.

105
Обработка вложенных циклов
Пример 6.2. Вывести на экран таблицу умножения.
PROGRAM TABLICA_1;
USES CRT;
VAR I, J: BYTE;
X,Y: INTEGER;
BEGIN
CLRSCR;
GOTOXY (20,1);
TEXTCOLOR (4);
WRITELN ('ТАБЛИЦА УМНОЖЕНИЯ');
X:=2; TEXTCOLOR(15);
FOR I:=1 TO 10 DO
BEGIN
IF I<=5 THEN
Y:=3
ELSE
Y:=14;
WRITELN;
FOR J:=1 TO 10 DO
BEGIN
GOTOXY(X,Y);
WRITELN (I,’*’, J, ’=’,I*J);
Y:=Y+1;
END;
DELAY (65000);
X:=X+12;
IF X>50 THEN
BEGIN
X:=2

106
END
END;
READLN
END.
Рисунок 6.1. Результат выполнения программы TABLICA_1
Пример 6.3. Вывести на экран таблицу умножения в виде
«квадрата Пифагора».
PROGRAM TABLICA_2;
USES CRT
VAR I, J: BYTE;
X,Y: INTEGER;
BEGIN
CLRSCR;
GOTOXY(35,2); {Установка курсора во второй строке 35 позиции}
TEXTCOLOR(4); {Установка красного цвета для заголовка}
WRITELN('ТАБЛИЦА ПИФАГОРА');
Y:=4;
TEXTCOLOR(15); {Установка белого цвета}

107
FOR I:=1 TO 10 DO
BEGIN
X:=20;
FOR J:=1 TO 10 DO
BEGIN
GOTOXY(X,Y);
WRITE (I*J:3);
X:=X+5;
END;
DELAY(65000);
Y:=Y+2;
END;
READLN
END.
Рисунок 6.2. Результат выполнения программы TABLICA_2
Пример 6.4. Старинная задача. Сколько можно купить быков,
коров и телят, если плата за быка 10 рублей, за корову – 5 рублей, за
теленка полтинник (0,5 рублей), если на 100 рублей надо купить 100
голов скота.
Составим два уравнения:
где
– количество быков;
– количество коров;

108
– количество телят.
PROGRAM STARIN;
USES CRT;
VAR B, K, T: INTEGER;
ZB, ZK, ZT: REAL;
BEGIN
CLRSCR;
ZB:=10;
ZK:=5;
ZT:=0.5;
FOR B:=0 TO 100 DO
FOR K:=0 TO 100 DO
FOR T:=0 TO 100 DO
IF ((B*ZB)+(K*ZK)+(T*ZT)=100) AND (B+T+K=100) THEN
BEGIN
WRITELN('НА 100 РУБ МОЖНО КУПИТЬ:');
WRITELN('БЫКОВ - ',B,';', ' КОРОВ - ',K,';', ' ТЕЛЯТ –
',T,'.')
END;
READKEY
END.

109
Рисунок 6.3. Результат выполнения программы STARIN
Генератор случайных чисел
При решении задач часто возникает необходимость в получении
случайного результата в определенных пределах. Т.к. искусственная
реализация случайности чисел невозможна, то в программировании
существует возможность создания псевдослучайных чисел. Для
генерации псевдослучайных чисел в заданном диапазоне в языке TP
существует функция RANDOM. Перед ее использованием необходимо
использовать процедуру инициализации датчика псевдослучайных
чисел RANDOMIZE. Если перед функцией RANDOM не использовать
процедуру RANDOMIZE программа будет выдавать один и тот же
результат. Функция RANDOM генерирует случайное число в
диапазоне от 0 (включительно) до 1. Значение оператора RANDOM
рассчитывается по формуле RANDOM (max – min + 1) + min
Примеры:
RANDOM(1) – все 1
RANDOM(2) – числа [0, 2)
RANDOM(20) числа [0, 19]
RANDOM(20) – 10 числа [–10, 9]
RANDOM(21) + 10 числа [10, 30]
RANDOM(20) – 30 числа [–30, –11]
RANDOM(5) + 10 числа [10, 14]

110
Пример 6.2. Сформировать одномерный массив из N элементов,
где элементами массива являются целые случайные числа в пределах
от 1 до 45. Напечатать элементы массива в прямом и обратном
порядке.
PROGRAM PR6.2; {ОДНОМЕРНЫЙ МАССИВ}
USES CRT;
VAR N, I: INTEGER;
A: ARRAY [1..100] OF INTEGER;
BEGIN
CLRSCR;
WRITE ('РАЗМЕРНОСТЬ МАССИВА:'); READLN (N);
RANDOMIZE;
FOR I:=1 TO N DO
A[I]:= RANDOM(46);
WRITELN ('ЭЛЕМЕНТЫ МАССИВА В ПРЯМОМ ПОРЯДКЕ:');
FOR I:=1 TO N DO
WRITE (A[I], '':2);
WRITELN;
WRITELN ('ЭЛЕМЕНТЫ МАССИВА В ОБРАТНОМ
ПОРЯДКЕ:');
FOR I:= N DOWNTO 1 DO
WRITE (A[I], '':1);
READKEY
END.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
