Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Помогите с переводом из Pascal в C++! (https://forum.antichat.xyz/showthread.php?t=40988)

DesignerMix 27.05.2007 16:50

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

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

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

Код:

{
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 не знаю, а если пойму что там делать, то можно и блок схему нарисовать и прогу перевести. Ну а если не в лом, то от непосредственной помощи с переводом не откажусь ;).

DesignerMix 27.05.2007 16:54

К стати, я ещё где-то слышал про прогу P2C, якобы она переводит из Pascal'а в C++. Может кто подскажет где её версию под винду достать можно?


Время: 17:54