Помогите с переводом из Pascal в C++!

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DesignerMix, 27 May 2007.

  1. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    Задача:

    Прямоугольный садовый участок шириной N и длиной M метров разбит на квадраты со стороной 1 метр. На этом участке вскопаны грядки. Грядкой называется совокупность квадратов, удовлетворяющая таким условиям:
    • из любого квадрата этой грядки можно попасть в любой другой квадрат этой же грядки, последовательно переходя по грядке из квадрата в квадрат через их общую сторону;
    • никакие две грядки не пересекаются и не касаются друг друга ни по вертикальной, ни по горизонтальной сторонам квадратов (касание грядок углами квадратов допускается).
    Подсчитайте количество грядок на садовом участке.
    Ограничения: 1 <= N, M <= 200, время 1 с.
    Ввод из файла beds.in. В первой строке находятся числа N и M через пробел, далее идут N строк по M символов. Символ # обозначает территорию грядки, точка соответствует незанятой территории. Других символов в исходном файле нет.
    Вывод в файл beds.out. Вывести одно число - количество грядок на садовом участке.
    Примеры
    Ввод 1
    5 10
    ##......#.
    .#..#...#.
    .###....#.
    ..##....#.
    ........#.
    Вывод 1
    3

    Код проги на Pascal:

    Code:
    {
    Written by Fyodor Menshikov 26.01.2004
    14:46-14:55
    }
    {$R+,Q+}
    var
       c:array[0..201,0..201]of char;
    type
       arr=array[1..40000]of byte;
    var
       first,last:word;
       ii,jj:^arr;
    
       procedure put(i,j:integer);
       begin
          if c[i,j]='#' then begin
             inc(last);
             ii^[last]:=i;
             jj^[last]:=j;
             c[i,j]:='.';
          end;
       end;
    
       procedure get(var i,j:integer);
       begin
          i:=ii^[first];
          j:=jj^[first];
          inc(first);
       end;
    
       procedure paint(i,j:integer);
       begin
          first:=1;
          last:=0;
          put(i,j);
          while first<=last do begin
             get(i,j);
             put(i+1,j);
             put(i-1,j);
             put(i,j+1);
             put(i,j-1);
          end;
       end;
    
    var
       n,m,i,j,count:integer;
    begin
       new(ii);
       new(jj);
       assign(input,'beds.in');
       reset(input);
       assign(output,'beds.out');
       rewrite(output);
       readln(n,m);
       for i:=0 to n+1 do
          for j:=0 to m+1 do
             c[i,j]:='.';
       for i:=1 to n do begin
          for j:=1 to m do
             read(c[i,j]);
          readln;
       end;
       count:=0;
       for i:=1 to n do
          for j:=1 to m do
             if c[i,j]='#' then begin
                paint(i,j);
                inc(count);
             end;
       writeln(count);
    end.
    Если можно, то опишите что делает прога, а то я pascal не знаю, а если пойму что там делать, то можно и блок схему нарисовать и прогу перевести. Ну а если не в лом, то от непосредственной помощи с переводом не откажусь ;).
     
  2. DesignerMix

    DesignerMix Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    35
    Likes Received:
    11
    Reputations:
    5
    К стати, я ещё где-то слышал про прогу P2C, якобы она переводит из Pascal'а в C++. Может кто подскажет где её версию под винду достать можно?