Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сортировка столбцов матрицы А, все элементы которых присутствуют в массиве В

Автор: dan105 16.10.2017 4:19

"Для решения задачи необходимо использовать алгоритмы с досрочным выходом из цикла. Даны целочисленная матрица A [1: n, 1:m] и целочисленный массив B [1: k]. Упорядочить по убыванию те столбцы матрицы A, все элементы которых присутствуют в массиве B."

Как сделать сортировку еще более-менее понимаю, но вот проверить на присутствие в массиве никак не получается. Как только не пробовал, в итоге только код совсем загадил. Подскажите,как лучше сию задачу решить

program sorting;
const nmax=10;
mmax=20;
kmax=25;
Type matr=array[1..nmax,1..mmax] of integer;
mass=array[1..nmax] of integer;
var a: matr; b:mass;
i, j, k, n, m, r,u,o:integer;
flag:boolean;
begin

repeat
writeln('Введите n от 1 до ',nmax,' и m от 1 до ', mmax);
read(n,m);
until(n>0) and(m>0) and (n<=nmax) and(m<=mmax);
writeln('Введите матрицу размера ',n,' на ', m );
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);

repeat
writeln('Введите k от 1 до ',kmax);
read(k);
until (k>0) and (k<=kmax);
writeln('Введите массив длиной ',k);
for i:=1 to k do
read(b[i]);

writeln('Матрица А');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:8);
writeln;
end;
writeln('Массив В');
for i:=1 to k do

write(b[i]:8);
writeln;

for j:=1 to m do
for i:=1 to n do begin
r:=1;

while (r<=k) do begin


if (a[i, j] = b[r]) then
repeat
flag:=true;
for o:=1 to n-1 do begin
if a[o, j] > a[o+1, j] then
u:=a[o, j];
a[o ,j]:=a[o+1, j];
a[o+1, j]:=u;
flag:=false;
end;
r:=r+1;
until flag

end;
end;
writeln('Сортированный массив');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:8);
writeln;
end;
end.

Автор: Гость 18.10.2017 18:30

Перебираешь элементы j-го столбца матрицы и сравниваешь их элементами с вектора В[].
При первом же совпадении выходишь из цикла командой continue.

Автор: подсказка 18.10.2017 18:39

Сортировку столбцов матрицы лучше оформить отдельной процедурой.
Как я уже сказал выше, при совпадении передаёшь выполнение в процедуру сортировки столбца матрицы, а потом уже переходишь к следующему столбцу матрицы командой continue(или break?).