Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2008, 20:57   #1
alphadog900
Новичок
Джуниор
 
Регистрация: 21.10.2008
Сообщений: 2
По умолчанию Перевести С++ в Паскаль

Если кто может переведите задачку с С++ на Паскаль. Или хотяб главный цикл. Буду очень признателен

Вот условие задачи http://acmp.ru/index.asp?main=task&id_task=299 .
Вот задача на С++ :
#
#include <iostream>
#
#include <string>
#
#include <sstream>
#
using namespace std;
#

#
const int MAXN = 1000;
#
const int BASE = 10000;
#
const int NBASE = 4;
#
class BigInt
#
{
#
public:
#
int a[MAXN], n;
#

#
BigInt()
#
{
#
memset(a, 0, sizeof a); n = 1;
#
}
#
BigInt(int b)
#
{
#
memset(a, 0, sizeof a);
#
a[0] = b % BASE;
#
a[1] = b / BASE;
#
n = 1 + (a[1] > 0);
#
}
#

#
string toString()
#
{
#
string s = "";
#
char fmt[] = "%00d"; fmt[2] += NBASE;
#
char t[10]; sprintf(t, "%d", a[n - 1]); s += t;
#
for(int i = n - 2; i >= 0; --i)
#
{
#
sprintf(t, fmt, a[i]); s += t;
#
}
#
return s;
#
}
#

#
BigInt operator=( BigInt b )
#
{
#
memcpy(a, b.a, sizeof a);
#
n = b.n;
#
return *this;
#
}
#

#
BigInt operator + (BigInt b)
#
{
#
BigInt res; res.n = max(b.n, n);
#
for(int i = 0; i < res.n; ++i)
#
{
#
res.a[i] += b.a[i] + a[i];
#
if(res.a[i] >= BASE)
#
res.a[i] -= BASE, res.a[i + 1]++;
#
}
#

#
res.n += res.a[res.n] > 0;
#
return res;
#
}
#

#
BigInt operator * (BigInt b)
#
{
#
BigInt res;
#
for(int i = 0; i < n; ++i)
#
for(int j = 0; j < b.n; ++j)
#
{
#
res.a[i + j] += a[i] * b.a[j];
#
if(res.a[i + j] >= BASE)
#
res.a[i + j + 1] += res.a[i + j] / BASE,
#
res.a[i + j] %= BASE;
#
}
#
res.n = MAXN - 2;
#
while(res.n && res.a[res.n] == 0) res.n--;
#
res.n++;
#
return res;
#
}
#

#
};
#

#
BigInt a[41][41];
#
BigInt res;
#
int main()
#
{
#
freopen("volleyball.in", "r", stdin);
#
freopen("volleyball.out", "w", stdout);
#

#
a[0][0] = BigInt(1);
#
for(int i = 0; i <= 24; ++i)
#
for(int j = 0; j <= 24; ++j)
#
{
#
a[i + 1][j] = a[i + 1][j] + a[i][j];
#
a[i][j + 1] = a[i][j + 1] + a[i][j];
#
}
#
for(int i = 25; i <= 40-2; ++i)
#
{
#
a[i][i] = a[i-1][i-1] + a[i-1][i-1];
#
a[i+1][i] = a[i][i+1] = a[i][i];
#
a[i+1][i-1] = a[i-1][i+1] = a[i-1][i-1];
#
a[i+2][i] = a[i][i+2] = a[i+1][i];
#
}
#

#
int t; cin >> t;
#
for(int z = 0; z < t; ++z)
#
{
#
int u, v; cin >> u;
#
string s; getline(cin, s);
#
for(int i = 0; i < s.length(); ++i)
#
if(s[i] == ':') s[i] = ' ';
#

#
res = BigInt(1);
#
istringstream is(s);
#
while(is >> u >> v)
#
res = res * a[u][v];
#

#
cout << res.toString() << endl;
#
}
#

#
return 0;
#
}
alphadog900 вне форума Ответить с цитированием
Старый 06.11.2008, 22:06   #2
Katushka
Новичок
Джуниор
 
Аватар для Katushka
 
Регистрация: 04.11.2008
Сообщений: 2
По умолчанию

если напишешь какой именно из циклов перевести,возможно смогу помочь
Katushka вне форума Ответить с цитированием
Старый 06.11.2008, 22:26   #3
alphadog900
Новичок
Джуниор
 
Регистрация: 21.10.2008
Сообщений: 2
По умолчанию

ну хоть какой-то. Что сможеш. Пожалуйста
alphadog900 вне форума Ответить с цитированием
Старый 07.11.2008, 13:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Главный говоришь?
Код:
for i:= 0 to 24 do
 for j:= 0 to 24 begin
   a[i + 1,j]:= a[i + 1,j] + a[i,j];
   a[i,j + 1]:= a[i,j + 1] + a[i,j];
 end;
Цитата:
Сорри за оффтоп (палкой по рукам мне!)
Katushka, фотка супер ) Slipknot напоминает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2008, 00:06   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
uses
  SysUtils, StrUtils;
const MAXN = 1000;
const BASE = 10000;
const NBASE = 4;

function max(x, y: Integer): Integer;
begin
  if x > y then Result := x
           else Result := y;
end;

type
  BigInt = class
    public
    a: array [0..MAXN-1] of Integer;
    n: Integer;
    constructor Create(); overload;
    constructor Create(b: Integer); overload;
    function toString():String;
    end;

constructor BigInt.Create();
begin
  FillChar(a, sizeof(a), 0);
  n := 1;
end;

constructor BigInt.Create(b: Integer);
begin
  FillChar(a, sizeof(a), 0);
  a[0] := b mod BASE;
  a[1] := b div BASE;
  n := 1 + Ord(a[1] > 0);
end;

function BigInt.toString():String;
var
  s: String absolute Result;
  fmt, t: String;
  i: Integer;
begin
  s := '';
  fmt := '%00d';
  inc(fmt[3], NBASE);
  FmtStr(t, '%d', [a[n-1]]);
  s := s + t;
  for i := n - 2 downto 0 do
  begin
    FmtStr(t, fmt, [a[i]]);
    s := s + t;
  end;
  for i := 1 to Length(s) do
    if s[i] = ' ' then s[i] := '0';
end;

function Copy(a, b: BigInt): BigInt;
begin
  Move(b.a, a.a, sizeof(a.a));
  Result := a;
end;

function Add(a, b: BigInt): BigInt;
var
  res: BigInt absolute Result;
  i: Integer;
begin
  res := BigInt.Create();
  res.n := max(b.n, a.n);
  for i := 0 to res.n-1 do
  begin
    inc(res.a[i], b.a[i] + a.a[i]);
    if res.a[i] >= BASE then
    begin
      dec(res.a[i], BASE); inc(res.a[i + 1]);
    end;
  end;
  inc(res.n, Ord(res.a[res.n] > 0));
end;

function Mul(a, b: BigInt): BigInt;
var
  res: BigInt absolute Result;
  i, j: Integer;
begin
  res := BigInt.Create();
  for i := 0 to a.n - 1 do
    for j := 0 to b.n - 1 do
    begin
      inc(res.a[i + j], a.a[i] * b.a[j]);
      if res.a[i + j] >= BASE then
      begin
        inc(res.a[i + j + 1], res.a[i + j] div BASE);
        res.a[i + j] := res.a[i + j] mod BASE;
      end;
    end;
  res.n := MAXN - 2;
  while (res.n <> 0) and (res.a[res.n] = 0) do dec(res.n);
  inc(res.n);
end;


var
  a: array [0..40,0..40] of BigInt;
  res: BigInt;
  i, j, t, z, u, v: Integer;
  s: String;
begin
Assign(input, 'volleyball.in'); Reset(input);
Assign(output, 'volleyball.out'); Rewrite(output);
for i := Low(a) to High(a) do
  for j := Low(a[0]) to High(a[0]) do
    a[i][j] := BigInt.Create();
a[0][0] := BigInt.Create(1);
for i := 0 to 24 do
  for j := 0 to 24 do
  begin
    a[i + 1][j] := Add(a[i + 1][j], a[i][j]);
    a[i][j + 1] := Add(a[i][j + 1], a[i][j]);
  end;
for i := 25 to 40-2 do
begin
  a[i][i] := Add(a[i-1][i-1], a[i-1][i-1]);
  Copy(a[i+1][i], Copy(a[i][i+1], a[i][i]));
  Copy(a[i+1][i-1], Copy(a[i-1][i+1], a[i-1][i-1]));
  Copy(a[i+2][i], Copy(a[i][i+2], a[i+1][i]));
end;
ReadLn(t);
for z := 0 to t - 1 do
begin
  ReadLn(s);
  u := StrToInt(System.Copy(s, 1, Pos(':', s) - 1));
  v := StrToInt(System.Copy(s, Pos(':', s) + 1, 99));
  res := BigInt.Create(1);
  res := Mul(res, a[u][v]);
  WriteLn(res.toString());
  res.Destroy();
end;
end.
Somebody вне форума Ответить с цитированием
Старый 08.11.2008, 00:06   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Блин, ну и тормоза. Обновил - уже 2-е сообщение получилось.

Последний раз редактировалось Somebody; 08.11.2008 в 00:10.
Somebody вне форума Ответить с цитированием
Старый 11.12.2010, 18:41   #7
Deadlyyy
Новичок
Джуниор
 
Регистрация: 11.12.2010
Сообщений: 1
По умолчанию

Помогите пожалуйста перевести на паскаль, а то в Сях я слаб
Если до вторника не сдам, то мне кранты!
Код:
//Microsoft Visual Studio 2005, c++ console application
#include "stdafx.h"
#include <iostream>
using namespace std;

#define MAXDIGIT 9
#define MINDIGIT 0
#define ZERO 0

void AddLeftDigit (int D, int& K){
    int n=1;
    while (n<=K) {
        n*=10;
    }

    K=D*n+K;
}

int main(){
    int k;
    int d1;
    int d2;

    cout<<"enter k>"<<ZERO<<":"<<endl;
    do {cin>>k;} while (k<=ZERO);

    cout<<"enter "<<MINDIGIT<<"<d1<"<<MAXDIGIT<<":"<<endl;
    do {cin>>d1;} while ((d1<MINDIGIT)||(d1>MAXDIGIT));

    cout<<"enter "<<MINDIGIT<<"<d2<"<<MAXDIGIT<<":"<<endl;
    do {cin>>d2;} while ((d2<MINDIGIT)||(d2>MAXDIGIT));

    AddLeftDigit(d1,k);
    cout <<"after AddLeftDigit(d1,k), k="<<k<<endl;
    AddLeftDigit(d2,k);
    cout <<"after AddLeftDigit(d2,k), k="<<k<<endl;
    
    cin.ignore(255,'\n');
    cin.get();
    return 0;
}
Deadlyyy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести текст marinchik Свободное общение 15 02.07.2008 11:40
Перевести в шестнадцатитричную систему. Манжосов Денис :) Помощь студентам 7 05.05.2008 00:35
Перевести код с Pascal в C++ gigaman Общие вопросы C/C++ 1 26.03.2008 12:18
Перевести с С++ на Delphi DeFaber Общие вопросы C/C++ 2 12.01.2008 06:02
Как перевести... ATOMIC Общие вопросы Delphi 9 20.01.2007 09:14