program souboje; {verye 1.0} uses crt; const pocet_souperu=16; pocet_pavouku=7; type pavouk_type = array[1..pocet_souperu] of integer; vsechny_pavouky_type = array[1..pocet_souperu,1..pocet_pavouku] of integer; var bez_kolize1,bez_kolize2,i:integer; ciselnik:pavouk_type; vsechny_pavouky:vsechny_pavouky_type; pavouk,x,l,m,n,c :integer; chyba:boolean; {*************************************************} procedure nul_pavouk(var vsechny_pavouky:vsechny_pavouky_type); var i,j:integer; begin for i:=1 to pocet_pavouku do for j:=1 to pocet_souperu do vsechny_pavouky[j,i]:=0; end; {**********************************************} procedure nul_pavouk_sloupec(var vsechny_pavouky:vsechny_pavouky_type;pavouk:integer); var i:integer; begin for i:=1 to pocet_souperu do vsechny_pavouky[i,pavouk]:=0; end; {***********************************************} procedure vypocet(var a,b:integer); var i,x,y:integer; c,d:real; begin x:=0; for i:=1 to (pocet_souperu) do begin x:=x+i; end; y:=pocet_souperu div 4; a:=x div (y*3+(pocet_souperu - y)); b:=x div (y+(pocet_souperu - y)); end; {***************************************************} procedure napln_ciselnik(var a:pavouk_type); var i:integer; begin for i:=1 to pocet_souperu do begin a[i]:=i; end; end; {****************************************************} procedure vyber_soupere(var ciselnik:pavouk_type;var souper:integer; var chyba:boolean); var m:integer; begin m:=0; repeat begin souper:=ciselnik[random(pocet_souperu)+1]; m:=m+1 end; until((souper<>0) or (m=50)); if m=50 then chyba:=false; ciselnik[souper]:=0; end; {*****************************************************} procedure kontrola(var ciselnik:pavouk_type;vsechny_pavouky:vsechny_pavouky_type;souper,pavouk:integer); var i,j,x,k:integer; begin if pavouk <> 1 then begin for i:=1 to pavouk-1 do begin j:=0; repeat j:=j+1; until(vsechny_pavouky[j,i]=souper); x:=(j-1) div 4; for k:=1 to 4 do ciselnik[vsechny_pavouky[x*4+k,i]]:=0; end; end; end; {***********************************************} procedure kontrola2(var ciselnik:pavouk_type;vsechny_pavouky:vsechny_pavouky_type;souper,pavouk:integer); var i,j,x,k:integer; begin if pavouk <> 1 then begin for i:=1 to pavouk-1 do begin j:=0; repeat j:=j+1; until(vsechny_pavouky[j,i]=souper); x:=(j-1) div 2; for k:=1 to 2 do ciselnik[vsechny_pavouky[x*2+k,i]]:=0; end; end; end; {****************************************************} procedure nul_ciselnik(var ciselnik:pavouk_type;vsechny_pavouky:vsechny_pavouky_type;pavouk:integer); var i:integer; begin for i:=1 to pocet_souperu do begin ciselnik[vsechny_pavouky[i,pavouk]]:=0; end; end; {****************************************************} procedure napln_pavouk(var vsechny_pavouky:vsechny_pavouky_type;pavouk:integer); var souper,i,j:integer; begin for i:=1 to (pocet_souperu div 4) do begin napln_ciselnik(ciselnik); nul_ciselnik(ciselnik,vsechny_pavouky,pavouk); for j:=1 to 4 do begin vyber_soupere(ciselnik,souper,chyba); kontrola(ciselnik,vsechny_pavouky,souper,pavouk); vsechny_pavouky[(i-1)*4+j,pavouk]:=souper; end; end; end; {******************************************************} procedure napln_pavouk2(var vsechny_pavouky:vsechny_pavouky_type;pavouk:integer); var souper,i,j:integer; begin for i:=1 to (pocet_souperu div 4) do begin napln_ciselnik(ciselnik); nul_ciselnik(ciselnik,vsechny_pavouky,pavouk); for j:=1 to 4 do begin vyber_soupere(ciselnik,souper,chyba); kontrola2(ciselnik,vsechny_pavouky,souper,pavouk); vsechny_pavouky[(i-1)*4+j,pavouk]:=souper; end; end; end; {******************************************************} {*********************************************************} begin randomize; chyba:=true; clrscr; pavouk:=1; nul_pavouk(vsechny_pavouky); vypocet(bez_kolize1,bez_kolize2); napln_ciselnik(ciselnik); if pocet_pavouku<=bez_kolize1 then if pocet_pavouku=1 then x:=1 else x:=2 else begin if pocet_pavouku<=bez_kolize2 then x:=3 else x:=4; end; case x of 1: begin napln_pavouk(vsechny_pavouky,1); end; 2: begin napln_pavouk(vsechny_pavouky,1); repeat chyba:=true; for l:=2 to pocet_pavouku do begin nul_pavouk_sloupec(vsechny_pavouky,l); napln_pavouk(vsechny_pavouky,l); end; until(chyba<>false); end; 3: begin napln_pavouk(vsechny_pavouky,1); repeat chyba:=true; for l:=2 to bez_kolize1 do begin nul_pavouk_sloupec(vsechny_pavouky,l); napln_pavouk(vsechny_pavouky,l); end; until(chyba=true); repeat chyba:=true; for l:=bez_kolize1+1 to pocet_pavouku do begin nul_pavouk_sloupec(vsechny_pavouky,l); napln_pavouk2(vsechny_pavouky,l); end; until(chyba<>false); end; 4: begin writeln('Je zadano prilis mnoho pavouku a nelze vytvorit nezavisle pavouky!'); end; end; if x<>4 then begin { textcolor(cyan);} gotoxy (3,3); write ('Hraci schema'); textbackground(black); for m:=1 to pocet_souperu do for n:=1 to pocet_pavouku do begin { textcolor(white);} gotoxy(25+n*5,3); write(n); gotoxy(3,5+m); write('Pozice ve schematu ',m); { textcolor(cyan);} gotoxy(25+n*5,5+m); write(vsechny_pavouky[m,n]); gotoxy(3,5+m); write('Pozice ve schematu ',m); end; end; gotoxy(24,24); write('Stisknete klavesu!'); repeat until keypressed; end.