Przetłumaczenie kodu z jezyka pascal na c++

0

Witam
Czy mógłby ktoś pomóc w przetłumaczeniu tego kod z języka pascal na c++? Z pascala jestem mega laikiem, a chciałbym ten kod przetłumaczyć na coś co bardziej rozumiem.

procedure ProgDynamFazal(n:integer; Odległości:Siatka; var NajkOdleg:Długości);
{

Punkt =record zLewej,zDolu:integer 
end;
    PunktyDrogi=array[1..n+n] of integer;
    Długości =array[0..n,0..n] of integer;
    Siatka =array[0..n,0..n] of Punkt;
}
163
function Mniejsza(u,v:integer)¡integer;
{
    Wartoscia funkcji jest mniejsza z liczb u i v.
}
begin if u<=v then Mniejsza:
    =u else Mniejsza:
         =v end;
{
Mniejsza
}
var i,j:
integer;
begin NajkOdleg[0,0]:=0;
for j:=1 to n do NajkOdleg[0,j]:
             =NajkOdleg[0,j-1]+Odleglosci[0,j].zLewej;
for i:=1 to n do NajkOdleg[i,0]:
             =NajkOdleg[i-1,0]+Odleglosci[i,0].zDolu;
for i:=1 to n do for j:=1 to n do NajkOdleg[i,j]:=Mniejsza(NajkOdleg[i-1,j]+Odleglosci[i,j].zDolu, NajkOdleg[i,j-1]+Odleglosci[i,j].zLewej) end;

procedure ProgDynamFazalI(n,k,1:integer; Odległości:Siatka; NajkOdleg:Dlugosci; var Droga:PunktyDrogi);

var i,j:
integer;
begin i:
    =k+l;
while i>=l do if k=0 then while i>=l do begin Droga[i]:=l;
i:= i-1 end else if 1=0 then while i>=l do begin Drogafi]¡=-1;
i:= i-1 end else if NajkOdleg[k,1]-Odległości[k,1].zDolu=NajkOdleg[k-1,1] then begin Droga[i]:=-1;
                        {
                            Ruch w pionie.
                        }
i:= i — 1;
k:=k-l end else begin Droga[i]:=l;
                        {
                            Ruch w poziomie.
                        }
i:= i-1;
1:=1-1 end end;
0

To nie jest czysty (kompilowalny) kod Pascala, a jakaś dziwaczna hybryda, do tego z beznadziejnym formatowaniem. Wrzuć oryginalny kod (sformatowany), wtedy się go przeportuje.

0

Mam tylko ten kod :/

1

Ten kod to jakiś syf totalny… skąd go w ogóle masz? Mnóstwo w nim błędów, pogubione znaki, niektóre unikodowe, w ogóle nie używane przez kompilator… Nie wiem kto mógł taki kod wyprodukować, ale powinien dostać sądowy zakaz dotykania klawiatury i odpalania IDE…


Niżej podaję poprawiony i sformatowany kod, choć nie wykluczam, że gdzieś są jeszcze błędy:

const
  N = 10; {?}

type
  PunktyDrogi = array [1 .. N + N] of integer;
  Dlugosci = array [0 .. N, 0 .. N] of integer;
  Siatka = array [0 .. N, 0 .. N] of TPoint;

procedure ProgDynamFazal(N: Integer; Odleglosci: Siatka; var NajkOdleg: Dlugosci);
var
  I, J: Integer;
begin
  NajkOdleg[0, 0] := 0;

  for J := 1 to N do
    NajkOdleg[0, J] := NajkOdleg[0, J - 1] + Odleglosci[0, J].X;

  for I := 1 to N do
    NajkOdleg[I, 0] := NajkOdleg[I - 1, 0] + Odleglosci[I, 0].Y;

  for I := 1 to N do
    for J := 1 to N do
      NajkOdleg[I, J] := Min(NajkOdleg[I - 1, J] + Odleglosci[I, J].Y, NajkOdleg[I, J - 1] + Odleglosci[I, J].X);
end;

procedure ProgDynamFazalI(N, K, L: Integer; Odleglosci: Siatka; NajkOdleg: Dlugosci; var Droga: PunktyDrogi);
var
  I, J: Integer;
begin
  I := K + L;

  while I >= L do
    if K = 0 then
      while I >= L do
      begin
        Droga[I] := L;
        I := I - 1
      end
    else
      if L = 0 then
        while I >= L do
        begin
          Droga[I] := -1;
          I := I - 1
        end
      else
        if NajkOdleg[K, 1] - Odleglosci[K, 1].Y = NajkOdleg[K - 1, 1] then
        begin
          Droga[I] := -1;
          I := I - 1;
          K := K - L;
        end
        else
        begin
          Droga[I] := L;
          I := I - 1;
          L := L - 1;
        end;
end;

Wartości stałej N nie doszukałem się, więc użyłem byle jakiej (tu: 10). Typ o nazwie Punkt nie jest potrzebny, bo w module Types jest typ TPoint. Zagnieżdżona funkcja o nazwie Mniejsza nie jest potrzebna, bo w module Math jest funkcja Min.

W dalszym ciągu pozostaje konflikt nazw (N jako stała i N jako parametr), a identyfikatory są tragiczne. Problemem też jest typ PunktyDrogi, bo jest indeksowany od 1, a nie wiem czy w C++ można ustalić inne indeksowanie macierzy niż od 0. Jeśli nie to kod trzeba poprawić, tak aby uwzględniał tę różnicę.

Edit: Wygląda na to, że macierze w C++ zawsze indeksowane są od 0, więc kod wymaga poprawy.

1
furious programming napisał(a):

Mnóstwo w nim błędów, pogubione znaki, niektóre unikodowe, w ogóle nie używane przez kompilator… (...)

@furious programming Może Lazarus tego nie ma ale w Delphi chyba odkąd weszło Unicode można zapisywać też tak zmienne :D Pomijając inne błędy takie coś:

    Długości =array[0..n,0..n] of integer;
...
  procedure ProgDynamFazalI(n,k,l :integer; Odległości:Siatka; NajkOdleg:Długości; var Droga:PunktyDrogi);

Kompiluje się bez problemu ;)
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Identifiers

0

@Clarc: jeśli o ten unikod chodzi, to miałem na myśli poniższą linijkę:

i:= i — 1;

To ma być dekrementacja zmiennej i, ale zamiast znaku minusa jest pauza. W Delphi to się kompiluje?

Natomiast FPC nie obsługuje znaków diakrytyzowanych, ani w trybie {$MODE OBJFPC}, ani w {$MODE DELPHI}, ani też w {$MODE DELPHIUNICODE}. Po prostu zgłąsza błąd kompilacji: Fatal: illegal char.

0

@furious programming ten fragment akurat się nie kompiluje. Podobnie jak następna linijka

1:=1-1

Myślałem, że miałeś na myśli nazwy zmiennych.

0

W niektórych instrukcjach ktoś zamiast identfikatora l (małe L) wstawił cyfrę 1 i stąd ten problem. Kod który podałem wyżej ma to naprawione i powinien dać się skompilować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1