Gå til innhold

programmet hopper over kode linje


Anbefalte innlegg

noen som klare å se hvorfor progrmmet hopper over koden : ENDRINGER :=TRUE; jeg har merker den med *

 

procedure behandle113;

var t,r:integer;

ENDRINGER:BOOLEAN;



LABEL GJENTAGELSE;



begin

find('113',ramme);  // leter opp alle  forekomster av 113 og  plaser dem i listbox6

for  t := 0 to listbox6.Items.Count - 1 do

  begin

   st:=listbox6.Items[t];

  r:=rammeliste.Items.IndexOf(st);

  rammeliste.Items.Delete(r);

  end;

GJENTAGELSE:

ENDRINGER:=FALSE;

for  t := 0 to listbox6.Items.Count - 1 do

  begin

for  r:=0 to listbox6.Items.Count - 1 do

   begin

 st:=listbox6.Items[t]; sub11(1);

st:=listbox6.Items[r]; sub11(2);





 if r <> t then begin

if x1=x2 then   begin

if y2 =y1+h1 then  begin

ENDRINGER :=TRUE; * denne blir  ignorert av programmet hvorfor 

// for kontroll   

Memo1.Lines.Add('');

memo1.Lines.Add(sta);

memo1.Lines.Add(stb);





ST:=FORMAT('%D,%D,%D,%D,%D,%S,%D-%D,%D-%D',[X1,Y1,113,B1,H1+H2,V0,0,B1,0,H1+H2]);

memo1.Lines.Add(st);

LISTBOX6.Items.Add(ST);

LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STA));

LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STB));



EXIT;

end;

end;

end;

end;

end;



IF ENDRINGER THEN GOTO GJENTAGELSE;

  end;

 

når en endring er gjort så hoppes det ut av rutinen .

da skal verdien endringer være satt , slik at men gjentar rutinen hvis det er gjort endringer.

hva er det som er feil eller som jeg har oversett ?

Endret av elg-elg123
Lenke til kommentar
Videoannonse
Annonse

Hva skjer med disse linjene i begin-end blokka? Blir de utført? Hvis ikke, så er det fordi at y2 = Y1 + h1 ikke slår til. Prøv å sett en debug break der, og sjekk verdiene av y2, y1 og h1.

 

                     Memo1.Lines.Add ('');
                     Memo1.Lines.Add (sta);
                     Memo1.Lines.Add (stb);
                     st:= Format ('%D,%D,%D,%D,%D,%S,%D-%D,%D-%D', [x1, Y1, 113, B1, h1 + H2, V0, 0, B1, 0, h1 + H2]);
                     Memo1.Lines.Add (st);
                     listbox6.Items.Add (st);
                     listbox6.Items.Delete (listbox6.Items.IndexOf (sta));
                     listbox6.Items.Delete (listbox6.Items.IndexOf (stb));

Lenke til kommentar

det dom skjer:

rutine utføres normalt helt til det punktet der variabelen "endringer" skal settes til true.

den hoppes over og resten av rutine utføres.

 

hele denne rutine blir altså utført en gang det ser det i memo1- feltet

også under debuggingen - linje for linje

 

siden denne variabelen ikke blir satt til true så kan jo heller ikke rutine gjentaes

 

jeg har prøvd å plaser den delen litt lenger ned i koden , men det gjør ingen forskjell

Endret av elg-elg123
Lenke til kommentar

Nå har jeg ikke sett hele programmet ditt. Det kan tenkes at programmet hopper ut av prosedyren før linja

IF ENDRINGER THEN GOTO GJENTAGELSE; ?? Jeg ser du har en Exit der et sted.

 

Nå har jeg ikke sett hele programmet ditt. Det kan tenkes at programmet hopper ut av prosedyren før linja

IF ENDRINGER THEN GOTO GJENTAGELSE; ?? Jeg ser du har en Exit der et sted.

Lenke til kommentar

exit er for å hoppe ut ja , men da skal variabelen endringer være satt til tue

 

problemet er ikke at det hopper ut av prosedyren , men at variabelen "endringer" aldri blir satt til true.

 

linjene nedenfor linjen der variabelen skal settes blir jo utført.

 

jeg forsøke å gjøre det på en annen måte

Lenke til kommentar

tror ikke det.

 

uansett jeg har endret koden til:

procedure behandle113;
var t,r:integer;
ENDRINGER:BOOLEAN;

LABEL GJENTAGELSE;

begin
find('113',ramme);
for  t := 0 to listbox6.Items.Count - 1 do
  begin
st:=listbox6.Items[t];
  r:=rammeliste.Items.IndexOf(st);
  rammeliste.Items.Delete(r);
  end;



GJENTAGELSE:
ENDRINGER:=FALSE;
t:=-1;
repeat
inc(t);
r:=-1;
repeat
inc(r);

 memo1.Lines.Add(format('%d %d',[t,r]));

if r <> listbox6.items.count-1 then begin
if t <> listbox6.items.count-1 then begin

st:=listbox6.Items[t]; sub11(1);
st:=listbox6.Items[r]; sub11(2);
 if r <> t then begin
if x1=x2 then   begin
if y2 =y1+h1 then  begin

ENDRINGER :=TRUE;

Memo1.Lines.Add('');
memo1.Lines.Add(sta);
memo1.Lines.Add(stb);


ST:=FORMAT('%D,%D,%D,%D,%D,%S,%D-%D,%D-%D',[X1,Y1,113,B1,H1+H2,V0,0,B1,0,H1+H2]);
memo1.Lines.Add(st);
LISTBOX6.Items.Add(ST);
LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STA));
LISTBOX6.ItemS.Delete(LISTBOX6.Items.IndexOf(STB));

end;
end;
end;
end;
end;


until r = listbox6.Items.Count-1;
until t = listbox6.Items.Count-1;

IF ENDRINGER THEN GOTO GJENTAGELSE;
  end;

 

og det virker som det skal

 

og alle memoene skal vekk. jeg har bera brukt dem som kontroll

Endret av elg-elg123
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...