Детали. Дз. Наверное это матрица. Хотя я не знаю - 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.
Объяснение кода листинга программы
- В начале кода объявляются константы nmax и mmax, которые ограничивают размер массива и количество строк ввода-вывода.
- Затем объявляется тип данных mas, который представляет собой массив целых чисел размером до nmax на mmax.
- Далее объявляются переменные a, n, m, i, j, k, min и s. Переменная a является массивом, а остальные переменные используются для хранения различных значений и индексов.
- Затем происходит чтение файла in.txt.
- После этого происходит запись в файл out.txt.
- В цикле for i от 1 до n считывается каждая строка из файла in.txt.
- Внутри цикла for j от 1 до m считывается каждый столбец из строки.
- Если значение a[i,j] равно 0, то увеличивается значение переменной s.
- После окончания чтения файла in.txt происходит проверка значения переменной s.
- Если значение s меньше min, то обновляется значение min.
- Если min больше 0, то происходит запись в файл out.txt значения min.
- Затем происходит цикл for i от 1 до n.
- Внутри цикла for j от 1 до m происходит поиск первого ненулевого значения в столбце.
- После этого происходит замена всех значений в столбце на значения из следующего столбца.
- После завершения цикла for j происходит замена всех значений в столбце на нули.
- Цикл for i завершается.
- Закрываются файлы in и out.
- Конец программы.