Консультация № 200474
23.03.2021, 00:07
0.00 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Преобразование прямоугольной матрицы
Выполнить над прямоугольной матрицей В размером m х n последовательность действий, указанную в задании.
а) Заменить заданным вектором столбцы матрицы В, содержащие хотя бы один нулевой элемент;
б) в полученной матрице вычислить суммы элементов строк, номера которых задаются целочисленным вектором.
Программирование желательно сделать на паскале

Обсуждение

давно
Профессор
401888
1232
23.03.2021, 07:09
общий
это ответ
Здравствуйте, boss.maxim2002777!
Можно решить так.
Код:
var b:array[1..10,1..20]of integer;//матрица
v:array[1..10]of integer;//вектор для замены
mn:set of byte;//вектор(множество) номеров строк для подсчета суммы
//с множеством удобнее работать
m,n,i,j,k,s:integer;
begin
randomize;
repeat
write('Введите количество строк матрицы от 2 до 10 m=');
readln(m);
until m in [2..10];
repeat
write('Введите количество столбцов матрицы от 2 до 20 n=');
readln(n);
until n in [2..20];
writeln('Исходная матрица');
for i:=1 to m do
begin
for j:=1 to n do
begin
b[i,j]:=random(10);
write(b[i,j]:3);
end;
writeln;
end;
writeln('Вектор для замены столбцов');
for i:=1 to m do
begin
v[i]:=10+random(90);
write(v[i]:3);
end;
writeln;
writeln('Замена стобцов в которых есть нулевой элемент');
k:=0;
for j:=1 to n do
begin
i:=1;
while(i<=m)and(b[i,j]<>0)do inc(i);
if i<=m then
begin
k:=1;
for i:=1 to m do
b[i,j]:=v[i];
end;
end;
if k=0 then writeln('Столбцов с нолями нет')
else
for i:=1 to m do
begin
for j:=1 to n do
write(b[i,j]:3);
writeln;
end;
writeln('Вектор номеров строк для подсчета суммы');
mn:=[];
for i:=1 to m do
begin
if random(2)=1 then
begin
include(mn,i);
write(i:3);
end;
end;
writeln;
s:=0;
for i:=1 to m do
if i in mn then
for j:=1 to n do
s:=s+b[i,j];
write('Сумма в строках номера которых есть в векторе=',s)
end.
Форма ответа