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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2012, 19:35   #1
BloodyBlade
 
Регистрация: 24.09.2011
Сообщений: 7
Сообщение Перевести код с C++ в Pascal

Здравствуйте! У меня возникла некоторая проблема. Имею две программки небольшие, написанные на C++, а мне надо перевести их в pascal. Очень прошу вашей помощи. Код программ ниже:

Код:
#include <iostream>

using namespace std;

int main()
{
long long int a[111][111];
long long int i,j,N,k=0,n=0,z=0;
bool directed=false;

cin»N;

for (j=0;j<N;j++)
for (i=0;i<N;i++)
cin»a[i][j];

for (j=0;j<N;j++)
{
for (i=0;i<N;i++)
{
if (a[i][j]>0)
{
if (a[i][j]!=a[j][i]) directed=true;
if (i==j)
{
k+=a[i][j];
if (a[i][j]>1) z+=a[i][j];
}
else if (a[i][j]>1) n+=a[i][j];
}
}
}

if (directed) cout«"directed";
else
{
cout«"undirected";
n/=2;
}
cout«endl;
cout«k«endl«n+z;
return 0;
}
Код:
#include <iostream>

using namespace std;

int main()
{
long long int a[111][1111],b[111],c[111];
long long int i,j,i_b=0,i_c=0,N;
long long int k,n=0;
bool out=false,in=false;

cin»N;

for (j=0;j<N;j++)
for (i=0;i<N;i++)
cin»a[i][j];

for (j=0;j<N;j++,out=false)
{
for (i=0;i<N;i++)
if ((i!=j)&&(a[i][j]!=0))
{
n+=a[i][j];
out=true;
}

for (k=0,in=false;k<N;k++)
if ((k!=j)&&(a[j][k]!=0)) in=true;

if (out&&!in)
{
b[i_b]=j;
i_b++;
}
else if (in&&!out)
{
c[i_c]=j;
i_c++;
}
}

cout«n«endl;

if (i_b==0) cout«0«endl;
else
{
cout«i_b«" ";
for (i=0;i<i_b;i++)
{
if (i==i_b-1) cout«b[i]+1;
else cout«b[i]+1«" ";
}

cout«endl;
}

if (i_c==0) cout«0;
else
{
cout«i_c«" ";
for (i=0;i<i_c;i++)
{
if (i==i_c-1) cout«c[i]+1;
else cout«c[i]+1«" ";
}
}

return 0;
}
BloodyBlade вне форума Ответить с цитированием
Старый 19.05.2012, 20:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

1-я:
Код:
uses
  crt;

var
  a: array[0..110, 0..110] of longint;
  i, j, N1, k, n, z: longint;
  directed: boolean;

begin
  k := 0;
  n := 0;
  z := 0;
  directed := false;
  
  readln(N1);
  
  for j := 0 to N1 - 1 do
    for i := 0 to N1 - 1 do
    begin
      write('A[', i, ',', j, ']: ');
      readln(a[i][j]);
    end;
  
  for j := 0 to N1 - 1 do
    for i := 0 to N1 - 1 do
      if a[i][j] > 0 then
      begin
        if a[i][j] <> a[j][i] then directed := true;
        if i = j then
        begin
          k := k + a[i][j];
          if a[i][j] > 1 then z := z + a[i][j];
        end
        else 
        if a[i][j] > 1 then n := n + a[i][j];
      end;
  
  if directed then
    write('directed')
  else
  begin
    write('undirected');
    n := n div 2;
  end;
  writeln;
  writeln(k);
  write(n + z);
  readln;
end.
Что должна выдавать, не знаю, так что тестируйте.
Да и типа long long int нет в паскале, так что максимальные значения переменных ОЧЕНЬ сильно уменьшились.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 19.05.2012 в 20:58.
BDA вне форума Ответить с цитированием
Старый 20.05.2012, 02:48   #3
BloodyBlade
 
Регистрация: 24.09.2011
Сообщений: 7
По умолчанию

Спасибо большое! Программа работает отлично. По поводу уменьшения максимального значения переменных - не страшно, тут был очень большой запас.
Еще бы вторую программу переписать - и жизнь была бы прекрасна
BloodyBlade вне форума Ответить с цитированием
Старый 20.05.2012, 10:32   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Да и типа long long int нет в паскале, так что максимальные значения переменных ОЧЕНЬ сильно уменьшились.
А чем тип comp не устраивает?
s-andriano вне форума Ответить с цитированием
Старый 20.05.2012, 16:35   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
А чем тип comp не устраивает?
Он же не целый. Конечно можно его использовать, но если придумать искусственный пример, требующий достаточно большого целого числа, то получим неточный ответ, так что пусть лучше будет все точно на меньшем диапазоне, чем, возможно, не совсем точно на большем

2-я:
Код:
uses
  crt;

var
  a: array [0..110, 0..1110] of longint;
  b, c: array[0..110] of longint;
  i, j, i_b, i_c, N1, k, n: longint;
  out1, in1: boolean;

begin
  
  i_b := 0;
  i_c := 0;
  n := 0;
  out1 := false;
  in1 := false;
  
  readln(N1);
  
  for j := 0 to N1 - 1 do
    for i := 0 to N1 - 1 do
    begin
      write('A[', i, ',', j, ']: ');
      readln(a[i][j]);
    end;
  
  for j := 0 to N1 - 1 do
  begin
    out1 := false;
    for i := 0 to N1 - 1 do
      if (i <> j) and (a[i][j] <> 0) then
      begin
        n := n + a[i][j];
        out1 := true;
      end;   
    
    in1 := false;
    for k := 0 to N1 - 1 do
      if (k <> j) and (a[j][k] <> 0) then in1 := true;
    
    if out1 and (not in1) then
    begin
      b[i_b] := j;
      inc(i_b);
    end
    else
    if in1 and (not out1) then
    begin
      c[i_c] := j;
      inc(i_c);
    end;
  end;
  
  writeln(n);
  
  if i_b = 0 then
    writeln('0')
  else
  begin
    write(i_b, ' ');
    for i := 0 to i_b - 1 do
      if i = i_b - 1 then write(b[i] + 1) else write(b[i] + 1, ' ');
    writeln;
  end;
  
  if i_c = 0 then
    write('0')
  else
  begin
    write(i_c, ' ');
    for i := 0 to i_c - 1 do
      if i = i_c - 1 then write(c[i] + 1) else write(c[i] + 1, ' ');
  end;
  
  readln;
end.
Протестируйте)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.05.2012, 17:47   #6
BloodyBlade
 
Регистрация: 24.09.2011
Сообщений: 7
По умолчанию

Все отлично работает. Спасибо за помощь!
BloodyBlade вне форума Ответить с цитированием
Старый 20.05.2012, 20:00   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Он же не целый.
Ну нельзя же так безоговорочно верить авторитетам!
Да, Борланд в своей документации причисляет этот тип к вещественным, но лишь на том основании, что он обрабатывается FPU, и то, что может интересовать пользователя, а именно: настройка директив компиляции для этого типа аналогична настройке для вещественных типов.
А вот Интел в своей документации на FPU i8087 утверждает, что 8087 может обрабатывать как вещественные, так и целые числа, причем под последними как раз подразумевается то, что в Паскале именуется comp. И загрузка целых и вещественных данных в FPU, кстати, осуществляется разными командами, так что и программист и 8087 всегда знают, с каким числом, целым или вещественным, он в данный момент работает.
Наверное, разработчику лучше известно, как работает его "железка".

Последний раз редактировалось s-andriano; 20.05.2012 в 20:05.
s-andriano вне форума Ответить с цитированием
Старый 20.05.2012, 20:24   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Про различные команды (на примере NASM) знал, а про остальное нет
Спасибо за просветительскую деятельность.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести код с Pascal на C++ Aaaaaa111 Помощь студентам 1 22.02.2012 14:28
Перевести код из Delphi в Pascal Bianca Помощь студентам 4 05.06.2011 14:26
перевести код с Pascal на C++ panic_a Помощь студентам 2 22.12.2010 00:37
Перевести код с Pascal в C++ gigaman Общие вопросы C/C++ 1 26.03.2008 12:18