Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Assignment im For-loop (https://www.delphipraxis.net/27206-problem-mit-assignment-im-loop.html)

clarity 5. Aug 2004 20:21


Problem mit Assignment im For-loop
 
Hi Leute,

Also, bin ziemlich neu in delphi und hab ein Problem mit nem loop :oops: :
Zum Problem:
ich hab nen array mit n werten , die entweder '0' oder '1' sind. will jetzt die Intervalle zwischen den einzelnen Einsen ermitteln hab mir das so gedacht:

Delphi-Quellcode:
 
for j:= 0 to length(vza) do begin
if vza[j] = 1 then begin
intervallanf := j ;
for i:= j to length(vza) do begin
if vza[j+i]= 1 then intervallend := j+i;
end;
j := j+i
end;
wie die letzte Zeile zeigt, will ich dann vom jeweiligen intervallende weiterzählen, um das nächste Intervall zu ermitteln.

bei
Delphi-Quellcode:
j := j+i
gibt er mir die fehlermeldung
Zitat:

Assignment to FOR-Loop 'j'
Krieg das einfach nicht hin :wall:

ach so.. andere Frage.. würde die schleife

Delphi-Quellcode:
 if vza[j] = 1 then begin
intervallanf := j ;
for i:= j to length(vza) do begin
if vza[j+i]= 1 then intervallend := j+i;
Bei der ersten eins enden oder des Intervallend erst bei der letzten Eins gesetzt werden ??

THX

nailor 5. Aug 2004 20:28

Re: Problem mit Assignment im For-loop
 
der erste code klappt nicht, weil man eine FOR-Variable nicht schreiben darf. das zweite klappt prinizpiell, allerdings musst du da:

Delphi-Quellcode:
for i:= j to length(vza) do begin
if vza[j+i]= 1 [...]
noch was ändern, da "vza[j+i]" ausßerhalb des arrays liegen kann, und du eine AcessViolation erhältst. zusätzlich musst du nachdem du intervallend gesetzt hast die schleife noch verlassen, damit nicht weitergesucht wird. stichwort: "break;"

Hansa 5. Aug 2004 20:29

Re: Problem mit Assignment im For-loop
 
Was für ein Intervall ? Timer ? :gruebel:

Der Hauptfehler ist aber, daß j als Schleifenzähler doppelt benutzt wird. Nehme doch einfach j1 und j2 in der Deklaration.

axelf98 5. Aug 2004 20:29

Re: Problem mit Assignment im For-loop
 
Man darf FOR-Schleifen-Variablen nicht in der Schleife verändern.

Mach es mit einer While-Schleife:

Delphi-Quellcode:
 var j: integer;
begin

 While j <= length(vza) do
 begin
  if XXXX then
  inc(j); // -> j := j + 1 als deine Veränderung der Zählvariable
  inc(j); // -> j := j + 1 als Zählung
 end;

mischerr 5. Aug 2004 20:32

Re: Problem mit Assignment im For-loop
 
Hallo

also wenn ich das richtig sehen, dann kannst du bei a.) die Schleifenvariable nicht manuell setzen. Versuche hier repeat/until oder while! Zu b.) gibt es kein Abbruchkriterium für die Schleife. Diese würde also wohl bis zum letzten Element laufen. Allerdings gibt es da ein Problem:
Code:
for i:= j to length(vza) do begin
if vza[j+i]= 1 then intervallend := j+i;
end;
vza[j+i] kann die Grenzen des Arrays sprengen und überspringt Zeichen. Die for Schleife sollte besser lauten:
Code:
for i:= 1 to length(vza)-j do begin
Grüsse!

nailor 5. Aug 2004 20:34

Re: Problem mit Assignment im For-loop
 
Delphi-Quellcode:
if vza[j] = 1 then
  begin
    intervallanf := j;

    for i:= j to length(vza) - j do
      begin
        if vza[j+i] = 1 then
          begin
            intervallend := j+i;
            break;
          end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz