De digitale vraagbaak voor het wiskundeonderwijs

home |  vandaag |  gisteren |  bijzonder |  prikbord |  gastenboek |  wie is wie? |  contact

HOME

samengevat
vragen bekijken
een vraag stellen
hulpjes
zoeken
FAQ's
links
twitter
boeken
help

inloggen

colofon

  \require{AMSmath} Printen

Algoritme om de schuifpuzzel op te lossen(in Turbo Pascal)

Een algoritme om de schuifpuzzel op te lossen in Turbo Pascal.

Dieric
Student Hoger Onderwijs BelgiŽ - woensdag 20 mei 2009

Antwoord

Dat kan met behulp van recursie, als volgt: (0 stelt het lege vakje voor)

program schuifpuzzel;
type vierkant=array[0..2,0..2] of 0..8;
var a:vierkant; klaar:boolean;
procedure schud(var a:vierkant);
var i,j:0..2;
begin
writeln('Geef aan elk van de negen matrixelementen');
writeln('een verschillende waarde uit 0..8');
for i:=0 to 2 do for j:=0 to 2 do readln(a[i,j])
end{schud};
procedure schuif(var a:vierkant);
var i,j:0..2; foutontdekt,zet:boolean; r:real;
procedure schrijf(var a:vierkant);
var i,j:0..2;
begin
writeln;
for i:=0 to 2 do
begin writeln; for j:=0 to 2 do write(a[i,j]:2) end
end{schrijf};
begin
schrijf(a); readln;
foutontdekt:=false;
for i:=0 to 2 do for j:=0 to 2 do
if a[i,j]3*i+j then foutontdekt:=true;
if not foutontdekt then klaar:=true else
for i:=0 to 2 do for j:=0 to 2 do
if a[i,j]=0 then
begin
r:=random; zet:=false;
if r=0.25 then
if i0 then
begin zet:=true; a[i,j]:=a[i-1,j]; a[i-1,j]:=0; schuif(a) end;
if ((r0.25) and (r=0.5)) then
if j0 then
begin zet:=true; a[i,j]:=a[i,j-1]; a[i,j-1]:=0; schuif(a) end;
if ((r0.5) and (r=0.75)) then
if i2 then
begin zet:=true; a[i,j]:=a[i+1,j]; a[i+1,j]:=0; schuif(a) end;
if r0.75 then
if j2 then
begin zet:=true; a[i,j]:=a[i,j+1]; a[i,j+1]:=0; schuif(a) end;
if not zet then schuif(a)
end
end{schuif};
begin
klaar:=false; schud(a); schuif(a)
end.

(Als u nu geduldig op enter blijven drukken, zullen de matrixelementen op een gegeven moment toevallig in de natuurlijke volgorde staan, en dan is de puzzel opgelost.)

Wie is wie?
Vragen naar aanleiding van dit antwoord? Klik rechts..!
woensdag 27 mei 2009



klein |  normaal |  groot

home |  vandaag |  bijzonder |  twitter |  gastenboek |  wie is wie? |  colofon

©2001-2021 WisFaq - versie 3