AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Assignment im For-loop

Ein Thema von clarity · begonnen am 5. Aug 2004 · letzter Beitrag vom 5. Aug 2004
Antwort Antwort
clarity

Registriert seit: 20. Jul 2004
Ort: Radis
15 Beiträge
 
Delphi 6 Personal
 
#1

Problem mit Assignment im For-loop

  Alt 5. Aug 2004, 20:21
Hi Leute,

Also, bin ziemlich neu in delphi und hab ein Problem mit nem loop :
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 j := j+i gibt er mir die fehlermeldung
Zitat:
Assignment to FOR-Loop 'j'
Krieg das einfach nicht hin

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
Alex Mensch
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: Problem mit Assignment im For-loop

  Alt 5. Aug 2004, 20:28
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;"
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Problem mit Assignment im For-loop

  Alt 5. Aug 2004, 20:29
Was für ein Intervall ? Timer ?

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

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Problem mit Assignment im For-loop

  Alt 5. Aug 2004, 20:29
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;
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Problem mit Assignment im For-loop

  Alt 5. Aug 2004, 20:32
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!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6

Re: Problem mit Assignment im For-loop

  Alt 5. Aug 2004, 20:34
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;
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz