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

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

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

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

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

textual
Листинг программы
  1. program Labirint;
  2. uses
  3. crt;
  4.  
  5.  type
  6.    arr =  array[1..10,1..10] of char;
  7.  
  8. procedure vyvodarr (a: arr; n: integer);  // Процедура для вывода матрицы на экран.
  9. var
  10.   i,j: integer;
  11. begin
  12. for i:=1 to n do
  13.     begin
  14.     for j:=1 to n do
  15.       begin
  16.       Write(a[i,j]:3);
  17.       end;
  18.     Writeln;
  19.     end;
  20. Writeln;
  21. end;
  22.  
  23. var
  24.   //a1: arr = (('*','*','*','*','*'),('*','*','.','.','*'),('*','.','*','.','*'),('*','.','.','*','*'),('*','*','*','*','*'));
  25.   a1: arr;  // Переменная для хранения исходного лабиринта.
  26.   b1: arr;  // Переменная для хранения промежуточных переменных при прохождении лабиринта.
  27.   k: integer; // Переменная для хранения значения количества посещенных ячеек.
  28.   i,j,ip,jp: integer; // Промежуточные переменные для организации циклов.
  29.   ibeg,jbeg: integer; // Переменные для хранения адреса начальной, заведомо пустой ячейки.
  30.   t: integer;  //  Промежуточная переменная для хранения числа окружающих стен.
  31.   Stop: boolean;  // Промежуточная переменная для остановки работы алгоритма.
  32.   n1: integer;   // Переменная для хранения размера лабиринта.
  33. begin
  34. Writeln('Введите размер лабиринта:');
  35. Readln(n1);
  36. Writeln('Введите структуру лабиринта( "*" - стена, "." - комната):');
  37. for i:=1 to n1 do
  38.     for j:=1 to n1 do
  39.       Readln(a1[i,j]);
  40.  
  41. Readln(n1);
  42. vyvodarr(a1,n1);
  43. for i:=1 to n1 do
  44.     for j:=1 to n1 do
  45.       b1[i,j]:=' ';
  46.  
  47. Writeln('Введите координаты точки вхождения:');
  48. Writeln('Номер строки:');
  49. Readln(ibeg);
  50. Writeln('Номер столбца:');
  51. Readln(jbeg);
  52.  
  53. i:=ibeg;
  54. j:=jbeg;
  55. t:= 0;
  56. k:= 0;
  57.  
  58.  
  59. repeat
  60.  
  61.   if a1[i,j+1]='*' then
  62.      begin
  63.        inc(t);
  64.        b1[i,j+1]:= 'W';    // Стена('W'- wall)
  65.      end
  66.   else
  67.     if not (b1[i,j+1] in ['D','V','W']) then
  68.      b1[i,j+1]:= 'R';      // Дорога ('R' - road)
  69.  
  70.   if a1[i,j-1]='*' then
  71.      begin
  72.        inc(t);
  73.        b1[i,j-1]:= 'W';
  74.      end
  75.   else
  76.   if not (b1[i,j-1] in ['D','V','W']) then
  77.      b1[i,j-1]:= 'R';
  78.  
  79.   if a1[i+1,j]='*' then
  80.      begin
  81.        inc(t);
  82.        b1[i+1,j]:= 'W';
  83.      end
  84.   else
  85.   if not (b1[i+1,j] in ['D','V','W']) then
  86.      b1[i+1,j]:= 'R';
  87.  
  88.   if a1[i-1,j]='*' then
  89.      begin
  90.        inc(t);
  91.        b1[i-1,j]:= 'W';
  92.      end
  93.   else
  94.   if not (b1[i-1,j] in ['D','V','W']) then
  95.      b1[i-1,j]:= 'R';
  96.  
  97.   if t = 3 then
  98.        begin
  99.          b1[i,j]:= 'D';   // Были в этой ячейке, но здесь тупик 'D' - dead end.
  100.          inc(k);
  101.        end;
  102.   t:= 0;
  103.   if (a1[i,j] = '.') and (b1[i,j] <> 'V') and (b1[i,j] <> 'D') then
  104.      begin
  105.      b1[i,j]:= 'V';  // Были в этой ячейке (v - "visit").
  106.      inc(k);
  107.      end;
  108.   stop:= true;
  109. for ip:=1 to n1 do
  110.   for jp:=1 to n1 do
  111.     if b1[ip,jp] = 'R' then
  112.        begin
  113.        i:=ip;
  114.        j:=jp;
  115.        stop:=false;
  116.        end;
  117.  
  118. ClrScr;
  119. writeln('"W"- wall, "R" - road, "V" - visit, "D" - dead end.');
  120. vyvodarr(b1,n1);
  121. Delay(1000);
  122.  
  123. until stop;
  124.  
  125. writeln('Количество свободных ячеек: ',k);
  126. Readln;
  127. end.

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


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

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

7   голосов , оценка 4.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы