Frage zur for-schleife

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Frage zur for-schleife

Beitrag von niederrheiner »

Hallo an Alle,

kann mir jemand die unterschiedliche Ausgabe der beiden Codeschnipsel erklären?

Code: Alles auswählen

max := 4;
   for j := 0 to max  do    begin
 showmessage('1: j = ' + inttostr(j));
     for k1 := 0 to 9 do begin
          zeile[k1] := '0';
     end ;
 showmessage('2: j = ' + inttostr(j));
 end;

showmessage 1: bringt j = 0
showmessage 2: bringt J = 137108028 die äußere Schleife wird nach dem ersten Durchlauf verlassen


Code: Alles auswählen

max := 4;
   for j := 0 to max  do    begin
 showmessage('1: j = ' + inttostr(j));
 //    for k1 := 0 to 9 do   begin
 //         zeile[k1] := '0';
//     end ;
 showmessage('2: j = ' + inttostr(j));
 
   end;

showmessage 1: bringt j = 0
showmessage 2: bringt J = 0 und die äußere Schleife wird auch korrekt durchlaufen


Hat jemand dafür eine Erklärung?

MfG
Günter

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Frage zur for-schleife

Beitrag von Hitman »

Ist "zeile" denn korrekt deklariert (array[0..9]) bzw. initialisiert (SetLength(zeile, 10))?

niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Re: Frage zur for-schleife

Beitrag von niederrheiner »

das Array habe ich folgendermaßen deklariert

Code: Alles auswählen

Type
sr = array[1..8] of string;   
.
.
.
procedure ...
var
       zeile              :sr;


Habe gerade selbst den Fehler gefunden, die Länge muß 1..9 sein und nicht 1..8

Danke für Deine Hilfe

MfG
Günter

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Frage zur for-schleife

Beitrag von marcov »

Eine schleife Variable ist undefiniert wenn sie in eine FOR genutzt ist.

Also J drucken nach ein for J.... ist immer falsch

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Frage zur for-schleife

Beitrag von Hitman »

marcov hat geschrieben:Eine schleife Variable ist undefiniert wenn sie in eine FOR genutzt ist.

Also J drucken nach ein for J.... ist immer falsch

Das J wurde innerhalb der Schleife ausgelesen. Das Problem war schon (wie ichs mir dachte) ein falscher Zugriff auf das Array (über die Grenzen hinaus).

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Frage zur for-schleife

Beitrag von Teekeks »

Entweder muss das dann so heißen:

Code: Alles auswählen

for k1 := 1 to 9 do begin

oder dein array muss so aussehen:

Code: Alles auswählen

sr = array[0..9] of string;

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Frage zur for-schleife

Beitrag von lrlr »

nächstes mal "range check" einschalten! hätte den fehler angezeigt...

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Frage zur for-schleife

Beitrag von marcov »

Hitman hat geschrieben:
marcov hat geschrieben:Eine schleife Variable ist undefiniert wenn sie in eine FOR genutzt ist.

Also J drucken nach ein for J.... ist immer falsch

Das J wurde innerhalb der Schleife ausgelesen. Das Problem war schon (wie ichs mir dachte) ein falscher Zugriff auf das Array (über die Grenzen hinaus).


Mein Fehler ja.

Antworten