Задача
Дана матрица (двумерный массив). Поменять местами две любые ее строки.
Решение
Пусть строки, которые требуется поменять местами задаются пользователем при выполнении программы. Обменять строки — это значит, каждый элемент одной строки надо поставить на то же место другой строки.
При обращении к элементу матрицы первым индексом указывается строка, вторым — столбец. Поскольку строки задаются, проход осуществляется по столбцам. Для каждого столбца элемент одной строки присваивается буферной переменной, после чего на его место записывается элемент того же столбца другой строки. На место второго элемента записывается первый, взятый из буферной переменной.
В числовой матрице поменять местами два столбца, т. е. все элементы одного столбца поставить на соответствующие им позиции другого, а его элементы второго переместить в первый.
Столбец матрицы определяется вторым индексом. Поэтому в цикле следует перебирать строки матрицы, т.е. переменная-счетчик будет использоваться в качестве первого индекса двумерного массива.
В каждой строке менять местами элементы с номерами указанных столбцов. От итерации к итерации они не меняются. Обмен можно производить через третью переменную.
Пусть номера столбцов, которые следует поменять местами, задаются путем ввода значений в момент выполнения программы.
Если в языке программирования индексация массивов начинается с нуля, а столбцы указываются, исходя из их фактического положения в матрице (начиная с 1), то следует из переменных, в которых записаны номера столбцов, вычесть единицу перед их использованием в цикле.
from random import random
M = 10
N = 5
a = [ ]
for i in range ( N ) :
b = [ ]
for j in range ( M ) :
b. append ( round ( random ( ) * 2 ) )
a. append ( b )
print ( b )
c1 = int ( input ( "Один столбец: " ) ) — 1
c2 = int ( input ( "Другой столбец: " ) ) — 1
for i in range ( N ) :
a [ i ] [ c1 ] , a [ i ] [ c2 ] = a [ i ] [ c2 ] , a [ i ] [ c1 ]
print ( a [ i ] )
алг поменять столбцы местами
нач
цел M = 6 , N = 4
цел таб a [ 1 : N , 1 : M ]
цел i , j , c1 , c2 , b
нц для i от 1 до N
нц для j от 1 до M
a [ i , j ] := int ( rand ( 0 , 10 ) )
вывод a [ i , j ] : 3
кц
вывод нс
кц
ввод c1
ввод c2
нц для i от 1 до N
b := a [ i , c1 ]
a [ i , c1 ] := a [ i , c2 ]
a [ i , c2 ] := b
кц
нц для i от 1 до N
нц для j от 1 до M
вывод a [ i , j ] : 3
кц
вывод нс
кц
кон
M = 8
N = 3
dim a(N,M)
for i = 0 to N-1
for j=0 to M-1
a[i,j] = int(rand*10)
print a[i,j] + " " ;
next j
print
next i
input c1
input c2
for i=0 to N-1
buff = a[i,c1-1]
a[i,c1-1] = a[i,c2-1]
a[i,c2-1] = buff
next i
for i = 0 to N-1
for j=0 to M-1
print a[i,j] + " " ;
next j
print
next i
есть матрица q на p, где p=4, q=6
1)ввести матрицу в диалоговом режиме по строкам
2)вывести матрицу на экран
3)определить сумму элементов каждого столбца
4)определить столбец с максимальной суммой
5)реализовать возможность вывода на экран любой строки как одномерного массива и ее удаления (замена ее элементов нулями)
программа вроде несложная, но вводя массив сумм элементов столбцов я искал максимальную сумму элементов, а потом она просто перезаписывалась в ноль.
В общем, рассчитываю на вас.
вот мой код, но он как я и говорил, удаляет сумму столбца с максимальным значением, из-за чего его номер теряется
const
q=6; p=4;
var
a: array[1..q,1..p] of integer;// наш главный массив
s: array[1..q] of integer;// массив для сумм столбцов (побочный)
i, j,k, z, max: integer;
begin
writeln(‘Введите массив:’);// инициализация массива вручную
for i:=1 to q do// счетчик строк
begin
for j:=1 to p do// счетчик столбцов
begin
read(a[i,j]);// вводим элемент массива
write(a[i,j]:4);// выводим введенный элемент массива
end;
writeln;
end;
writeln;
writeln(‘Суммы элементов столбцов:’);
for j:=1 to p do// счетчик по столбцу
begin
s[j]:=0;// сумма столбцов
for i:=1 to q do
begin
s[j]:=s[j]+a[i,j];// сумма строк в стоблце заносится в побочный массив
end;
writeln(‘Сумма ‘,j,’-ого столбца: ‘,s[j]:1);
end;
for j:=1 to p do
begin
if s[j] > s[j+1] then
begin
max:=s[j];
s[j]:=s[j+1];
s[j+1]:=max;
end;
end;
//тут после этого коммента цикл не работает, т. к в предыдущем цикле удаляется нужный нам j
writeln(‘Максимальная сумма элементов столбцa: ‘,max);
for k:=1 to p do
begin
if s[k]=max then
begin
for j:=1 to p do
begin
for i:=1 to q do
begin
a[i,j]:=a[i,k];
write(a[i,j]:4);
end;
writeln;
end;
end;
end;
writeln(‘Введите номер строки, все элементы которой нужно заменить на нули: ‘);
readln(z);
for i:=1 to q do
begin
for j:=1 to p do// счетчик сто