Сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной их четырех сторон - 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.

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

  1. Объявлены переменные: n, i, j, l, k, pl, pp, pv, pn (для размера матрицы и просмотра непрозрачности соседей).
  2. Задается размер матрицы от 3 до 20 и считывается в переменную n.
  3. Выводится матрица A размером n x n, где a[i,j] - это непрозрачность элемента матрицы (0 - прозрачный, 1 - непрозрачный).
  4. Происходит проверка непрозрачности элементов матрицы A, исключая крайние элементы. Если элемент непрозрачный (a[i,j] = 1), то проверяется его непрозрачность со стороны соседних элементов.
  5. Если элемент непрозрачный и его непрозрачность со всех сторон равна 4 (т.е. элемент полностью закрыт непрозрачными соседями), то его непрозрачность меняется на 2.
  6. Происходит удаление непрозрачных элементов матрицы A, которые видны хотя бы с одной стороны (т.е. a[i,j] = 1).
  7. Происходит замена отмеченных непрозрачными элементов (a[i,j] = 2) на непрозрачные (a[i,j] = 1), но это не обязательно.
  8. Выводится матрица A после удаления частично прозрачных кубиков.
  9. Программа ожидает ввода пользователя для завершения работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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