Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
KoSYaK
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 19
#1

Перевести код с Pascal на C# и C++ - C++

06.06.2015, 13:50. Просмотров 304. Ответов 2
Метки нет (Все метки)

Помогите переписать прогу с одного языка на другой.
Вот Pascal
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const
  maxn = 150;
var
  w: array[1..maxn, 1..maxn] of byte;
  link, lx, ly: array[1..maxn] of byte;{link[i]=j means xj matches yi}
  x, y: array[1..maxn] of boolean;{True if the vertex is in the interlaced tree}
  n, i, j: byte;
  total: longint;
 
function find(v: byte): boolean;
var
  i: byte;
begin
  x[v] := true;
  for i := 1 to n do
    if not y[i] and (lx[v] + ly[i] = w[v, i]) then begin
      y[i] := true;
      if (link[i] = 0) or find(link[i]) then begin
        find := true;link[i] := v;exit;
      end;
    end;
  find := false;
end;
 
 
procedure KM;
var
  i, j, k, d: byte;
begin
  //fillchar(lx, sizeof(lx), 0);
  for var ii:=1 to maxn do lx[ii]:=0;
  //fillchar(ly, sizeof(ly), 0);
  for var ii:=1 to maxn do ly[ii]:=0;
  for i := 1 to n do
    for j := 1 to n do
      if w[i, j] > lx[i] then lx[i] := w[i, j];
  for k := 1 to n do
    repeat
      //fillchar(x, sizeof(x), 0);
      for var ii:=1 to maxn do x[ii]:=false;
      //fillchar(y, sizeof(y), 0);
      for var ii:=1 to maxn do y[ii]:=false;
      
      if find(k) then break;
      d := 255;
      for i := 1 to n do
        if x[i] then
          for j := 1 to n do
            if not y[j] then
              if lx[i] + ly[j] - w[i, j] < d then
                d := lx[i] + ly[j] - w[i, j];
      for i := 1 to n do
        if x[i] then dec(lx[i], d);
      for i := 1 to n do
        if y[i] then inc(ly[i], d);
    until false;
end;
 
begin
  readln(n);
  total := 0;
  for i := 1 to n do
    for j := 1 to n do 
    begin
      read(w[i, j]);
      inc(total, w[i, j]);
    end;
  
  KM;
  
  for i := 1 to n do
    dec(total, w[link[i], i]);
  writeln(total);
end.
а вот C#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _1076
{
    class Program
    {
        static int maxn = 150 + 1;
        static byte[,] w = new byte[maxn, maxn];
        static byte[] link = new byte[maxn];
        static byte[] lx = new byte[maxn];
        static byte[] ly = new byte[maxn];
        static bool[] x = new bool[maxn];
        static bool[] y = new bool[maxn];
        static byte n, k, d;
        static int total;
 
        static void Main(string[] args)
        {
           
            n = byte.Parse(Console.ReadLine());
            total = 0;
            for(int i = 0; i < n; i++)
            {
                string s = Console.ReadLine();
              string[] ss= s.Split(' ');
               for (int j = 0; j < ss.Length; j++ )
               {
                   w[i, j] = byte.Parse(ss[j]);
                   total+= w[i, j];
               }
        }
 
            for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++)
                    if (w[i, j] > lx[i]) lx[i] = w[i, j];
            for (k = 0; k < n; k++)
                do
                {
                      for (int ii=0; ii< maxn; ii++) x[ii]=false;
                      for (int ii = 0; ii < maxn; ii++) y[ii] = false;
 
                    if (find(k)) break;
                    d = 255;
                    for (int i = 0; i < n; i++)
                        if (x[i])
                            for (int j = 0; j < n; j++)
                                if (!y[j])
                                    if (lx[i] + ly[j] - w[i, j] < d) d = (byte)(lx[i] + ly[j] - w[i, j]);
                    for (int i = 0; i < n; i++)
                        if (x[i]) { lx[i]--; d--; }
                    for (int i = 0; i < n; i++)
                        if (y[i]) { ly[i]--; d--; }
                } while (false);
          
            for (int i = 0; i < n; i++)
            {
                total -= w[link[i], i];
            }
 
            Console.WriteLine(total);
            Console.ReadKey();
        }
 
        static bool find(byte v)
        {
            byte i;
            x[v] = true;
            for(i = 0; i < n; i++)
                if ((!y[i]) && (lx[v] + ly[i] == w[v, i]))
                {
                    y[i] = true;
                    if ((link[i] == 0) || (find(link[i])))
                    {
                        link[i] = v;
                        return true;                        
                       // Environment.Exit(0);
                    }
                }
            return false;
        }
    }
}
Проблем в том, что на C# не правильно выводит результат
Пример:
Вход
4
62 41 86 94
73 58 11 12
69 93 89 88
81 40 69 13

Выход
650
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2015, 13:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перевести код с Pascal на C# и C++ (C++):

Перевести код с Pascal
procedure Max_el_matr; label 1; begin max_el:=A; p:=2; ...

Перевести код с Pascal
var x,y: real; begin write('Введите x, y: '); readln(x,y); if...

Перевести код из Pascal на C++
Нужно произвести удаление узла из сбалансированного дерева. В С++ я не бум-бум,...

Перевести код с Pascal
uses crt; const nmax=20; var a:array of integer; n,i,d:integer; ...

Перевести код из Pascal на С++
Перевести код из Pascal на С++: Uses crt; Type book=Record fam:...

Перевести код с Pascal - C++
Перевести код с Pascal на C++ var a,b: Integer; sim: String; begin ...

2
IrineK
Заблокирован
06.06.2015, 21:56 #2
А сделать-то что надо?
Задачу сформулируйте.
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
08.06.2015, 06:40 #3
KoSYaK, Если Вам нужен код на C# и C++, то Вы выбрали неподходящую ветку, так как здесь обсуждается Си.
Второе - если нужно решение на обоих языках, нужно создать две темы в соответствующих разделах форума - в С++ и C#. При оформлении темы сформулировать задание, а не только "перевести с Pascal"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2015, 06:40
Привет! Вот еще темы с решениями:

Перевести код Pascal на C++
Program PROGRAMMA6; uses dos, crt, graph; Const N=110; M=90; s=13; r=6;...

Перевести код из Pascal в C++
Помогите перевести код из Паскаля в С++ Uses crt; const n = 10; var ...

Перевести код с Pascal
var a,b,c:real; begin clrscr; writeln('Vvedite A='); readln(a); ...

Перевести код с Pascal
Помогите разобраться, что тут написано. Хотелось бы это на Си, т.к паскаль не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru