// PascalABC.NET 3.1, сборка 1230 от 27.04.2016 procedure MatPrint(a:array[,] of integer); begin var maxcol:=Length(a,1)-1; for var i:=0 to Length(a,0)-1 do begin for var j:=0 to maxcol do Print(a[i,j]); Writeln end end;
begin var m:=ReadInteger('Кол-во строк:'); var n:=ReadInteger('Кол-во столбцов:'); var t:=MatrixRandom(m,n,10,99); // инициализация матрицы MatPrint(t); var a:=new real[n]; // массив для средних по столбцам for var j:=0 to n-1 do begin var s:=0; for var i:=0 to m-1 do s+=t[i,j]; a[j]:=s/m end; // cортированная последовательность индексов столбцов var ai:=a.Select((x,i)->Rec(x,i)).SortedDescending .Select(x->x.Item2).ToArray; // cоздаем промежуточный массив var u:array[,] of integer; SetLength(u,m,n); for var j:=0 to n-1 do for var i:=0 to m-1 do u[i,j]:=t[i,ai[j]]; t:=Copy(u); // вернем назад данные в исходный массив Writeln; MatPrint(t); end.
Данных в задаче мало, так как выплаты по кредиту зависят от вида платежа (дифференцированный или аннуитетный). С точки зрения написания программы, возможно, интереснее дифференцированный, когда выплата по основному долгу постоянная, а проценты уменьшаются (т.к. уменьшается оставшаяся сумма долга). Программа на паскале для такого случая (выплаты раз в год): var sum,s,c,p1,p2:real; y,i:integer; begin sum:=40000; y:=4; c:=25; p1:=sum*c/100; s:=0; writeln('Основной долг Проценты'); for i:=1 to y do begin p2:=sum*c/100; s:=s+p1+p2; sum:=sum-p1; writeln(p1:5:2,' ':8,p2:6:2); end; writeln('За 4 года выплачено ',s:5:2); end.
Результат: Основной долг Проценты 10000.00 10000.00 10000.00 7500.00 10000.00 5000.00 10000.00 2500.00 За 4 года выплачено 65000.00