- •Массивы
- •Ввод массива из текстового файла или с клавиатуры
- •Вывод массива в текстовый файл или на экран монитора
- •Ввод массива с использованием типизированной константы-массива
- •Ввод массива с помощью генератора псевдослучайных чисел
- •Типовые задачи на массивы
- •Поиск максимального или минимального элемента в массиве
- •Нахождение суммы или произведения элементов массива или числа элементов, удовлетворяющих определенному условию
- •Упорядочение массива по возрастанию или убыванию его элементов
Ввод массива с использованием типизированной константы-массива
Вторым способом ввода начальных значений элементов массивов является использование типизированных констант - массивов.
Их описание имеет вид:
TYPE <имя типа массива>=ARRAY[<тип индекса в случае одномерного массива, иначе типы индексов через запятую>]OF <тип элементов массива>;
CONST <имя типизированной константы-массива>:<имя типа массива>= (<множество констант>);
где множество констант в случае одномерного массива - значения элементов массива через запятую,
в случае двухмерного массива - (<значения элементов первой строки двухмерного массива через запятую>),(<значения элементов второй строки через запятую>),...,(<значения элементов последней строки массива через запятую>)
В случае многомерных констант-массивов множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятой. В результате образуются вложенные структуры множеств, причем глубина вложения должна соответствовать размерности массива.
Пример об явления типизированных констант-массивов:
TYPE VEC=ARRAY[1..5]OF REAL;
MTR=ARRAY[1..3,1..2]OF SHORTINT;
CUBE=ARRAY[1..2,1..2,1..3]OF BYTE;
CONST V:VEC=(1.2,3.4,5.5,-7.3e-5,9);
M:MTR=((-1,2),(3,4),(5,-6));
C:CUBE=(((1,2,3),(4,5,6)),((7,8,9),(10,11,12)));
Типизированные константы могут быть описаны без использования раздела TYPE следующим образом:
CONST <имя типизированной константы-массива>:ARRAY[<тип индекса в случае одномерного массива, иначе типы индексов через запятую>]OF <тип элементов массива>=(<множество констант>);
Например
CONST V:ARRAY[1..5]OF REAL=(1.2,3.4,5.5,-7.3e-5,9);
Типизированные константы фактически представляют собой переменные с заданными в их описании начальными значениями и могут использоваться наравне с обычными переменными, в том числе менять свои значения, находясь в левой части оператора присваивания. Например, после указанных описаний в разделе операторов программы может быть
V[1]:=10.5;
Ввод массива с помощью генератора псевдослучайных чисел
В качестве элементов массивов могут быть псевдослучайные числа, равномерно распределенные на заданном отрезке. Тогда вместо использования входного файла и операторов READ и READLN или типизированной константы-массива применяется стандартная функция RANDOM.
Функция RANDOM без параметра формирует случайное число X вещественного типа в пределах [0.0,1.0), т.е. 0.0 X < 1.0, а RANDOM(N) при условии, что N - целое типа WORD или BYTE, формирует целое число X типа WORD или BYTE в пределах [0,N), т.е. 0 X N-1.
Перед первым обращением в программе к функции RANDOM для инициализации программы-генератора псевдослучайных чисел (присвоения его переменной начального значения в зависимости от показания компьютерных часов) следует вызвать стандартную процедуру RANDOMIZE;
Пример программы с вводом одномерного массива с помощью генератора псевдослучайных чисел.
VAR SL:ARRAY[1..5] OF REAL; I:BYTE;
BEGIN
RANDOMIZE;
FOR I:=1 TO 5 DO
BEGIN
SL[I]:=RANDOM;
WRITE(SL[I]:5:2)
END;
WRITELN
END.
В результате выполнения данной программы на экране монитора появится строка с пятью вещественными числами в пределах [0.0,1.0), например
0.61 0.99 0.44 0.75 0.18
При каждом новом запуске программы на выполнение будут получаться новые значения вещественных чисел в пределах [0.0,1.0), так как значения зависят от текущего времени на компьютерных часах.
Для получения псевдослучайного дробного числа, равномерно распределенного в диапазоне [a;b) надо вместо RANDOM использовать A+(B-A)*RANDOM.
(B-A) заменяют на вычисленное значение без круглых скобок. Например, чтобы получить вещественное псевдослучайное число в пределах [-1.0,4.0) надо вместо RANDOM использовать -1+5*RANDOM.
Для получения псевдослучайного целого числа, равномерно распределенного в диапазоне [a;b] надо вместо RANDOM использовать A+RANDOM(B-A+1).
B-A+1 заменяют на вычисленное значение, круглые скобки после RANDOM необходимы, так как в случае целых чисел используется RANDOM с параметром. Например, для получения целого псевдослучайного числа в пределах [-1,4] надо использовать -1+RANDOM(6).
Пример программы с вводом элементов двухмерного массива в виде
псевдослучайных целых чисел от -15 до 15 и выводом массива в файл.
VAR I,J: byte; OUT:TEXT;L:ARRAY[1..3,1..2] OF SHORTINT;
BEGIN
ASSIGN(OUT,'H:\03-101\a7.OUT'); REWRITE(OUT);
RANDOMIZE;
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 2 DO
BEGIN
L[I,J]:=-15+RANDOM(31);
WRITE(out, L[I,J]:4)
END;
WRITELN(out)
END;
CLOSE(OUT)
END.
В результате выполнения программы в выходном файле получим три строки с двумя псевдослучайными целыми числами от -15 до 15 в каждой строке, например
6 -9
14 3
-2 12