- •Массивы
- •Ввод массива из текстового файла или с клавиатуры
- •Вывод массива в текстовый файл или на экран монитора
- •Ввод массива с использованием типизированной константы-массива
- •Ввод массива с помощью генератора псевдослучайных чисел
- •Типовые задачи на массивы
- •Поиск максимального или минимального элемента в массиве
- •Нахождение суммы или произведения элементов массива или числа элементов, удовлетворяющих определенному условию
- •Упорядочение массива по возрастанию или убыванию его элементов
Типовые задачи на массивы
Имеются следующие типовые задачи на массивы:
1) поиск максимального или минимального элемента в массиве;
2) нахождение суммы или произведения элементов массива;
3) упорядочение массива по возрастанию или убыванию его элементов;
4) поиск в массиве заданного элемента;
Поиск максимального или минимального элемента в массиве
Сущность алгоритма поиска максимального элемента в одномерном массиве и его индекса состоит в следующем. Вначале за максимальный принимается первый элемент, а за индекс – 1 или индекс первого элемента. Затем второй элемент сравнивается с максимальным, и, если он больше, то он и принимается за максимальный, и запоминается его индекс. Далее продолжается аналогичное сравнение оставшихся элементов с максимальным вплоть до последнего элемента массива.
Программа A7 решения задачи поиска максимального элемента MAX в одномерном массиве A и его индекса K с вводом массива из входного файла и выводом результатов в выходной файл имеет вид.
PROGRAM A7;
VAR I,K:byte; INP,OUT:TEXT;A:ARRAY[1..9]OF SHORTINT;
MAX:SHORTINT;{Тип максимального элемента MAX массива должен совпадать
с типом его элементов}
BEGIN
ASSIGN(INP,'H:\03-102\a7.IN'); RESET(INP);
FOR I:=1 TO 9 DO READ(INP,A[I]); CLOSE(INP);
MAX:=A[1]; K:=1;
FOR I:=2 TO 9 DO
IF A[I]>MAX THEN
BEGIN
MAX:=A[I]; K:=I
END;
ASSIGN(OUT,'H:\03-102\a7.OUT'); REWRITE(OUT);
WRITELN(OUT,'Вектор A':17);
FOR I:=1 TO 9 DO WRITE(OUT,A[I],' '); WRITELN(OUT);
WRITELN(OUT,'МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ A[',K,'] = ',MAX); CLOSE(OUT)
END.
До запуска на выполнение данной программы надо создать входной файл a7.IN в директории 03-102 диска H с девятью целыми числами типа SHORTINT с пробелом между ними, например
5 45 17 3 -58 1 -26 55 22
В результате выполнения программы в директории 03-102 диска H появится выходной файл a7.out со следующим содержимым.
Вектор A
5 45 17 3 -58 1 -26 55 22
МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ A[8] = 55
Для решения той же задачи, но с вводом массива не из входного файла, а с помощью типизированной константы-массива в программе A7 необходимо сделать следующие изменения:
1) из раздела VAR убрать INP с запятой и описание
A:ARRAY[1..9]OF SHORTINT;
2) добавить раздел описания
CONST A:ARRAY[1..9]OF SHORTINT=(5,45,17,3,-58,1,-26,55,22);
3) убрать четыре первых исполняемых оператора ASSIGN, RESET, FOR и CLOSE.
В этом случае входной файл будет отсутствовать, а выходной файл будет тот же.
Для решения той же задачи, но с вводом массива с помощью генератора псевдослучайных целых чисел, равномерно распределенных от -5 до 10 в программе A7 необходимо сделать следующие изменения:
1) из раздела VAR убрать INP с запятой
2) заменить первые четыре исполняемые операторы ASSIGN, RESET, FOR и
CLOSE на следующие:
RANDOMIZE;
FOR I:=1 TO 9 DO A[I]:=-5+RANDOM(16);
Тогда входного файла не будет, а выходной файл может иметь вид
Вектор A
-4 -5 10 5 -1 6 4 -1 3
МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ A[3] = 10
Получаемые псевдослучайные числа при каждом новом запуске на выполнение программы меняются, так как они зависят от текущего времени на компьютерных часах.
Для поиска минимального элемента в одномерном массиве необходимо в программе A7 сделать следующие изменения: везде в 5 местах MAX поменять на MIN, заменить слово максимальный на минимальный и в операторе IF поменять знак > на <.
Содержимое выходного файла в этом случае будет иметь вид.
Вектор A
5 45 17 3 -58 1 -26 55 22
МИНИМАЛЬНЫЙ ЭЛЕМЕНТ A[5] = -58
Алгоритм поиска максимального элемента в многомерном массиве и его индексов аналогичен рассмотренному выше алгоритму для одномерного массива.
Сущность алгоритма поиска максимального элемента MAX в двухмерном массиве B и его индексов K и N состоит в следующем. Вначале за максимальный принимается первый элемент с индексами 1 и 1 (или с индексами первого элемента), а за каждый из двух индексов - 1 (или индексы первого элемента). Затем последовательно каждый оставшийся элемент массива вплоть до последнего сравнивается с максимальным, и, если он больше, то он и принимается за максимальный, и запоминаются все его индексы.
Программа A7a решения задачи поиска максимального элемента MAX в двухмерном массиве B размерности 2x3 и его индексов K и N с вводом массива из входного файла и выводом результатов в выходной файл имеет вид.
PROGRAM A7a;
VAR I,K,J,N:byte; INP,OUT:TEXT;
B:ARRAY[1..2,1..3] OF SHORTINT; MAX:SHORTINT;
BEGIN
ASSIGN(INP,'H:\03-102\a7a.IN'); RESET(INP);
FOR I:=1 TO 2 DO
FOR J:=1 TO 3 DO READ(INP,B[I,J]);
CLOSE(INP);
MAX:=B[1,1]; K:=1; N:=1;
FOR I:=1 TO 2 DO
FOR J:=1 TO 3 DO
IF B[I,J]>MAX THEN
BEGIN
MAX:=B[I,J]; K:=I; N:=J
END;
ASSIGN(OUT,'H:\03-102\a7a.OUT'); REWRITE(OUT); WRITELN(OUT,' МАТРИЦА B');
FOR I:=1 TO 2 DO
BEGIN
FOR J:=1 TO 3 DO WRITE(OUT,B[I,J]:4); WRITELN(OUT)
END;
WRITELN(OUT,'МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ B[',K,',',N,'] = ',MAX); CLOSE(OUT)
END.
Содержимое входного файла H:\03-102\a7a.in может иметь вид:
5 45 17
3 -58 1
Тогда содержимое выходного файла H:\03-102\a7a.out будет иметь вид:
МАТРИЦА B
5 45 17
3 -58 1
МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ B[1,2] = 45