Детали. Дз. Наверное это матрица. Хотя я не знаю - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Детали. На клеточной поле размером NxM расположены две жесткие детали. Деталь 1 нарывает в каждой строке несколько (не ноль) первых клеток, деталь два - несколько (не ноль) последних; каждая клетка либо полностью накрыта одной деталью, либо нет. Деталь 2 начинает двигаться влево, не поворачивая, пока она не упрется в деталь 2, хотя бы одной клеткой. Написать программу, которая определяет, на сколько клеток будет сдвинута деталь 2 Ввод. В первой строке содержатся чила N и M - соотвествующии количеству строк и столбцов таблицы. далее следуют N строк, задающих расположение деталей. В каждой строке находится ровно M чисел, раздленных пробелом: 1, 2 или 0 Выход В первой строке выходного файла содержится число- колво клеток, на которое будет сдвинута деталь 2. Если сдвиг был, то в последующих N строках расположение деталей после сдвига. Ввод 45 11022 10002 10002 10022 Вывод 1 11220 10020 10020 10220

Решение задачи: «Детали. Дз. Наверное это матрица. Хотя я не знаю»

textual
Листинг программы
const nmax=100;mmax=100;
type mas=array[1..nmax,1..mmax]of byte;
var a:mas;
    n,m,i,j,k,min,s:integer;
    f,fo:text;
begin
 assign(f,'in.txt');reset(f);
 assign(fo,'out.txt');rewrite(fo);
 readln(f,n,m);
 min:=m-2;
 for i:=1 to n do
  begin
   s:=0;
   for j:=1 to m do
    begin
     read(f,a[i,j]);
     if a[i,j]=0 then inc(s)
    end;
   readln(f);
   if s<min then min:=s;
  end;
 if min>0
  then
   begin
    writeln(fo,min);
    for i:=1 to n do
     begin
      j:=1;
      while a[i,j]=1 do inc(j);
      for k:=j to m-min+1 do a[i,k]:=a[i,k+min];
      for k:=m downto m-min+1 do a[i,k]:=0
     end;
    for i:=1 to n do
     begin
      for j:=1 to m do write(fo,a[i,j],' ');
       writeln
     end;
   end
  else write(fo,0);
  close(f);close(fo)
end.

Объяснение кода листинга программы

  1. В начале кода объявляются константы nmax и mmax, которые ограничивают размер массива и количество строк ввода-вывода.
  2. Затем объявляется тип данных mas, который представляет собой массив целых чисел размером до nmax на mmax.
  3. Далее объявляются переменные a, n, m, i, j, k, min и s. Переменная a является массивом, а остальные переменные используются для хранения различных значений и индексов.
  4. Затем происходит чтение файла in.txt.
  5. После этого происходит запись в файл out.txt.
  6. В цикле for i от 1 до n считывается каждая строка из файла in.txt.
  7. Внутри цикла for j от 1 до m считывается каждый столбец из строки.
  8. Если значение a[i,j] равно 0, то увеличивается значение переменной s.
  9. После окончания чтения файла in.txt происходит проверка значения переменной s.
  10. Если значение s меньше min, то обновляется значение min.
  11. Если min больше 0, то происходит запись в файл out.txt значения min.
  12. Затем происходит цикл for i от 1 до n.
  13. Внутри цикла for j от 1 до m происходит поиск первого ненулевого значения в столбце.
  14. После этого происходит замена всех значений в столбце на значения из следующего столбца.
  15. После завершения цикла for j происходит замена всех значений в столбце на нули.
  16. Цикл for i завершается.
  17. Закрываются файлы in и out.
  18. Конец программы.

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы