AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]

Ein Thema von Corpsman · begonnen am 15. Jan 2009 · letzter Beitrag vom 15. Jan 2009
Antwort Antwort
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#1

Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]

  Alt 15. Jan 2009, 07:22
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:
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] <> '0Then d := false;
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.

Wers nicht glaubt sieht sich den Screenshot an.
Miniaturansicht angehängter Grafiken
fehler_393.png  
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Schleife Zählt Falsch, versteht einer warum ?

  Alt 15. Jan 2009, 07:29
Wie sind denn j, Valid und arr deklariert?
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#3

Re: Schleife Zählt Falsch, versteht einer warum ?

  Alt 15. Jan 2009, 08:05
Ohne mir weitere Gedanken zu machen, oder mir Deinen Code großartig angesehen zu haben -> vielleicht hilft's
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Schleife Zählt Falsch, versteht einer warum ?

  Alt 15. Jan 2009, 08:10
Delphi-Quellcode:
Var
 j: Integer;
als Lokale Variable

der Rest Global
Delphi-Quellcode:
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];
Der Irrwitz ist das wenn ich
Delphi-Quellcode:

if ( i < 0) or ( i > 4 ) then raise exception.create( 'fehler');
kommt die AV nicht.

Wenn ich aber ein d := False einbaue dann stimmts wieder

Delphi-Quellcode:
        // 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] <> '0Then d := false;
        End;
@worker

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.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]

  Alt 15. Jan 2009, 08:14
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
Heiko
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Schleife Zählt Falsch, versteht einer warum ?

  Alt 15. Jan 2009, 08:14
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
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]

  Alt 15. Jan 2009, 08:18
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]

  Alt 15. Jan 2009, 08:27
@hoika

Zitat:
Hallo,

auf Schleifenvariablen sollte man nie ausserhalb der Schleife zugreifen.
Der Compiler sollte dich eigentlich warnen.
das mache ich doch gar nicht. Denn wenn würde es der Compiler tatsächlich anprangern.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Schleife Zählt Falsch, versteht einer warum ? [ gelöst ]

  Alt 15. Jan 2009, 08:35
Hallo,

ui,

stimmt übersehen.

Trotzdem,
probier mal eine zusätzlixhe Variable.



Heiko
Heiko
  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 20:44 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