Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / laba5 / laba5
.pas {$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.
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.