- •Массивы
- •Ввод массива из текстового файла или с клавиатуры
- •Вывод массива в текстовый файл или на экран монитора
- •Ввод массива с использованием типизированной константы-массива
- •Ввод массива с помощью генератора псевдослучайных чисел
- •Типовые задачи на массивы
- •Поиск максимального или минимального элемента в массиве
- •Нахождение суммы или произведения элементов массива или числа элементов, удовлетворяющих определенному условию
- •Упорядочение массива по возрастанию или убыванию его элементов
Ввод массива из текстового файла или с клавиатуры
Ввод значений элементов массива с помощью оператора READ осуществляется поэлементно. Нельзя ввести массив целиком. Например, для любого массива W недопустим оператор READ(W) или READLN(W).
Рассмотрим пример ввода массивов. Пусть в программе имеются описания
VAR X:array[1..5] OF INTEGER;
Y:array[1..3,1..2] OF REAL;
INP:TEXT; I,J:byte;
Вначале после BEGIN надо открыть входной текстовый файл, для чего используются операторы:
assign(INP,'H:\03-101\a7.in'); reset(INP);
Тогда ввод значений элементов одномерного и двухмерного массивов из входного файла H:\03-101\a7.in можно выполнить с помощью операторов ввода READ, READLN и цикла FOR:
FOR I:=1 TO 5 DO READ(inp,X[I]);
FOR I:=1 TO 3 DO
FOR J:=1 TO 2 DO READ(inp,Y[I,J]);
Для ввода двухмерного массива используется вложенный цикл, причем внешний цикл по номеру строки I матрицы, а внутренний - по номеру столбца J.
После последнего оператора READ надо закрыть входной файл, используя оператор
CLOSE(INP);
Входной файл в этом случае может иметь вид:
1 3 -300 7 2
-1.1 -2.5
3.3 -4.1
5.1 6.3
Между числами должен быть разделитель (пробел или ).
В случае массива символов символы должны вводиться без разделителей между ними. Кроме того, в программе надо добавлять каждый раз READLN для перехода на следующую строку ввода.
Рассмотрим пример ввода одномерного и двухмерного массивов символов из входного файла H:\03-101\a7.in.
VAR X1:array[1..5] OF char;
Y1:array[1..3,1..2] OF CHAR;
INP:TEXT; I,J:byte; BEGIN
assign(INP,'H:\03-101\a7.in'); reset(INP);
FOR I:=1 TO 5 DO READ(inp,X1[I]); READLN;
FOR I:=1 TO 3 DO begin
FOR J:=1 TO 2 DO READ(inp,Y1[I,J]);
READLN(INP) end;
close(inp); END.
Входной файл в этом случае может иметь вид: a35mn
qw
er
ty
ИЗ При вводе массива с клавиатуры не нужны три оператора открытия
и закрытия входного файла, INP с запятой в операторах READ и
описание INP.
Можно вводить и значения отдельных элементов, а не всего массива, например
READ(Y[1,1]);
Вывод массива в текстовый файл или на экран монитора
Вывод значений элементов массива с помощью операторов WRITE и WRITELN осуществляется поэлементно. Нельзя вывести массив целиком, за исключением одномерного массива символов. Например, для любого массива W (но не одномерного из символов) недопустим оператор WRITELN(W);
Рассмотрим пример вывода массивов X и Y, описание которых приведено в предыдущем параграфе, посвященном вводу массива. В раздел VAR необходимо добавить описание
OUT:TEXT;
Вначале после BEGIN надо открыть выходной текстовый файл, для чего используются операторы:
assign(OUT,'H:\03-101\a7.out'); rewrite(OUT);
При выводе значений элементов массива в виде чисел необходимо предусмотреть вывод пробела между ними.
Все значения элементов одномерного массива (вектора) можно выводить в одну строку через пробел между ними и без формата, если элементы - целые числа, или по двойному формату в случае дробных чисел. Например, вывод в файл массива X из целых чисел можно выполнить путем операторов:
WRITELN(OUT, ‘Вектор X’);
FOR I:=1 TO 5 DO WRITE(OUT,X[I],' '); WRITELN(OUT);
Тогда в выходном файле получим следующее:
Вектор X
1 3 –300 5 7
Значения элементов двумерного массива (матрицы) следует выводить в файл построчно и по формату (включающему позицию под пробел между двумя числами), что можно осуществить с помощью вложенного цикла FOR и операторов вывода:
WRITELN(OUT, ‘Матрица Y’);
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 2 DO WRITE(OUT,Y[I,J]:5:1);
WRITELN(OUT)
END;
После последнего оператора WRITELN надо закрыть выходной файл, используя оператор
CLOSE(OUT);
Тогда в выходном файле получим:
Матрица Y
-1.1 -2.5
3.3 -4.1
5.1 6.3
Для удобства печати последняя строчка каждого файла (входного, выходного и с программой) должна быть пустой, так как иначе первая строчка следующего печатаемого файла будет начинаться на последней строчке предыдущего файла, являясь ее продолжением.
Для получения последней пустой строки файла с программой и входного следует нажать ENTER в конце файла, а для выходного файла в программе последний оператор вывода должен быть WRITELN, а не WRITE.
В случае массива символов символы должны выводиться без пробелов между ними. Одномерный массив символов выводится целиком.
Вывод в выходной файл одномерного X1 и двухмерного Y1 массивов символов, описание которых приведено в предыдущем параграфе, можно выполнить следующим образом.
writeln(out,X1);
FOR I:=1 TO 3 DO
begin
FOR J:=1 TO 2 DO write(out,Y1[I,J]); writeln(out)
end;
Выходной файл в этом случае будет иметь вид:
a35mn
qw
er
ty
При выводе массива на экран монитора не нужны три оператора открытия и закрытия выходного файла, OUT с запятой в операторах WRITE и WRITELN и описание OUT.
Можно выводить и значения отдельных элементов, а не всего массива, например
WRITELN(Y[3,1]);