Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
28.06.2014
Размер:
3.8 Кб
Скачать
{$define debug}
Program laba5;
uses crt;
var
ma, v: array[1..100] of integer; {¬  - Ёб室­л© ¬ ббЁў. v - ¬ ббЁў 'Ї ¬пвм'}
p,n, r, j, i, m, kolliz, probi: integer; {P- ¤«Ё­  Ёб室­®Ј® ¬ ббЁў , n - ¤«Ё­  ¬ ббЁў  'Ї ¬пвЁ'
r - ¬­®¦ЁвҐ«м, Ї® гб«®ўЁо p= r*n, j, i - бзсвзЁЄЁ, m - ⥪гйЁ© н«-в ¬ ббЁў ,
kolliz - Є®«-ў® Є®««Ё§Ё©. probi - Є®««ЁзҐбвў® Їа®Ў ¤® а §аҐиҐ­Ёп Є®««Ё§ЁЁ}
str: string[1];
flag: boolean; {”« Ј ваг Ґб«Ё ­Ґв Є®««Ё§ЁЁ}

{”г­ЄжЁп ениЁа®ў ­Ёп. ‚室­лҐ ¤ ­­лҐ - ⥪гйЁ© н«Ґ¬Ґ­в Ё а §¬Ґа Ї ¬пвЁ.
‚®§ўа й Ґв §­ зҐ­ЁҐ Ё­¤ҐЄб .
Љ®­ЄаҐв­® ¤«п нв®© дг­ЄжЁЁ i н«Ґ¬Ґ­в Ёб室­®Ј® ¬ ббЁў  ЇҐаҐ©¤св ў i+1 н«Ґ¬Ґ­в Ї ¬пвЁ.
n-вл© н«Ґ¬Ґ­в ¬ ббЁў  ЇҐаҐ©¤св ў 1 н«Ґ¬Ґ­в Ї ¬пвЁ. „ «ҐҐ ў®§­ЁЄ­Ґв Є®««Ё§Ёп, ЇаЁ 100% § Ја㦥­­®бвЁ
Ї ¬пвЁ, Є®в®а п ­Ґ ­ ©¤св а §аҐиҐ­Ёп. …б«Ё ў§пвм ў¬Ґбв® n - n-4, ­ ЇаЁ¬Ґа, в® в®Ј¤  ў®§­ЁЄ­гв Ё а §аҐиЁ¬лҐ Є®««Ё§ЁЁ}
function hesh(m, n: integer): integer;
begin
hesh:=m mod (n-4)+1;
end;

begin
textcolor(15);
randomize; {'ЊҐи Ґ¬' зЁб« }
repeat
repeat {‚®ў¤Ё¬ p - Є®«ЁзҐбвў® н«Ґ¬Ґ­в®ў Ёб室­®Ј® ¬ ббЁў }
Writeln('‚ўҐ¤ЁвҐ p - Є®«-ў® н«-®ў Ёб室­®Ј® ¬ ббЁў : ');
readln(p);
until (p>0) and (p < 100);
repeat {‚ў®¤Ё¬ ¬­®¦ЁвҐ«м r}
Writeln('‚ўҐ¤ЁвҐ ¬­®¦ЁвҐ«м r: n*r = p: ');
readln(r);
until (r>0) and (r < 4);
n:=p div r; {‚лзЁб«пҐ¬ ¤«Ё­г "Ї ¬пвЁ" n}
for j := 1 to p do {Џ®¤Ј®в ў«Ёў Ґ¬ Ёб室­л© ¬ ббЁў. Ќг¦­® ¤«п ­Ґб®ўЇ ¤Ґ­Ёп н«Ґ¬Ґ­в®ў.}
ma[j]:=-1;
for j := 0 to p-1 do {‚бв ў«пҐ¬ зЁб«  ®в 0 ¤® p-1}
begin
repeat
i:=random(p)+1; {‚лЎЁа Ґ¬ ­®¬Ґа ¤«п нв®Ј® зЁб« .}
until ma[i] < 0; {…б«Ё ¬Ґбв® бў®Ў®¤­®}
ma[i]:=j; {ЏЁиҐ¬}
end;
{$ifdef debug}
writeln('€б室­л© ¬ ббЁў');
for j:=1 to p do {‚лў®¤Ё¬ Ёб室­л© ¬ ббЁў}
write(ma[j], ' ');
writeln;
{$endif}
for j := 1 to n do {ЋЇпвм ¦Ґ ¤«п ®в«®ў  Є®««Ё§Ё© '®Ў­г«пҐ¬' ¬ ббЁў-'Ї ¬пвм'}
v[j]:=-1;
m:=1; {“бв ­ ў«Ёў Ґ¬ ⥪гйЁ© н«Ґ¬Ґ­в}
flag:=true; {ЋвбгвбвўЁҐ Є®««Ё§Ё© Ї® 㬮«з ­Ёо}
kolliz:=0;
while (m <= p) and flag do {Џа®е®¤п Ї® ўбҐ¬ н«Ґ¬Ґ­в ¬ ¬ ббЁў  ¤® ў®§­ЁЄ­®ўҐ­Ёп ­Ґа §аҐиЁ¬®© Є®««Ё§ЁЁ}
begin
i:=hesh(m, n); {‚лзЁб«пҐ¬ ­®ўл© Ё­¤ҐЄб н«Ґ¬Ґ­в }
if v[i] < 0 then {…б«Ё Ї ¬пвм бў®Ў®¤­ , в® ЇЁиҐ¬}
v[i] := ma[m]
else {…б«Ё Є®««Ё§Ёп}
begin
kolliz:=kolliz+1; {“ўҐ«ЁзЁў Ґ¬ бзсвзЁЄ}
probi:=0; {€ Ўг¤Ґ¬ бзЁв вм Їа®Ўл.}
write(kolliz, ' Є®««Ё§Ёп ­  ', m, ' н«Ґ¬Ґ­вҐ. ђ §¬ҐйҐ­­® ', m-1, ' н«Ґ¬Ґ­в®ў.');
writeln(' Џ ¬пвм § Ї®«­Ґ­  ­  ', int((m-1)/n*100):0:0, '%');
j:=i+1; {“бв ­ ў«Ёў Ґ¬ Ї®§ЁжЁо­  б«Ґ¤гойЁ© н«Ґ¬Ґ­в}
while (j <= n) and (v[j] >= 0) do {€ ЁйҐ¬ бў®Ў®¤­®Ґ ¬Ґбв® ¤® Є®­ж  ¬ ббЁў }
j:=j+1;
probi:=j-i;
if j > n then {…б«Ё ¤® Є®­ж  Ї ¬пвЁ ­Ґв бў®Ў®¤­®Ј® ¬Ґбв®, в® ЁйҐ¬ ў­ з «Ґ}
begin
j:=1;
while (j < i) and (v[j]>=0) do {„® 㦥 Їа®ўҐаҐ­­®© з бвЁ}
j:=j+1;
probi:=probi+j;
if j >=i then {…б«Ё ўҐбм ¬ ббЁў § ­пв, в® }
begin
writeln('Љ®««Ё§Ёп ­Ґ ­ и«  а §аҐиҐ­Ёп');
flag:=false {Ћв¬Ґз Ґ¬ нв®}
end
end;
if flag then {…б«Ё Ґбвм ¬Ґбв  в®}
begin
writeln('Љ®«Ё§§Ёп а §аҐиЁ« бм, Їа®ўҐаЁ«®бм ', probi, ' п祥Є Ї ¬пвЁ');
v[j]:=ma[m]; {€бЇ®«м§гҐ¬ ҐЈ®}
end
end;{end else - Є®««Ё§Ёп}
m:=m+1;
end;{end while - Їа®ЎҐЈ Ї® ¬ ббЁўг.}

if kolliz = 0 then
writeln('Љ®««Ё§Ё© ­Ґ ў®§­ЁЄ«®!');
{$ifdef debug}
for j := 1 to n do {‚лў®¤Ё¬ ¬ ббЁў Ї ¬пвм}
begin
write(v[j], ' ');
end;
{$endif}
writeln('ѓ®в®ў®');
repeat
textcolor(2); writeln('Џ®ўв®аЁвм? Y Ё«Ё N?');
textcolor(15); readln(str);
until (str='Y') or (str='y') or (str='n') or (str='N');
until(str = 'n') or (str='N');
end.