ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
Перевод проги из Pascal в C++! |

28.05.2007, 13:28
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
Перевод проги из 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.
Нужно просто перевести этот код в C++ (плачу 100 рублей), а если переведёте и объясните что зачем, коментами, то 200 рублей. Деньги буду через терминал кидать, так что либо на мобилу, либо на WebMoney.
|
|
|

28.05.2007, 13:30
|
|
Постоянный
Регистрация: 05.07.2006
Сообщений: 458
Провел на форуме: 2943499
Репутация:
807
|
|
в линуксе вроде есть проги который переводят из одного языка в другой, правдо криво)
|
|
|

29.05.2007, 11:48
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
в линуксе вроде есть проги который переводят из одного языка в другой, правдо криво)
Я знаю, даже знаю эту прогу P2c называеться, но она настолько криво переводит, что я не могу разобраться, а как известно ошибки всегда труднее исправлять чем писать с нуля.
А вообще это задание по курсовому, и времени особо нет!! Ну помогите!
|
|
|

29.05.2007, 11:55
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Если кто-то взялся, отпишите. Чтоб впустую не делать
|
|
|

29.05.2007, 13:46
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Вообще то, что ты дал не работает. Если только так:
Код:
program p1;
type
arr=array[1..40000] of byte;
var
n,m,i,j,count:integer;
c:array[0..201,0..201] of char;
first,last:word;
ii,jj:^arr;
input,output: text;
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;
begin
new(ii);
new(jj);
assign(input,'c:\beds.in');
assign(output,'c:\beds.out');
reset(input);
rewrite(output);
readln(input,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(input,c[i,j]);
readln(input);
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;
write(output,count);
close(input);
close(output);
end.
|
|
|

29.05.2007, 13:46
|
|
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме: 1106266
Репутация:
366
|
|
лол, у меня такой же курсач был, из одной книги берут)
|
|
|

29.05.2007, 14:31
|
|
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме: 1777536
Репутация:
932
|
|
Юзай P2c , выкладывай код. Ошибки исправим.
|
|
|

29.05.2007, 18:44
|
|
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме: 62785
Репутация:
34
|
|
Вообще то, что ты дал не работает. Если только так:
Когда я компилил, всё работало: в файл выводилось число 3...
лол, у меня такой же курсач был, из одной книги берут)
Юзай P2c , выкладывай код. Ошибки исправим.
Лады!!!
|
|
|

29.05.2007, 23:12
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Вот практически рабочий вариант:
Код:
#include <fstream.h>
char c[202][202];
typedef arr, byte[40000];
unsigned short first,last;
int n,m,i,j,coun;
arr *ii, *jj;
void put(int i, int j)
{
if (c[i][j] == '#')
{
last++;
ii[last] = i;
jj[last] = j;
c[i][j] = '.';
}
}
void get(int *i, int *j)
{
*i = ii[first];
*j = jj[first];
first++;
}
void paint(int i, int j)
{
first = 1;
last = 0;
put(i,j);
while (first<=last)
{
get(&i,&j);
put(i+1,j);
put(i-1,j);
put(i,j+1);
put(i,j-1);
}
}
void main()
{
ii = new arr;
jj = new arr;
ifstream input("beds.in");
ofstream output("beds.out");
input >> n;
input >> m;
for (i = 0; i <= n+1; i++)
for (j = 0; j <= m+1; j++)
c[i][j] = '.';
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
input >> c[i][j];
}
coun = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (c[i][j] == '#')
{
paint(i,j);
coun++;
}
/* delete[] ii;
delete[] jj; */
output << coun;
}
Где-то с указателями бага (ошибка при освобождении), но ответ вроде правильный...
|
|
|

30.05.2007, 02:03
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
Код:
# -*- coding: cp1251 -*-
from UserString import MutableString
lines = [
"1100111110",
"0011100010",
"0010000111",
"0010110010",
"0010000010",
"0011111110"
]
lines.insert(0, MutableString("0"*len(lines[0])))
lines.append(MutableString("0"*len(lines[0])))
for i in range(len(lines)):
lines[i] = MutableString("0" + lines[i] + "0")
def convert1To2():
done = False
while not done:
done = True
for i in range(len(lines)):
for j in range(len(lines[i])):
if lines[i][j] == '1' and \
(lines[i+1][j] == '2' or \
lines[i-1][j] == '2' or \
lines[i][j+1] == '2' or \
lines[i][j-1] == '2'):
lines[i][j] = '2'
done = False
amount = 0
for i in range(len(lines)):
for j in range(len(lines[i])):
if lines[i][j] == '1':
lines[i][j] = '2'
amount += 1
convert1To2()
print "Итого: ", amount
На питоне
Последний раз редактировалось nerezus; 30.05.2007 в 02:06..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|