- •Массивы
- •Ввод массива из текстового файла или с клавиатуры
- •Вывод массива в текстовый файл или на экран монитора
- •Ввод массива с использованием типизированной константы-массива
- •Ввод массива с помощью генератора псевдослучайных чисел
- •Типовые задачи на массивы
- •Поиск максимального или минимального элемента в массиве
- •Нахождение суммы или произведения элементов массива или числа элементов, удовлетворяющих определенному условию
- •Упорядочение массива по возрастанию или убыванию его элементов
Нахождение суммы или произведения элементов массива или числа элементов, удовлетворяющих определенному условию
Для нахождения суммы S элементов массива необходимо до начала цикла принять ее равной нулю
S:=0;
а потом внутри цикла выполнять
S:=S+<элемент массива>;
Пример задачи этого типа: найти и вывести в файл сумму положительных элементов двухмерного массива B размерности 2x3, введенного в программе с помощью типизированных констант. Программа A8 решения данной задачи имеет вид.
PROGRAM A8;
TYPE VEC=ARRAY[1..2,1..3]OF SHORTINT;
CONST B:VEC=((0,-2,3),(-4,5,7));
VAR OUT:TEXT; I,J,S:byte;
BEGIN
ASSIGN(OUT,'H:\03-103\a8.OUT'); REWRITE(OUT);
WRITELN(OUT,'МАТРИЦА B'); S:=0;
FOR I:=1 TO 2 DO
BEGIN
FOR J:=1 TO 3 DO
BEGIN
IF B[I,J]>0 THEN S:=S+B[I,J];
WRITE(OUT,B[I,J]:3)
END;
WRITELN(OUT)
END;
WRITELN(OUT,'СУММА ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ = ',S); CLOSE(OUT)
END.
Содержимое выходного файла H:\03-103\a8.out будет иметь вид:
МАТРИЦА B
0 -2 3
-4 5 7
СУММА ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ = 15
Для определения произведения P элементов массива надо до начала цикла принять его равным единице
P:=1;
а затем внутри цикла выполнять
P:=P*<элемент массива>;
Для нахождения числа K элементов массива, удовлетворяющих определенному условию, необходимо до начала цикла принять это число равным нулю
K:=0;
а потом внутри цикла выполнять
IF <условие> THEN K:=K+1;
Упорядочение массива по возрастанию или убыванию его элементов
Существует несколько алгоритмов решения задачи упорядочения (сортировки) массива по возрастанию или убыванию значений его элементов.
Наиболее оптимальным является алгоритм прямого выбора с проверкой необходимости перестановки элементов. Это итерационный алгоритм (с повторением аналогичных действий в цикле) с числом итераций, равным числу элементов массива минус единица. Упорядочение массива по возрастанию значений его элементов основано на нахождении минимального элемента, а по убыванию - максимального.
Сущность алгоритма прямого выбора для упорядочения одномерного массива по возрастанию состоит в следующем. На любой итерации J находим минимальный элемент MIN с его индексом INDMIN среди элементов, начиная с J-го до последнего, и меняем местами его с J-ым элементом. Перестановку не выполняем, если минимальным является J-ый элемент.
Программа A9 на упорядочение по возрастанию одномерного массива X, введенного с помощью типизированной константы-массива, и вывод результатов в файл имеет вид.
PROGRAM A9;
CONST X:ARRAY[1..5] OF SHORTINT=(5,1,-3,0,2);
VAR MIN:SHORTINT; INDMIN,J,I:byte; OUT:TEXT;
BEGIN
ASSIGN(out,'H:\03-104\a9.out'); REWRITE(out); WRITE(out,'Первоначальный массив:',' ':7);
FOR I:=1 TO 5 DO WRITE(out,X[I],' '); WRITELN(out);
FOR J:=1 TO 4 DO
BEGIN
{Нахождение на итерации J минимального элемента MIN среди элементов массива X,
начиная с J-го элемента, и индекса INDMIN минимального элемента}
MIN:=X[J]; INDMIN:=J;
FOR I:=J+1 TO 5 DO
IF X[I]<MIN THEN
BEGIN
MIN:=X[I]; INDMIN:=I
END;
{Перестановка на итерации J минимального элемента с J-ым,если они не совпадают}
IF INDMIN<>J THEN
BEGIN
X[INDMIN]:=X[J]; X[J]:=MIN
END;
WRITE(out,'j = ',J,’ ‘)
IF J=4 THEN WRITE(out,'упорядоченный массив: ')
ELSE WRITE(out,'массив:',' ':15);
FOR I:=1 TO 5 DO WRITE(out,X[I],' '); WRITELN(out)
END;
CLOSE(out)
END.
Содержимое выходного файла H:\03-104\a9.out будет иметь вид:
Первоначальный массив: 5 1 -3 0 2
j = 1, массив: -3 1 5 0 2
j = 2, массив: -3 0 5 1 2
j = 3, массив: -3 0 1 5 2
j = 4, упорядоченный массив: -3 0 1 2 5
Для решения задачи упорядочения массива по убыванию его элементов, основанного на нахождении максимального элемента, в программе A9 необходимо сделать следующие изменения: везде в 5 местах MIN поменять на MAX, INDMIN на INDMAX, один раз в операторе IF X[I]<MIN поменять знак < на >.
Содержимое выходного файла будет иметь вид:
Первоначальный массив: 5 1 -3 0 2
j = 1, массив: 5 1 -3 0 2
j = 2, массив: 5 2 -3 0 1
j = 3, массив: 5 2 1 0 -3
j = 4, упорядоченный массив: 5 2 1 0 -3