![]() |
Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen Leuts,
ich hab hier ein Problem das ich absolut nicht verstehe. Habe die Bereichsüberprüfung ebenfalls im Compiler angemacht, aber selbst dann mekert er nicht sondern erzeugt einfach diesen Blödsinn. Was er macht .. ich habe folgenden Code :
Delphi-Quellcode:
Wie man sieht habe ich j mittlerweile auf feste grenzen gesetzt, aber selbst dann läuft j laut debugger von 5 .. 0 Runter. Klar das dann Blödsinn rauskommt. und meine ganze Programmlogic beim Teufel ist.
For j := 0 To 4 {high(arr)} Do Begin
If Valid[j, length(arr[0]) - 3] = 2 Then Begin c := false; break; End; // Check ob wirs geschafft haben.. // Was soll der Scheis die Addressierung in Arr geht 0 // If arr[length(arr[0]) - 3, j] <> '0' Then d := false; If arr[j, stringlength - 2] <> '0' Then d := false; Wers nicht glaubt sieht sich den Screenshot an. |
Re: Schleife Zählt Falsch, versteht einer warum ?
Wie sind denn j, Valid und arr deklariert?
|
Re: Schleife Zählt Falsch, versteht einer warum ?
Ohne mir weitere Gedanken zu machen, oder mir Deinen Code großartig angesehen zu haben ->
![]() |
Re: Schleife Zählt Falsch, versteht einer warum ?
Delphi-Quellcode:
als Lokale Variable
Var
j: Integer; der Rest Global
Delphi-Quellcode:
Der Irrwitz ist das wenn ich
Const
StringLength = 9; arr: Array[0..4, 1..9] Of char = ( '12531 1 1', '34109 1 1', '9-342 2 2', '39458 2 2', '51545 2 2' ); Var valid: Array[0..high(arr), 1..6] Of integer; tmpres: String[5];
Delphi-Quellcode:
kommt die AV nicht.if ( i < 0) or ( i > 4 ) then raise exception.create( 'fehler'); Wenn ich aber ein d := False einbaue dann stimmts wieder
Delphi-Quellcode:
@worker
// 1. Check ob irgend ein Rotes Feld ist, wenn ja abbruch
For j := 0 To high(arr) Do Begin If Valid[j, length(arr[0]) - 3] = 2 Then Begin c := false; d := false; // <-- Das eingefügt und es stimmt wieder break; End; // Check ob wirs geschafft haben.. If arr[j, stringlength - 2] <> '0' Then d := false; End; ja alle schleifen laufen Rückwärts wenn der Kompiler merkt das die Laufrichtung egal ist. das macht er weil er sie damit dann schneller laufen lassen kann. Das ansich stört auch nicht. Nur eben das er bei 5 begint. |
Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]
Hallo,
auf Schleifenvariablen sollte man nie ausserhalb der Schleife zugreifen. Der Compiler sollte dich eigentlich warnen. Lösung: Benutze eine zusätzliche Variable, die du hochzählst und nach der Schleife prüfst. Heiko |
Re: Schleife Zählt Falsch, versteht einer warum ?
Um die Frage zu beantworten, eine FOR-Schleife funktioniert soweit ich weis so:
sie zählt die Variable um eins hoch, und prüft ob sie noch in die Bedingung passt(hier:zwischen 0 und 4) Wenn ja, springt sie in den Code der For-Schleife rein, wenn nicht(zb. > 4) dann ist die For-Schleife zuende, die Variable hat dann aber auf jedenfall einen Wert der nicht im Bereich zwischen 0 und 4 liegt. Sprich: Deine Schleife zählt von 0 hoch, wenn die Variable den Wert 5 hat springt die raus und hat deswegen nach der Schleife auch den Wert 5 |
Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]
Hallo,
Falls die Schleifen-Variable innerhalb der Schleife nicht benötigt wird, oder die Reihenfolge egal ist, wird runtergezählt. Die Variable kommt dazu in ax/eax. Per jnz (jump not zero) wird geprüft, ob die Variable (genauer das Registerx) nicht schon 0 ist, wenn nicht springt er wieder an den Scheifenanfang. Das jnz ist schneller als ein cmp ax, 5. Heiko |
Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]
@hoika
Zitat:
|
Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]
Hallo,
ui, stimmt ;) übersehen. Trotzdem, probier mal eine zusätzlixhe Variable. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 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