0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 26
1

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

06.06.2015, 13:50. Показов 540. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2015, 13:50
Ответы с готовыми решениями:

Нужно перевести код из Turbo Pascal в Pascal ABC.NET
Доброго времени суток. На форуме находил похожие темы, но к сожалению так и не смог разобраться....

Нужно перевести код с Pascal ABC на Turbo Pascal - рисование работающей мельницы
Вот код, он должен рисовать работающею мельницу. uses graphABC,crt; type point=record ...

Нужно перевести код из Turbo Pascal в Pascal ABC
Program n5; { Задача. Описать функцию less(f) от непустого файла f ...

Перевести в код Pascal ABC из кода Pascal Delphi
procedure TForm1.Button1Click(Sender: TObject); const n=8; var x:array of real; y,z:array of...

2
Заблокирован
06.06.2015, 21:56 2
А сделать-то что надо?
Задачу сформулируйте.
0
Почетный модератор
21359 / 9094 / 1082
Регистрация: 11.04.2010
Сообщений: 11,014
08.06.2015, 06:40 3
KoSYaK, Если Вам нужен код на C# и C++, то Вы выбрали неподходящую ветку, так как здесь обсуждается Си.
Второе - если нужно решение на обоих языках, нужно создать две темы в соответствующих разделах форума - в С++ и C#. При оформлении темы сформулировать задание, а не только "перевести с Pascal"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2015, 06:40
Помогаю со студенческими работами здесь

Перевести в код Pascal ABC из кода Pascal Delphi
Помогите перевести в код ABC а то с Delphi вообще не знаком. Задание было такое: Записать в файл...

Перевести код с C++ в Pascal
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;vector&gt; #include &lt;numeric&gt; using namespace...

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

Перевести код с Pascal
program laba4; uses crt; var x:array of integer; n,i,j,l:byte; sm,b:integer; begin clrscr;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru