Площадь комнаты - Pascal

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

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

Требуется вычислить площадь комнаты в квадратном лабиринте. Входные данные В первой строке вводится число N – размер лабиринта (3 <= N <=10). В следующих N строках задан лабиринт (‘.’ – пустая клетка, ‘*’ – стенка). И наконец, последняя строка содержит два числа – номер строки и столбца клетки, находящейся в комнате, площадь которой необходимо вычислить. Гарантируется, что эта клетка пустая и что лабиринт окружен стенками со всех сторон. Выходные данные Требуется вывести единственное число – количество пустых клеток в данной комнате. Примеры входные данные 5 ***** **..* *.*.* *..** ***** 2 4 выходные данные 3

Решение задачи: «Площадь комнаты»

textual
Листинг программы
program Labirint;
uses
crt;
 
 type
   arr =  array[1..10,1..10] of char;
 
procedure vyvodarr (a: arr; n: integer);  // Процедура для вывода матрицы на экран.
var
  i,j: integer;
begin
for i:=1 to n do
    begin
    for j:=1 to n do
      begin
      Write(a[i,j]:3);
      end;
    Writeln;
    end;
Writeln;
end;
 
var
  //a1: arr = (('*','*','*','*','*'),('*','*','.','.','*'),('*','.','*','.','*'),('*','.','.','*','*'),('*','*','*','*','*'));
  a1: arr;  // Переменная для хранения исходного лабиринта.
  b1: arr;  // Переменная для хранения промежуточных переменных при прохождении лабиринта.
  k: integer; // Переменная для хранения значения количества посещенных ячеек.
  i,j,ip,jp: integer; // Промежуточные переменные для организации циклов.
  ibeg,jbeg: integer; // Переменные для хранения адреса начальной, заведомо пустой ячейки.
  t: integer;  //  Промежуточная переменная для хранения числа окружающих стен.
  Stop: boolean;  // Промежуточная переменная для остановки работы алгоритма.
  n1: integer;   // Переменная для хранения размера лабиринта.
begin
Writeln('Введите размер лабиринта:');
Readln(n1);
Writeln('Введите структуру лабиринта( "*" - стена, "." - комната):');
for i:=1 to n1 do
    for j:=1 to n1 do
      Readln(a1[i,j]);
 
Readln(n1);
vyvodarr(a1,n1);
for i:=1 to n1 do
    for j:=1 to n1 do
      b1[i,j]:=' ';
 
Writeln('Введите координаты точки вхождения:');
Writeln('Номер строки:');
Readln(ibeg);
Writeln('Номер столбца:');
Readln(jbeg);
 
i:=ibeg;
j:=jbeg;
t:= 0;
k:= 0;
 
 
repeat
 
  if a1[i,j+1]='*' then
     begin
       inc(t);
       b1[i,j+1]:= 'W';    // Стена('W'- wall)
     end
  else
    if not (b1[i,j+1] in ['D','V','W']) then
     b1[i,j+1]:= 'R';      // Дорога ('R' - road)
 
  if a1[i,j-1]='*' then
     begin
       inc(t);
       b1[i,j-1]:= 'W';
     end
  else
  if not (b1[i,j-1] in ['D','V','W']) then
     b1[i,j-1]:= 'R';
 
  if a1[i+1,j]='*' then
     begin
       inc(t);
       b1[i+1,j]:= 'W';
     end
  else
  if not (b1[i+1,j] in ['D','V','W']) then
     b1[i+1,j]:= 'R';
 
  if a1[i-1,j]='*' then
     begin
       inc(t);
       b1[i-1,j]:= 'W';
     end
  else
  if not (b1[i-1,j] in ['D','V','W']) then
     b1[i-1,j]:= 'R';
 
  if t = 3 then
       begin
         b1[i,j]:= 'D';   // Были в этой ячейке, но здесь тупик 'D' - dead end.
         inc(k);
       end;
  t:= 0;
  if (a1[i,j] = '.') and (b1[i,j] <> 'V') and (b1[i,j] <> 'D') then
     begin
     b1[i,j]:= 'V';  // Были в этой ячейке (v - "visit").
     inc(k);
     end;
  stop:= true;
for ip:=1 to n1 do
  for jp:=1 to n1 do
    if b1[ip,jp] = 'R' then
       begin
       i:=ip;
       j:=jp;
       stop:=false;
       end;
 
ClrScr;
writeln('"W"- wall, "R" - road, "V" - visit, "D" - dead end.');
vyvodarr(b1,n1);
Delay(1000);
 
until stop;
 
writeln('Количество свободных ячеек: ',k);
Readln;
end.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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