
- •Контрольная работа 1. Матрицы.
- •Задача 1.1.
- •Задача 1.2.
- •Var I, j, id, jd : word;
- •Var I : word;
- •I, j, n : word;
- •Задача 1.3.
- •Var I, j : word;
- •Var I, j : word;
- •I, k : word;
- •Var b : Tb; Var k : word);
- •Var hi, hj : integer; nw, I : word;
- •I, k : word;
- •Задача 1.4.
- •Var I, j, jmax: word;
- •Var j : word;
- •Var I, j : word;
- •Задания.
- •Контрольная работа 2. Одиночные классы.
- •Задача 2.1.
- •Interface
- •Implementation
- •Var bufdat : cDate;
- •Задания.
Var b : Tb; Var k : word);
Var hi, hj : integer; nw, I : word;
Begin
if abs(ib-ia) > abs(jb-ja) then nw:=abs(ib-ia)
else nw:=abs(jb-ja);
hi:=0; if ib-ia > 0 then hi:=1;
if ib-ia < 0 then hi:=-1;
hj:=0; if jb-ja > 0 then hj:=1;
if jb-ja < 0 then hj:=-1;
for i:=0 to nw do
begin inc(k); b[k]:=a[ia+hi*i, ja+hj*i]; end;
End;
// Глобальные переменные и основная программа.
Var a : Ta; b : Tb;
I, k : word;
BEGIN
InA(n,n,a);
OutA(n,n,a);
k:=0;
AddWay(a, n, 1, 1, 1, n-1, b, k);
AddWay(a, n, 1, n, n, 1, b, k);
AddWay(a, n, n, 2, n, n, b, k);
for i:=1 to k do write(b[i]:3);
readln;
END.
Задача 1.4.
В прямоугольной матрице m*n (m, n < 7) с элементами типа INTEGER вместо строки, содержащей максимальное значение произведений соседних элементов, поместить строку, содержащую максимальный элемент всей матрицы. В основной программе вывести исходную матрицу, индексы строк и результирующую матрицу.
Алгоритм этой программы, по сути, сводится к определению индексов двух строк. Функция IndMaxMatr для нахождения индекса строки, содержащей максимальный элемент всей матрицы, достаточно тривиальна. Фактически она находит оба индекса максимального элемента, но возвращает только один.
Несколько сложнее устроена функция IndMaxStrP для нахождения индекса строки, содержащей максимальное значение произведения соседних элементов, так как вначале эти произведения надо вычислить. С этой целью в функции определена локальная функция MaxP определения максимального значения произведения соседних элементов в строке row матрицы a.
Смысл остальных действий понятен из комментариев.
Листинг 1.4. Заголовок программы, определение процедур InA и OutA опущены.
Const m=5; n=7;
Type Ta = array[1..m, 1..n] of integer;
// Здесь поместить тексты процедур InA и OutA.
// Функция определения индекса строки, содержащей
// максимальный элемент всей матрицы.
Function IndMaxMatr(m, n : word; a : Ta):word;
Var I, j, jmax: word;
Begin
result:=1; jmax:=1;
for i:=1 to m do
for j:=1 to n do
if a[i,j]>a[result, jmax] then
begin result:=i; jmax:=j; end;
End;
// Функция определения индекса строки, содержащей
// максимальное значение произведения соседних
// элементов. Внутри определена локальная функция.
Function IndMaxStrP(m, n : word; a : Ta):word;
Function MaxP(row : word) : integer;
Var j : word;
Begin
result:=a[row,1]*a[row,2];
for j:=1 to n-1 do
if a[row,j]*a[row,j+1]>result
then result:=a[row,j]*a[row,j+1];
End;
Var I, j : word;
Begin
result:=1;
for i:=1 to m do
if MaxP(i)>MaxP(result) then result:=i;
End;
// Глобальные переменные и основная программа.
Var a : Ta;
j, imatr, ipstr : word;
BEGIN
// Ввод и вывод исходной матрицы.
InA(m,n,a);
OutA(m,n,a);
// Определение и вывод индексов строк.
imatr:=IndMaxMatr(m, n, a);
writeln(' imatr=',imatr);
ipstr:=IndMaxStrP(m, n, a);
writeln(' istrp=',ipstr);
// Замена строки и вывод результата.
for j:=1 to n do a[ipstr,j]:=a[imatr,j];
OutA(m,n,a);
readln;
END.