Двумерный массив 22. дана матрица размером n*m. выполнить сглаживание в строках матрицы, которое заключается в замене каждого элемента значением среднего арифметического трех стоящих рядом значений.
Const N = 3; M = 4; Var A:array[1..N,1..M] of real; i,j:integer; Sr,B,C:real; Begin Randomize; WriteLn('Исходная матрица:'); For i:= 1 to N do Begin For j:= 1 to M do Begin A[i,j]:=random()*13; Write(A[i,j]:6:3,' ') End; WriteLn; End; WriteLn; WriteLn('Сглаженная матрица:'); For i:= 1 to N do Begin B:=A[i,1]; C:=A[i,2]; A[i,1]:=(B+C)/2; For j:= 2 to M-1 do Begin Sr:=(B+C+A[i,j+1])/3; B:=A[i,j]; A[i,j]:=Sr; End; A[i,M]:=(B+A[i,M])/2 End; For i:= 1 to N do Begin For j:= 1 to M do Write(A[i,j]:6:3,' '); WriteLn; End End.
// PascalABC.NET 3.1, сборка 1204 от 24.03.2016 begin var f:array[0..5] of integer; f[0]:=1; f[1]:=1; for var i:=2 to 5 do f[i]:=f[i-1]*f[i-2]+2; Writeln(f[5]) end.
Результат выполнения программы 87
3. Программное решение с использованием рекурсии
// PascalABC.NET 3.1, сборка 1204 от 24.03.2016 function f(n:integer):integer; begin if n<2 then Result:=1 else Result:=f(n-1)*f(n-2)+2 end;
N = 3;
M = 4;
Var
A:array[1..N,1..M] of real;
i,j:integer;
Sr,B,C:real;
Begin
Randomize;
WriteLn('Исходная матрица:');
For i:= 1 to N do
Begin
For j:= 1 to M do
Begin
A[i,j]:=random()*13;
Write(A[i,j]:6:3,' ')
End;
WriteLn;
End;
WriteLn;
WriteLn('Сглаженная матрица:');
For i:= 1 to N do
Begin
B:=A[i,1];
C:=A[i,2];
A[i,1]:=(B+C)/2;
For j:= 2 to M-1 do
Begin
Sr:=(B+C+A[i,j+1])/3;
B:=A[i,j];
A[i,j]:=Sr;
End;
A[i,M]:=(B+A[i,M])/2
End;
For i:= 1 to N do
Begin
For j:= 1 to M do
Write(A[i,j]:6:3,' ');
WriteLn;
End
End.