Avatar billede Kasti Nybegynder
10. marts 2009 - 19:53 Der er 3 kommentarer

Problemer med if-sætning

JEg er i gang med et lille program i Delphi :D

Jeg har en buttonclick procedure som volder mig lidt problemer.

procedure TForm1.Button6Click(Sender: TObject);
var
i: Integer;
tilfældig: Integer;
Kort1: Integer;
Kort2: Integer;

begin
    Kort1 := 0;
    Kort2 := 0;
  for i := 0 to 23 do
  begin
    Randomize;
    tilfældig := Random(40);

    if Odd(tilfældig) then
    begin
      if not Kort1 = 12 then
        begin
          Bunke1[Kort1]:= Biler[i];
          Kort1:= Kort1+1;
          Showmessage('Bunke 11'+','+IntToStr(tilfældig)+','+IntToStr(Kort1))
        end
      else
        begin
          Bunke2[Kort2]:= Biler[i];
          Kort2:= Kort2+1;
          Showmessage('Bunke 22'+','+IntToStr(tilfældig)+','+IntToStr(Kort2))
        end;
    end
    else
    begin
      if not Kort2 = 12 then
        begin
          Bunke2[Kort2]:= Biler[i];
          Kort2:= Kort2+1;
          Showmessage('Bunke 21'+','+IntToStr(tilfældig)+','+IntToStr(Kort2))
        end
      else
        begin
          Bunke1[Kort1]:= Biler[i];
          Kort1:= Kort1+1;
          Showmessage('Bunke 12'+','+IntToStr(tilfældig)+','+IntToStr(Kort1))
        end;
    end;

  end;

Showmessage(IntToStr(Kort1)+','+IntToStr(Kort2));

end;


Problemet er at når jeg kører proceduren hopper den over "then"-statementet. Jeg får derfor kun udskrevet at den smider kort i  "Bunke 22" og "Bunke 12" men aldrig "11" eller "21".

Jeg er ikke så ferm til Delphi, så det ser måske meget simpelt ud for nogen af jer. Men hvis en af jer kunne hjælpe, ville det være dejligt :D
Avatar billede Kasti Nybegynder
10. marts 2009 - 20:06 #1
Har løst det :D
Avatar billede borrisholt Novice
11. marts 2009 - 14:05 #2
Det er forkert at kalde Randomize hver gang. Den skal kaldes EEN gang og netop en gang per program session. Sæt den i form create fx.
Avatar billede ibhe Novice
27. marts 2009 - 17:01 #3
Øøøh der er lige en detalje som jeg synes skal nævnes. Du skriver "not kort12=12", mener du da (not kort12)=12 eller not (kort12=12).

Der findes noget som hedder operator precedens, altså i hvilken rækkefølge noget udføres. f.eks. 1+2*3 = 7 og ikke 9 som mange ville tro, det hænger sammen med operator presedens, nemlig at * udføres før +.

I pascal udføres "not" før "=", hvilket betyder at din if sætning er

if (not kort12) = 12 then

Generelt skal man sætte paranteser hvis man ikke er helt stærk i det der med precedens, ellers går det galt
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

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