Даны матрицы А[1:15,1:5] и В[1:5,1:5]. Из четных сумм элементов строк матрицы А сформировать вектор С. Из сумм элементов столбцов матрицы В сформировать вектор D. Если разность максимальных элементов векторов С и D больше 10 , то в матрице А заменить элементы главной диагонали на эту разность, иначе в матрице В заменить 3-ю строку строкой матрицы А, где находится максимальный элемент матрицы А. В п/п (подпрограмме) формирования вектора С использовать п/п нахождения суммы элементов вектора. — Pascal(Паскаль)

uses crt;
const n=5;
type
mass=array[1..n] of integer;{вектор}
matr=array[1..n] of mass;{матрица}
 
procedure Vvod(var mt:matr);{создание матриц}
var i,j:byte;
begin
for i:=1 to n do
for j:=1 to n do
mt[i,j]:=random(20);
end;
 
procedure VyvodMatr(var mt:matr);{вывод матриц на экран}
var i,j:byte;
begin
for i:=1 to n do
 begin
  for j:=1 to n do
  write(mt[i,j]:4);
  writeln;
 end;
end;
 
function Summ(ms:mass):integer;{функция суммы вектора, строки матрицы}
var i:byte;
    s:integer;
begin
s:=0;
for i:=1 to n do
s:=s+ms[i];
Summ:=s;
end;
 
procedure FormC(mt:matr;var ms:mass;var z:byte);{формирование вектора С}
var i:byte;
begin
z:=0;
for i:=1 to n do
if Summ(mt[i])mod 2=0 then{если сумма в строке четная}
 begin
   z:=z+1;{считаем строку}
   ms[z]:=Summ(mt[i]);{записываем сумму в вектор}
 end;
end;
 
procedure FormD(mt:matr;var ms:mass);{формирование вектора D}
var i,j:byte;
    s:integer;
begin
for j:=1 to n do
 begin
  s:=0;
  for i:=1 to n do{считаем сумму в столбце}
  s:=s+mt[i,j];
  ms[j]:=s;{записываем в вектор}
 end;
end;
 
function MaxVek(ms:mass;x:byte):integer; {максимальный элемент вектора}
var i:byte;
    mx:integer;
begin
mx:=ms[1];
for i:=1 to x do
if ms[i]>mx then mx:=ms[i];
MaxVek:=mx;
end;
 
procedure MaxMatr(mt:matr; var imx:byte);{определение строки с макимальным элементом}
var i,j:byte;
    mx:integer;
begin
mx:=mt[1,1];imx:=1;
for i:=1 to n do
for j:=1 to n do
if mt[i,j]> mx then
 begin
  mx:=mt[i,j];
  imx:=i;{номер строки}
  end;
end;
 
 
procedure VyvodVekt(var ms:mass;x:byte);{вывод вектора на экран}
var i:byte;
begin
for i:=1 to x do
write(ms[i]:4);
write('Максимум=':12,MaxVek(ms,x));{после элементов вектора выводим макс.}
writeln;
writeln;
end;
 
var a,b:matr;
    c,d:mass;
    nc,i,imx:byte;
begin
clrscr;
randomize;
Vvod(a);
writeln('Исходная матрица А:');
VyvodMatr(a);
FormC(a,c,nc);
writeln('Четные суммы в строках - вектор С:');
VyvodVekt(c,nc);
Vvod(b);
writeln('Исходная матрица B:');
VyvodMatr(b);
FormD(b,d);
writeln('Суммы в столбцах - вектор D:');
VyvodVekt(d,n);
readln;
if abs(MaxVek(c,nc)-MaxVek(d,n))>10 then{если разность макс. больше 10}
 begin
  for i:=1 to n do a[i,i]:=abs(MaxVek(c,nc)-MaxVek(d,n));{на главную диагональ А пишем это значение}
  writeln('Измененная матрица А:');
  VyvodMatr(a);
 end
else {иначе}
  begin
   MaxMatr(a,imx);
   for i:=1 to n do b[3,i]:=a[imx,i];{третью строку в В меняем на строку с макс в А}
   writeln('Измененная матрица B:');
   VyvodMatr(b);
  end;
readln
end.

Leave a Comment

− 3 = 6