Przetłumaczenie kodu z Pascala na C.

0

Witam osatnio probowalem przelozyc jeden kod z pascala na c, jako ze nigdy z pascalem nie mialem do czynienia nie moge znalezc bledu.

Kod Pascal :
http://ideone.com/Rc9ECd

Moj Kod C:
http://ideone.com/jZAHYn

Dla tego samego wejscia zwracaja inne wyniki
In:

3 6
3 3 4 4 4 2
3 1 3 2 1 4
7 3 1 6 4 1

Out:
5
Wszelkie uwagi dotyczace tego gdzie moze byc blad wypisalem w komentarzu. Z góry dzieki za pomoc!

0

Luźny hint: wziąłeś pod uwagę, że niektóre tablice w tym pascalowym kodzie są deklarowane jako array[1..xyz]?

0

No tak ale z tego co wyczytalem to array[1...n] to w c nic innego jak. Array[n]. Cos nie tak z indexowaniem jest? Bo nie rozumiem do konca.

0
turbopascal napisał(a):

No tak ale z tego co wyczytalem to array[1...n] to w c nic innego jak. Array[n]. Cos nie tak z indexowaniem jest? Bo nie rozumiem do konca.

Co do ilości elementów to tak, ale indeksowani jest inne.
W C masz indeksy od 0, czyli array[n] to array[0],array[1],...,array[n-1].

A w Pascalu array[1...n] jak po samej nazwie można się domyśleć masz array[1],...,array[n].

0

Jak to zoptymalizowac? Zmienic indexy na prawidlowe w forach?

0

Najłatwiej po prostu tworzyć w c-owym kodzie tablice o jeden element większe, może zadziała :P

0

Tam jest jedna tablica array[0...N+1], to analogicznie w c array[n+3]?

0

Tych indeksowych od zera nie zmieniaj:

array[0..max] of type -> type[max];
array[1..max] of type -> type[max+1];

Lub zmień indeksowanie (tablica[index-1] przy tych, gdzie są od jedynki), na jedno wyjdzie, ale może być mniej wydajne :P

0

Jeszcze pytanie w kodzie Pascalowym w funcki find_paths na poczatku sa deklarowane bajty x i y , po czym sa Od razu uzywane bez przypisania wartosci. W c program sie nie skomilowac oczywiscie i zadeklarowalem je jako 1, czy paslac ma jakis default value przy deklaracji zmiennych? Np x : byte przypisuje mu null na poczatek?

0

Te zmienne są ustawiane przy wywoływaniu heap_remove - zobacz, że deklaracja tej funkcji wygląda tak:
procedure heap_remove( var h : t_heap; var x : byte; var y : byte);
Zatem x oraz y są przekazywane przez referencję (h także).
Czyli to tutaj masz swój problem, bo w tym C++owym kodzie przekazujesz je przez wartość, niszcząc całą ideę.

0

No tak ale jak nie przypisze zadnej wartosci dla <ort> x</ort> i <ort>y </ort> to program mi sie nie skompiluje. poza tym w <ort>heap_remove</ort> i tak dostaja Od razu nowe value.

0
XYZY napisał(a):

No tak ale jak nie przypisze zadnej wartosci dla x i y</code> to program mi sie nie skompiluje. Pozatym w <code>heap_remove i tak dostaja Od razu nowe value.

0

Tak, dostają nowe wartości wewnątrz heap_remove - ale tylko w kodzie z Pascala. Nie w Twoim C++owym.

0

Nie rozumiem bledu przeciez dostaja nowe wartosci:

void heap_remove( t_heap h, char x, char y)
{
	x = h.data[1].x;
	y = h.data[1].y;
	h.data[1] = h.data[h.size];
	h.size--;
	heap_go_down(h);
}
0

Rozróżniasz przekazywanie przez referencję od przekazywania przez wartość?
http://ideone.com/pIqAoj

0

Ahh juz rozumiem... Jak tylko wroce do domu sprawdze czy to fixnie buga.

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