PDA

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


DesignerMix
27.05.2007, 16:50
Задача:

Прямоугольный садовый участок шириной 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++. Может кто подскажет где её версию под винду достать можно?