Удалить все столбцы, в которых есть отрицательный элемент - Pascal
Формулировка задачи:
Дан двумерный массив размером n*m, заполненный случайным образом.
3. Удалить все столбцы, в которых есть отрицательный элемент.
Решение задачи: «Удалить все столбцы, в которых есть отрицательный элемент»
textual
Листинг программы
const nmax=10;
var a:array[1..nmax,1..nmax] of integer;
m,n,i,j,k:integer;
begin
randomize;
repeat
writeln('Введите размеры матрицы от 1 до ',nmax);
readln(m,n);
until(m in [1..nmax])and(n in [1..nmax]);
writeln('Исходная матрица');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=-10+random(50);
write(a[i,j]:4);
end;
writeln;
end;
j:=1;
while j<=n do //проверякм все столбцы
begin
k:=0;
i:=1;
while (i<=m)and(k=0) do//ищем в них отрицательный
if a[i,j]<0 then k:=1 //если есть,дальше не ищем
else inc(i);
if k=1 then //нашли
begin
if j=n then dec(n)//если он последний, обрезаем
else
begin
for k:=j to n-1 do//сдвигаем столбцы срава на данный столбец
for i:=1 to m do
a[i,k]:=a[i,k+1];
dec(n); //меньшаем количество столбцов
end;
end
else inc(j);//если нет отрицательнх, на 1 вперед
end;
writeln('n=',n);
writeln('Удаление столбцов с отрицатльными');
if n=0 then write('Все столбцы удалены')
else
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end.
Объяснение кода листинга программы
- Константа
nmaxсо значением10, обозначающая максимальный размер массива. - Переменные
a,m,n,i,j,kс типомinteger, где:a- многомерный массив размераnmaxxnmaxдля хранения элементов матрицы;m- количество строк матрицы;n- количество столбцов матрицы;i- переменная цикла для итерации по строкам;j- переменная цикла для итерации по столбцам;k- вспомогательная переменная.
- Генерация размеров матрицы - запрашиваются размеры матрицы
mиnот 1 доnmax. - Генерация исходной матрицы - заполняется массив
aслучайными числами в диапазоне от -10 до 40 и выводится на экран. - Цикл по столбцам - проверятся все столбцы матрицы на наличие отрицательных элементов.
- Удаление столбцов с отрицательными элементами:
- Если в столбце найден отрицательный элемент, то этот столбец удаляется.
- Если столбец, в котором найден отрицательный элемент, является последним, то он обрезается.
- В противном случае все столбцы справа от данного столбца сдвигаются на одну позицию влево.
- Вывод результирующей матрицы - выводится матрица после удаления столбцов с отрицательными элементами или сообщение, что все столбцы удалены, в случае если матрицы не осталось. Этот код генерирует матрицу и затем удаляет столбцы, в которых есть отрицательный элемент.