Обработка двумерных массивов (матриц)
Вычисление суммы и количества элементов массива
Пример 17. Найти количество отрицательных элементов матрицы А(m,n), удовлетворяющих условию aij>-4.5 (m=3, n=4).
Программа Схема алгоритма
Program Prim17;
var
a : array[1..10,1..10] of real;
i,j,m,n,k : integer;
begin
writeln('Введите m, n');
readln(m,n);
writeln('Введите матрицу');
for i:=1 to m do
for j:=1 to n do
read(a[i,j]);
k:=0;
for i:=1 to m do
for j:=1 to n do
if (a[i,j]<0) and (a[i,j]>-4.5) then k:=k+1;
writeln('k=', k)
end.
Исходные данные: Результат:
m = 3; n = 4 k=3
Матрица A
2 4 -5 6
-1 3 -2 7
9 -3 5 8
Пример 18. Найти сумму элементов главной и побочной диагоналeй матрицы С(m,m), (m=4).
Указание.
Нужно учитывать, что элементы главной диагонали матрицы C имеют вид cii;побочной – сi,(n+1)-i , следовательно, для обработки элементов главной и побочной диагоналей матрицы нужно использовать один цикл с параметром i.
Программа Схема алгоритма
Program Prim18;
var
c:array[1..10,1..10] of real;
i,j,m : integer;
s1, s2 : real;
begin
writeln('Введите m');
readln(m);
writeln('Введите матрицу');
for i:=1 to m do
for j:=1 to m do
read(c[i,j]);
s1:=0; s2:=0;
for i:=1 to m do
begin
s1:=s1+c[i,i];
s2:=s2+c[i,(n+1-i)];
end;
writeln('s1=', s1:6:2, 's2=', s2:6:2);
end.
Исходные данные: Результат:
m = 4 S1= 30.00
Матрица C S2= 35.00
8 6 11 7
5 4 9 8
25 3 -2 1
16 7 4 20
2.3.2.2. Поиск элементов массива по заданному критерию
Пример 19. Найти наибольший элемент по каждому столбцу матрицы В(m,n). (Пусть m<=10, n<=10)
Программа Схема алгоритма
Program Prim19;
var
b : array[1..10,1..10] of real;
i,j,m,n : integer;
max : real;
begin
writeln('Введите m, n');
readln(m,n);
writeln('Введите матрицу');
for i:=1 to m do
for j:=1 to n do
read(b[i,j]);
for j:=1 to n do
begin
max:=b[1,j];
for i:=2 to m do
if b[i,j]>max then max:=b[i,j];
writeln('j=', j:2,' max=', max:6:2);
end;
end.
Исходные данные: Результат:
m = 4; n = 4 j= 1 max= 12.00
Матрица B: j= 2 max= 6.00
2 -1 7 5 j= 3 max= 7.00
3 6 4 -9 j= 4 max= 6.00
8 5 -10 2
12 4 3 6
Работа с текстовыми файлами
Текстовыми файлами [Л1, стр. 70-74] называются файлы, состоящие из строк символов ASCII. Строки отделяются друг от друга символами “конец строки”, т.е. при вводе данных в файл с клавиатуры нужно нажимать клавишу “ENTER” для ввода каждой компоненты данных. В программе текстовый файл может быть описан в разделе переменных, например, так:
var f: text;
где f – указатель файла (файловая переменная), играющая роль “окна”, через которое можно прочитать или записать компоненты данных, размещаемых в файле.
Чтобы связать имя файловой переменной и соответствующее ему имя файла на магнитном диске нужно записать в программе оператор:
assign(f, ‘ff.dat’);
где f- имя файловой переменной в Pascal-программе, а ff.dat - соответствующее ему имя файла на магнитном диске.
В отличие от массива, количество компонент в файле не фиксировано, место компоненты не определяется индексами.
При каждом обращении к файлу (для чтения или записи) имеющийся указатель записи автоматически перемещается от начала файла к его концу (или в обратном порядке).
Перед работой с файлом нужно открыть файл, используя один из приведенных ниже операторов:
reset(f); – открыть файл для чтения
rewrite(f); - открыть файл для записи
где f - имя файловой переменной в Pascal-программе.
Для чтения (ввода данных) из файла и записи (вывода данных) в файл используются следующие процедуры:
readln(f); – прочитать данные из файла с именем f;
writeln(f); – записать данные в файл с именем f.
После окончания работы с файлом f нужно закрыть файл, используя процедуру
close(f);
Пример 21. Вычислить таблицу значений функции:
yi=xi2 , если xi ≤ a
yi=xi+1, если xi > a ( i=1, 2, …, n) (n≤10)
Пусть исходные данные (выбранные произвольно) размещаются в файле с именем fread.dat и пусть они принимают следующие значения:
n =5; a =2.5; x={0.5, 1.2, 2.5, 3.2, 3.5},
где n – количество элементов массива, x – массив, состоящий из n элементов, т.е. x={x1,x2,…,xn}.
Результаты вычислений поместим в файл с именем fwrite.dat
Программа
program prim21; {заголовок программы}
var f1, f2 : text; {описание файловых переменных f1 и f2}
x, y : array[1..10] of real; {описание массивов}
i, n : integer; {описание переменных}
a : real;
begin
assign(f1,'fread.dat'); {связать f1 с именем файла на диске}
reset(f1); {открыть файл f1 для ввода данных}
read(f1,n); {ввод из файла f1 значения n}
read(f1,a); {ввод из файла f1 значения a}
for i:=1 to n do
read(f1,x[i]); {ввод из файла f1 массива x}
close(f1); {закрыть файл f1}
assign(f2,'fwrite.dat'); {связать f2 с именем файла на диске}
rewrite(f2); {открыть файл f2 для записи результатов}
for i:=1 to n do
if x[i]<=a then y[i]:=x[i]*x[i] else y[i]:=x[i]+1;
writeln(f2,'Таблица y(x)');
writeln(f2,' x y ');
for i:=1 to n do
writeln(f2,x[i]:6:3,' ',y[i]:6:3); {вывод результатов в файл f2}
close(f2); {закрыть файл f2}
end.