Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Необходима инфа до ЗАВТРА!

Автор: np88 21.06.2006 19:26

ЛЮДИ ПОМОГИТЕ!!!!!!!!!!!!!!!!!! СРОЧНО НЕОБХОДИМО РАСПИСАТЬ С ТЕОРИТИЧЕСКОЙ ТОЧКИ ЗРЕНИЯ ПРОГРАММУ КРЕСТИКИ-НОЛИКИ... Что делает каждая процедура, само тело программы, пошагово..... ОТКЛИКНИТЕСЬ УМОЛЯЮ... unsure.gif unsure.gif unsure.gif

Вот и сама прога, прога не моя, а интернетовская...

program KECT;
uses crt,graph;

const cvet:array[boolean] Of integer=(red,blue);
sic:array[boolean] Of String=('OBHYLATEL','KPECTOBCHIK');
letter:array[boolean] Of Char=('0','X');
amount:array[boolean] Of integer=(7,10);
possibleLetters:set of char=['1' .. '9'];

var tbl:array[1..3,1..3] of integer;
z,ax,ay,i,bg,mode,j,imove,p,posX,posY:integer;
curr,ch:char;
winner,ok,flag,b,stopped:boolean;

function sumR(x:integer):integer;
var i,s:integer;
begin
s:=0;
for i:=1 to 3 do
s:=s+tbl[x,i];
sumR:=s
end;

function sumC(x:integer):integer;
var i,s:integer;
begin
s:=0;
for i:=1 to 3 do
s:=s+tbl[i,x];
sumC:=s
end;


function sumDiag(main:boolean):integer;
var i,s:integer;
begin
s:= 0;
case main of
false: for i:=1 to 3 do
s:=s+tbl[i,i];
true: for i:=1 to 3 do
s:=s+tbl[i,4-i]
end;
sumDiag:=s
end;

Procedure PutChar(b:boolean;x,y:integer;c:Char);
var cx,cy:integer;
begin
cx:=x*(getmaxx Div 5)+(getmaxx div 10);
cy:=y*(getmaxy Div 5)+(getmaxy div 10);
setcolor(cvet[ b ]);
settextjustify(centertext,centertext);
outtextxy(cx,cy,c);
setcolor(green);
end;

begin
bg:=detect;
initgraph(bg,mode,'c:\bp\bgi');
for i := 1 to 3 do
for j := 1 to 3 do
tbl[i, j] := 0;
ax := getmaxx Div 5;
ay := getmaxy Div 5;
for z:= 1 to 4 do
line(ax, z*ay, 4*ax, z*ay);
for z:= 1 to 4 do
line(z*ax, ay, z*ax, 4*ay);
for imove := 1 to 9 do
begin
setviewport(1, getmaxy-60, getmaxx, getmaxy, true);
clearviewport;
setviewport(1, 1, getmaxx, getmaxy, true);
outtextxy(getmaxx div 2, getmaxy - 30, sic[odd(imove)]);
repeat
ch:= readkey;
until ch in possibleletters;
possibleletters:=possibleletters-[ch];
p:=Ord(ch)-Ord('0');
posY:=(((p-1) div 3)*(-1))+3;
posX:=((p) mod 3);
if posX=0 then posX:=3;
PutChar(odd(imove),posX,posY,letter[odd(imove)]);
tbl[posX,posY]:=amount[odd(imove)];
stopped:=false;
for b:=false to true do
begin
for i := 1 to 3 do
if (sumR(i)=3*amount[ b ]) or (sumC(i)=3*amount[ b ]) then
begin
winner:=b; stopped:=true;
end;
if not stopped then
if (sumDiag(false)=3*amount[ b ]) or (sumDiag(true)=3*amount[ b ]) then
begin
winner:=b; stopped:=true;
end;
end;
if stopped then break;
end;
setviewport(1, getmaxy-60, getmaxx, getmaxy, true);
clearviewport;
setviewport(1, 1, getmaxx, getmaxy, true);
if stopped then
begin
cleardevice;
setactivepage(1);
begin
setcolor(red);
settextstyle (7,0,5);
outtextxy(getmaxx div 2, (getmaxy div 2)+60,'BIGPAL '+sic[winner]);
outtextxy((getmaxx div 2), ((getmaxy div 2)-60)+60,'YPA '+sic[winner]+'Y');
setcolor(white);
end;
flag:=true;
while not keypressed do
begin
if flag=true then
begin
setvisualpage (1);
setactivepage (0);
begin
setcolor(blue);
settextstyle (7,0,5);
outtextxy((getmaxx div 2), ((getmaxy div 2)-32)+60,'BIGPAL '+sic[winner]);
outtextxy((getmaxx div 2), ((getmaxy div 2)-92)+60,'YPA '+sic[winner]+'Y');
setcolor(white);
end;
end
else begin
setvisualpage (0);
delay (500);
setactivepage (1);
end;
flag:=not flag;
end;
readln
end
else
begin
cleardevice;
setactivepage(1);
begin
setcolor(red);
settextstyle (1,0,5);
outtextxy(getmaxx div 2, getmaxy div 2, 'FYYYYYY, HUKTO HE BIGPAL!');
setcolor(white);
end;
flag:=true;
while not keypressed do
begin
if flag=true then
begin
setvisualpage (1);
setactivepage (0);
begin
setcolor(blue);
settextstyle (1,0,5);
outtextxy(getmaxx div 2, (getmaxy div 2)-32, 'FYYYYYY, HUKTO HE BIGPAL!');
setcolor(white);
end;
end
else begin
setvisualpage (0);
delay (500);
setactivepage (1);
end;
flag:=not flag;
end;
closeGraph
end;
end.
unsure.gif unsure.gif unsure.gif unsure.gif unsure.gif

пользуйся тегами, а по поводу разбора кода обратись к его автору, врядли кто-то возьмется разжевывать чужой код
klem4