Avatar billede hclarsen Nybegynder
14. april 2006 - 16:04 Der er 6 kommentarer og
1 løsning

Kodespørgsmål igen

I følgende kode, vil det så sige, at hvis der ikke er tre ens i nogle af tabellerne, så bliver iScore lig 11? Og hvilken værdi antager result alt efter, hvilken række/linie der er tre ens i?

function vundetellerej(iPos: 3x3): integer; //3x3 er en matrix
var
iScore : Integer;
i : Integer;
j : Integer;
begin
Result := -1;

//in rows?
iScore := 0;
for i := 1 to 3 do
begin
  iScore := 0;
  Inc(Result);
  for j := 1 To 3 do Inc(iScore, iPos[i,j]);
  if iScore = 3 Then Exit
end;//for i

//top-left bottom-right diagonal?
iScore := 0;
Inc(Result);
for i := 1 to 3 do Inc(iScore, iPos[i,i]);
if iScore = 3 then Exit;

//top-right bottom-left diagonal?
iScore := 0;
Inc(Result);
for i := 1 to 3 do Inc(iScore, iPos[i,4-i]);
if iScore = 3 then Exit;

//columns?
for i := 1 to 3 do
begin
  iScore := 0;
  Inc(Result);
  for j := 1 to 3 do Inc(iScore, iPos[j,i]);
  if iScore = 3 then Exit;
end;//for i

Result := -1;
end;
Avatar billede nca Juniormester
14. april 2006 - 19:38 #1
Koden gennemgår arrayet vandret, diagonal fra venstre mod højre, diagonalt fra højre mod venstre og til sidst lodret.
Finder den 3 1-taller bliver iScore=3 og funktionen forlades med værdien 0
Hvis den når hele vejen igennem uden at finde 3 1-taller forlades funktionen med værdien -1
I koden kan du altså finde ud af om der er 3 på stribe ved at se på værdien af funktionen VundetEllerEj. Er værdien 0 er der 3 på stribe. Er værdien -1 er der ikke 3 på stribe.
Avatar billede hclarsen Nybegynder
14. april 2006 - 19:41 #2
"bliver iScore=3 og funktionen forlades med værdien 0": funktionen forlades da med værdien 2?

Hvis der overhovedet ikke er tre på stribe, får funktionen så ikke værdien 11? Den forøger jo stadigvæk result, skønt der ikke er gevinst
Avatar billede nca Juniormester
14. april 2006 - 19:58 #3
Du har lidt ret.
Finder den 3 på stribe
-vandret er funktionen 0,1 eller 2 alt efter hvilken række der er 3 på stribe
-diagonalt fra venstre er funktionen 4
-diagonal fra højre er funktionen 5
-lodret er funktionen 6,7 eller 8
Hvis der ikke findes 3 på stribe sættes værdien til -1 i næstsidste linie i funktionen
Avatar billede hclarsen Nybegynder
14. april 2006 - 20:22 #4
Jeg kan se at result bliver -1,0,1 eller 2, men hvordan får du, at funktionen kan antage værdier 0..8?
Avatar billede hclarsen Nybegynder
14. april 2006 - 20:39 #5
jeg er med nu - læg gerne et svar, Nca!
Avatar billede nca Juniormester
14. april 2006 - 21:36 #6
Det kommer her ;-)
Avatar billede nca Juniormester
14. april 2006 - 23:02 #7
Tak for pointene.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester