Kezdőoldal » Számítástechnika » Programozás » Miért lép ki 201-es exitcode-d...

Miért lép ki 201-es exitcode-dal a következő pascal-program? Mi benne a hiba?

Figyelt kérdés

program TestAB;

{

This program is a crude implementation of the AlphaBeta

algorithm found in Kreutzer & MacKenzie p. 233.

}

const

MaxNum = 2; {node degree}

NumPly = 4; {search ply}

Root = 1; {start search at this location}


type

Index = 1..50;

Tree = array[Index] of Real; {simulated game tree}

State = Index;

Ply = Integer;

ListIndex = 1..MaxNum;

List = array[ListIndex] of Real; {state siblings}


var

T : Tree;


procedure Init(var T : Tree);

{

Build dummy game tree.

}

var

I : Index;


begin {Init}

for I := 16 to 31 do {blank out 4-ply leaf nodes}

T[I] := 0;

end; {Init}


function Eval (S : State) : Real;

{

Compute value of state S.

}

begin {Eval}

Eval := Random(101);

end; {Eval}


function Terminal(S : State) : Boolean;

{

Stub function to check S for succesor states.

}

begin {Terminal}

Terminal := False;

end; {Terminal}


function Max(X, Y : Real) : Real;

{

Returns maximum of X and Y.

}

begin {Max}

if X > Y then

Max := X

else

Max := Y

end; {Max}


function Min(X, Y : Real) : Real;

{

Returns minimum of X and Y.

}

begin {Min}

if X < Y then

Min := X

else

Min := Y

end; {Min}


function Child(S : State; I : ListIndex) : State;

{

Compute I-th successor of state S.

}

begin {Child}

Child := MaxNum * S + I - 1;

end; {Child}


function MachineMove(N : Ply) : Boolean;

{

Checks to see if it is computer's move in this ply.

}

begin {MachineMove}

MachineMove := { not } Odd(N)

end; {MachineMove}


function AlphaBeta(S : State; N : Ply; Alpha, Beta : Real) : Real;

{

Recusively score state S using evaluation function Eval

and an N - Ply state space graph.

}

var

Next : State;

I : ListIndex;

V, Value,

BestScore : Real;

L : List; {successors of S at this level}


begin {AlphaBeta}

if (N = 0) or Terminal(S) then

begin

Value := Eval(S);


T[S] := Value; {record values only to confirm cut offs}


if Value > 100 then {machine win}

AlphaBeta := MaxInt

else if Value < -100 then {machine loss}

AlphaBeta := -MaxInt

else if Value = 0 then {draw}

AlphaBeta := 0

else

AlphaBeta := Value

end

else

begin

if MachineMove(N) then {program's move}

BestScore := Alpha

else

BestScore := Beta;


I := 1;

while I <= MaxNum do

begin

Next := Child(S, I);

V := AlphaBeta(Next, N - 1, Alpha, Beta);


if MachineMove(N) then {program's move}

begin

BestScore := Max(V, BestScore);

Alpha := BestScore;

if Alpha >= Beta then

begin

BestScore := Beta;

I := MaxNum; {prune remaining S successors}

end

end

else

begin

BestScore := Min(V, BestScore);

Beta := BestScore;

if Alpha >= Beta then

begin

BestScore := Alpha;

I := MaxNum; {prune remaining S successors}

end

end;

I := I + 1;

end;

AlphaBeta := BestScore;

end

end; {AlphaBeta}


begin {TestAB}

Randomize;

Init(T);

WriteLn('Value = ', AlphaBeta(Child(Root, 1), NumPly - 1, -MaxInt, MaxInt));

WriteLn('Value = ', AlphaBeta(Child(Root, 2), NumPly - 1, -MaxInt, MaxInt));

end. {TestAB}



#program #Pascal #exitcode #exitcode 201
2013. márc. 21. 18:29
 1/2 anonim ***** válasza:

[link]


Egyébként Step In (F7)-el végig tudsz menni a programon. Hol lép ki?

2013. márc. 21. 18:43
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:
2013. ápr. 17. 15:52

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!