ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Перевод проги из Pascal в C++!
  #1  
Старый 28.05.2007, 13:28
DesignerMix
Познающий
Регистрация: 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.
 
Ответить с цитированием

  #2  
Старый 28.05.2007, 13:30
freddi
Постоянный
Регистрация: 05.07.2006
Сообщений: 458
Провел на форуме:
2943499

Репутация: 807
По умолчанию

в линуксе вроде есть проги который переводят из одного языка в другой, правдо криво)
 
Ответить с цитированием

  #3  
Старый 29.05.2007, 11:48
DesignerMix
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме:
62785

Репутация: 34
По умолчанию

Цитата:
в линуксе вроде есть проги который переводят из одного языка в другой, правдо криво)
Я знаю, даже знаю эту прогу P2c называеться, но она настолько криво переводит, что я не могу разобраться, а как известно ошибки всегда труднее исправлять чем писать с нуля.

А вообще это задание по курсовому, и времени особо нет!! Ну помогите!
 
Ответить с цитированием

  #4  
Старый 29.05.2007, 11:55
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Если кто-то взялся, отпишите. Чтоб впустую не делать
 
Ответить с цитированием

  #5  
Старый 29.05.2007, 13:46
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Вообще то, что ты дал не работает. Если только так:
Код:
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.
 
Ответить с цитированием

  #6  
Старый 29.05.2007, 13:46
VampiRUS
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме:
1106266

Репутация: 366
Отправить сообщение для VampiRUS с помощью Yahoo
По умолчанию

лол, у меня такой же курсач был, из одной книги берут)
 
Ответить с цитированием

  #7  
Старый 29.05.2007, 14:31
Ky3bMu4
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме:
1777536

Репутация: 932


Отправить сообщение для Ky3bMu4 с помощью ICQ
По умолчанию

Юзай P2c , выкладывай код. Ошибки исправим.
 
Ответить с цитированием

  #8  
Старый 29.05.2007, 18:44
DesignerMix
Познающий
Регистрация: 10.01.2007
Сообщений: 35
Провел на форуме:
62785

Репутация: 34
По умолчанию

Цитата:
Вообще то, что ты дал не работает. Если только так:
Когда я компилил, всё работало: в файл выводилось число 3...

Цитата:
лол, у меня такой же курсач был, из одной книги берут)


Цитата:
Юзай P2c , выкладывай код. Ошибки исправим.
Лады!!!
 
Ответить с цитированием

  #9  
Старый 29.05.2007, 23:12
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Вот практически рабочий вариант:
Код:
#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;
}
Где-то с указателями бага (ошибка при освобождении), но ответ вроде правильный...
 
Ответить с цитированием

  #10  
Старый 30.05.2007, 02:03
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Код:
# -*- 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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проги, которые прячут нас [ Vortex ] Анонимность 43 15.02.2009 13:57
Типа Проги ЛОмать будем Morph Болталка 14 21.05.2008 16:38
Крекерская сага: Супер Защита или как защищают проги... KindEcstasy Авторские статьи 4 13.10.2006 17:23
Ломаем Проги Morph Болталка 7 02.09.2004 06:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ