Moim zadaniem jest napisanie programu jak w temacie :) Stworzyłem program, ale nie jestem pewny jego funkcjonalności, a szczególnie działania tej metody, której procedure wstawiłem poniżej. Nie wstawiałem całego kodu, ale procedurę, z którą mam najwięcej problemów. Mógłby mi ktoś powiedzie czy całość jest dobrze i co dokładnie dzieje się we fragmencie kodu, który jest pogrubiony? Z góry dziękuję, pozdrawiam.
program Zapobieganie_kolizji;
uses
crt;
label
etykieta, etykieta2;
type
element = record
liczba: Integer;
indeks: Integer;
end;
tab = array [0..800] of Integer;
tabl = array [0..159] of element;
var
ilo: Integer;
dane: tab;
tablica2: tabl;
n, i, j, liczba, skolizji, kolizje: Word;
k: Integer;
klucz, piwnica: Integer;
z, p: Byte;
antek: Integer;
procedure Wstawbeznadmiar(var t: tabl; a: Integer; var skolizji: Word; liczba: Word; var il: Integer);
// wstawianie element˘w metodĄ aäcuch˘w po. bez obszaru nadmiarowego
var
kl, l: Integer;
k,j,i : Integer;
begin
begin
il := 0;
k := a mod liczba; //zwraca wartosc indeksu pod ktorym powinna zostac zapisana liczba
if t[k].liczba = -1 then
t[k].liczba := a //zapisuje w przypadku braku kolizji
else
begin
for j := 0 to high(t) do
begin
if t[(k + j) mod liczba].liczba = -1 then
begin
t[(k + j) mod liczba].liczba := a;
break;
end;
end;
l := k;
kl := k;
if t[k].indeks <> -1 then
begin
repeat
il := il + 1;
l := k;
k := t[k].indeks;
until (k = -1);
t[l].indeks := (kl + j) mod liczba;
end
else
begin
il := 1;
t[k].indeks := (l + j) mod liczba;
end;
skolizji := skolizji + il; //zwraca laczna sume kolizji
end;
end;
end;
sformatowanie kodu - furious programming