Avatar billede Slettet bruger
28. september 2005 - 08:21 Der er 7 kommentarer og
1 løsning

Overførsel af variabel i for løkke

Hej,

I ensemplet herunder kan kodne godt kompileres uden fejl, men når dne afvikles lukkes vinduet blot med det samme.

    for YAxis := 0 to 6 do
    begin
      if YAxis = 0 then YScan := 0 else YScan := YScan + 1;
   
      for XScan := 0 to 19 do
        begin
        X := YScan * 2;
        end;
    end;

Hvis jeg erstatter
X := YScan * 2; med
X := XScan * 2;
virker koden som den skal.... hvorfor nu det... kan jeg ikke anvende YScan variablen når jeg går ind i en ny for løkke?!

Hvordan skal jeg gøre for at få lov til dette.?
Avatar billede kroning Nybegynder
28. september 2005 - 22:24 #1
Koden giver ingen mening:

for XScan := 0 to 19 do
        begin
        X := YScan * 2;
        end;
    end;

hvorfor ikke bare
X := YScan * 2;
hvorfor skal X sættes 20 gange?
Avatar billede Slettet bruger
29. september 2005 - 08:18 #2
Det var bare et eksempel... koden var skrællet for alt da den gik ned hele tiden... men umiddelbart ser det ud som om at der er problemer med den enhedn koden kommunikere med... men fejlen er dog endnu ikke fundet..... den går ned i samme sekund jeg laver en for-løkke i en for-løkke
Avatar billede kroning Nybegynder
29. september 2005 - 09:07 #3
Koden virker fint her uanset hvad der står i 2. lykke, code optimization fjerner dog 2. lykke hvis ikke X benyttes senere i koden men benyttes X så er der ingen problemer.
Avatar billede hatecaps Nybegynder
29. september 2005 - 09:11 #4
hmm, hvis vi skal finde fejlen i din kode er du nok nødt til at vise os den ;)

den kode du har vist os virker fint (uden at give meninng, men den virker *g*)

enten er du nødt til at poste hele koden her, eller du kan prøve selv at finde fejlen ved at pille sektioner af kode ud af dine løkker indtil det virker. Den seidste sektion du pillede ud før det virker må indeholde fejlen.

ha' det godt
hatecaps
Avatar billede Slettet bruger
29. september 2005 - 13:16 #5
begin

CardInfo := @myCInfo;                  //CardInfo gives the adr where myCInfo
                                        //is.

// scan through all device numbers from 0 to 255
for cardNumber := 0 to 255 do

  begin
    result := SeaIo_OpenDevice(CardNumber,hDevice);
    if (result = 4) then                //4 - invalid name
      showmessage(inttostr(result));

    if (result = 0) then                //0 - No errors

    begin
      SeaIo_GetAdapterInfo(hDevice^, CardInfo);
                                        //hDevice^ - Gives the adr where hDevice is,
                                        //the value has been placed there as a
                                        //return from OpdenDevice. Returns with the
                                        //CardInfo (tagADAPTER_INFO)
      showmessage('Returns: ' + inttostr(result) + #13#10 + 'CardNumber: '
      + IntTOStr(CardNumber) + #13#10 + 'Handler adresse: ' + inttostr(hDevice^)
      + #13#10 + 'Model number: ' + IntToStr(CardInfo^.wCardNumber));
      break;
    end;
  end;


//    for loop := 0 to 6 do              //Scan Y axis in display
      for XScan := 0 to 19 do            //Scan X axis in display
        begin
          case XScan of                  //Letter number in progress
            0..4:  begin
                      LetterCount := 0;
                      TmpLetter[YScan, XScan] := A[YScan, XScan];
                    end;
            5..9:  begin
                      LetterCount := 1;
                      XScanTmp := XScan - (LetterCount * 5);
                      TmpLetter[YScan, XScanTmp]:= B[YScan, XScanTmp];
                    end;
            10..14: begin
                      LetterCount := 2;
                      XScanTmp := XScan - (LetterCount * 5);
                      TmpLetter[YScan, XScanTmp]:= C[YScan, XScanTmp];
                    end;
            15..19: begin
                      LetterCount := 3;
                      XScanTmp := XScan - (LetterCount * 5);
                      TmpLetter[YScan, XScanTmp]:= D[YScan, XScanTmp];
                    end;
          end;

        end;

// SeaIo_CloseDevice(hDevice^);

end;

end.
Avatar billede hatecaps Nybegynder
29. september 2005 - 13:30 #6
ok, vi mangler stadig nogle definitioner på dine variabler. Alt efter hvordan compiler direktiver o.l. er sat, kan fejlen skyldes at du f.eks. har defineret B til at være array[1..7][1..20] of....  så programmet vil prøve at læse/skrive en værdi fra/til B[0,0] !!

Hvis dette ikke er tilfævldet ville jeg prøve at starte med følgende kode:

for YScan := 0 to 6 do
begin
  for XScan := 0 to 19 do
  begin
    showmessage('YScan: '+inttostr(YScan)+'  XScan: '+inttostr(XScan));
  end;
end;

vare for at se at løkkerne kører som de skal. Når det er i orden, prøv så at tilføje mere og mere af koden, og se hvornår fejlen opstår.

Uden al den anden kode (definitioner, units o.s.v) så vi selv kan kører koden, er der svært at sige mere.
Avatar billede Slettet bruger
04. oktober 2005 - 08:45 #7
Lukker spm.

Har ikke løst spørgsmålet.. begyndte forfra og opdelte meget mere i funktioner og fik det derigennem til at kører.

Hvis hatecaps og kroning laver et svar inden fredag så får i points.
Avatar billede Slettet bruger
07. oktober 2005 - 11:11 #8
Lukker spm
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