Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка столбцов матрицы А, все элементы которых присутствуют в массиве В
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dan105
"Для решения задачи необходимо использовать алгоритмы с досрочным выходом из цикла. Даны целочисленная матрица 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.
Гость
Перебираешь элементы j-го столбца матрицы и сравниваешь их элементами с вектора В[].
При первом же совпадении выходишь из цикла командой continue.
подсказка
Сортировку столбцов матрицы лучше оформить отдельной процедурой.
Как я уже сказал выше, при совпадении передаёшь выполнение в процедуру сортировки столбца матрицы, а потом уже переходишь к следующему столбцу матрицы командой continue(или break?).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.