nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Creazione di un heap

Von: Carlo (carlo@nowhere.rm.it) [Profil]
Datum: 27.10.2006 12:23
Message-ID: <62Z211Z206Z11Y1161944599X1526@usenet.libero.it>
Followup-to: it.comp.lang.pascal
Newsgroup: it.comp.lang.pascal
Dopo 7 anni di programmazione in C e Java sono dovuto passare al Pascal (due
giorni fa). Quindi ho qualche difficoltà con un breve programma, che dato un
array deve ridisporre gli elementi per mantenere la proprietà della
struttura dati heap (ogni figlio è minore o uguale al padre; il padre di un
elemento in posizione i si trova in posizione parte intera di i/2).
Sto usando il compilatore gpc; quando eseguo il programma (a.out) ottengo un
errore di out of range nell'array, ma non riesco a capire dove si trova
l'errore nel sorgente. Qualcuno potrebbe dare una controllata? Grazie mille.
Computer1:~ carlo$ ./a.out
./a.out: value out of range (error #300 at 2c0f)
Computer1:~ carlo$



program CreaHeap (input, output);

const DimArray = 10;

type tipoar = array [1..DimArray] of integer;

var V : tipoar = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
K : integer;

procedure FixDown(var H : tipoar; I : integer);
var Continua : boolean;
Temp : integer;
Padre : integer;
begin
Continua := true;
while (2*I <= 10) and Continua do
begin
I := 2*I;
if (I+1 <= 10) then
begin
if (H[I+1] > H[I]) then
I := I+1
end;
Padre := trunc(I/2);
if H[Padre] < H[I] then
begin
Temp := H[I];
H[I] := H[I+1];
H[I+1] := Temp
end
else
Continua := false
end
end; { FixDown }

begin {programma principale}
for K := trunc(DimArray/2) downto 1 do
FixDown(V, K);
for K := 1 to DimArray do
write(V[K], ' ');
writeln
end.




--------------------------------
Inviato via http://arianna.libero.it/usenet/

[ Auf dieses Posting antworten ]

Antworten