Сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной их четырех сторон - Turbo Pascal
Формулировка задачи:
Поле размером m×n заполнено прозрачными и непрозрачными кубиками. Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной их четырех сторон (видимость анализируется до удаления какого-либо кубика).
помогите с этой задачей
Решение задачи: «Сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной их четырех сторон»
textual
Листинг программы
uses crt; const nmax=20; var a,b:array[1..nmax,1..nmax] of byte; n,i,j,l,k,pl,pp,pv,pn:byte; begin clrscr; repeat write('Размер матрицы A от 3 до ',nmax,' n='); readln(n); until n in [3..nmax]; writeln('Матрица A:'); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(2);{0-прозрачные, 1-непрозрачные} write(a[i,j]:3); end; writeln; end; writeln; for i:=2 to n-1 do{смотрим все, кроме крайних} for j:=2 to n-1 do if a[i,j]=1 then{если непрозрачный} begin pl:=0;{смотрим слева, есть ли непрозрачные} for l:=1 to j-1 do if a[i,l] in [1,2] then pl:=1; pp:=0;{справа} for l:=j+1 to n do if a[i,l] in [1,2] then pp:=1; pv:=0;{сверху} for l:=1 to i-1 do if a[l,j] in [1,2] then pv:=1; pn:=0;{снизу} for l:=i+1 to n do if a[l,j] in [1,2] then pn:=1; if pl+pp+pv+pn=4 then a[i,j]:=2;{если закрыт с 4х сторон, пишем 2, останется} end; for i:=1 to n do for j:=1 to n do if a[i,j]=1 then a[i,j]:=0;{удаляем видимые хоть с 1 стороны} for i:=1 to n do for j:=1 to n do if a[i,j]=2 then a[i,j]:=1;{отмеченные меняем на 1, это не обязательно} writeln('Удаление частично прозрачных кубиков:'); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:3); writeln; end; readln end.
Объяснение кода листинга программы
- Объявлены переменные: n, i, j, l, k, pl, pp, pv, pn (для размера матрицы и просмотра непрозрачности соседей).
- Задается размер матрицы от 3 до 20 и считывается в переменную n.
- Выводится матрица A размером n x n, где a[i,j] - это непрозрачность элемента матрицы (0 - прозрачный, 1 - непрозрачный).
- Происходит проверка непрозрачности элементов матрицы A, исключая крайние элементы. Если элемент непрозрачный (a[i,j] = 1), то проверяется его непрозрачность со стороны соседних элементов.
- Если элемент непрозрачный и его непрозрачность со всех сторон равна 4 (т.е. элемент полностью закрыт непрозрачными соседями), то его непрозрачность меняется на 2.
- Происходит удаление непрозрачных элементов матрицы A, которые видны хотя бы с одной стороны (т.е. a[i,j] = 1).
- Происходит замена отмеченных непрозрачными элементов (a[i,j] = 2) на непрозрачные (a[i,j] = 1), но это не обязательно.
- Выводится матрица A после удаления частично прозрачных кубиков.
- Программа ожидает ввода пользователя для завершения работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д