Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмы и алгоритмические языки. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
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.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]