AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Variablen in einer Schleifen ansprechen?
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen in einer Schleifen ansprechen?

Ein Thema von runningsoft · begonnen am 27. Jul 2011 · letzter Beitrag vom 27. Jul 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#1

Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:04
Hallo,

habe ein Syntaxproblem mit dem Ansprechen von Variablen.

Ich habe folgenden Record definiert:

Code:
TZwischenZeiten = record
      Startnr : integer;
      Disziplin : String[41];
      Charakter : integer;
      ZwischenZeiten : integer;
      MaxZwischenZeiten : integer;
      LaufZeit1 : TTime;
      LaufZeit2 : TTime;
      LaufZeit3 : TTime;
      LaufZeit4 : TTime;
      LaufZeit5 : TTime;
      LaufZeit6 : TTime;
      LaufZeit7 : TTime;
      LaufZeit8 : TTime;
      LaufZeit9 : TTime;
      LaufZeit10 : TTime;
      Laufzeit11 : TTime;
      Uhrzeit : TDateTime;
      Status : String[6];
Um nun die Laufzeiten 1 - 11 zu überprüfen, nutze ich bisher den unschönen Code

Code:
if Laeufer^.Laufzeit1 <> 0 then
        begin
        Laeufer^.LaufZeit1 := NettoZeit;
        Break;
        end;
      if Laeufer^.Laufzeit2 <> 0 then
        begin
        Laeufer^.LaufZeit3 := NettoZeit;
        Break;
        end;
      if Laeufer^.Laufzeit3 <> 0 then
        begin
        Laeufer^.LaufZeit3 := NettoZeit;
        Break;
        end;

      usw. usw.
Kann ich den Code optimieren, in dem ich das ganze in einer Schleife durchlaufe?

Code:
for i := 1 to 11 do
begin
if Laeufer^.Laufzeit[i] <> 0 then     <--- Hier sagt der Compiler "Undefinierte Bezeichner Laufzeit", was ja auch logisch ist, da der Bezeichner ja Laufzeit1, Laufzeit2 usw. heißt
        begin
        Laeufer^.LaufZeit[i] := NettoZeit;
        Break;
        end;
end;
Hab leider noch keine Variante gefunden, im Quelltext Teile der Variablenbezeichnung durch Variablen zu ersetzen.

Vielen Dank für Eure Hilfe

Steffen
Steffen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:06
Hallo,

wenn Du indiziert auf laufzeit zugreifen willst,
solltest Du zumindest die LAufzeit als Array definieren.

Delphi-Quellcode:
TZwischenZeiten = record
      Startnr : integer;
      Disziplin : String[41];
      Charakter : integer;
      ZwischenZeiten : integer;
      MaxZwischenZeiten : integer;
      LaufZeit : Array[1..11] of TTime;
      Uhrzeit : TDateTime;
      Status : String[6];
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:11
@Klaus: 6 setzen und schämen. Arrays doch bitte mit 0 (also [0..10]) anfangen lassen .
Der array verhält sich sonst "anders" als andere arrays, wie man sie sonst so in Delphi findet und in einer ForSchleife nutzt.

edit @Runningsoft: heißt natürlich dass deine schleife auch von 0-10 gehen muss .


MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:21
Danke für den Tipp mit dem Array, ich glaub, das ist die Lösung.

Grüße

Steffen
Steffen
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#5

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:23
Zitat:
Der array verhält sich sonst "anders" als andere arrays, wie man sie sonst so in Delphi findet und in einer ForSchleife nutzt.
Hi, nur mal aus Interesse, wie "anders"?
Ich lasse meine Arrays zwar auch immer bei 0 starten, aber mein Info-Lehrer von früher hat den anderen Schülern immer gesagt, man sollte das besser bei 1 starten lassen, dann wäre das Zählen auch einfacher (...). Auf meinen Einwand, es sei "korrekter" es bei 0 starten zu lassen meinte er das mache intern keinen Unterschied.
Also ich könnte mir vorstellen, dass es einen Unterschied macht. Nur welchen?^^
Philipp F.
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:25
Code:
for i := 1 to 11 do
begin
if Laeufer^.Laufzeit[i] <> 0 then     <--- Hier sagt der Compiler "Undefinierte Bezeichner Laufzeit", was ja auch logisch ist, da der Bezeichner ja Laufzeit1, Laufzeit2 usw. heißt
        begin
        Laeufer^.LaufZeit[i] := NettoZeit;
        Break;
        end;
end;
Wenn du ein Array verwendest, solltest du auch entsprechend die Arraygrenzen abfragen:

Delphi-Quellcode:
for i := Low(Laeufer^.Laufzeit) to High(Laeufer^.Laufzeit) do
begin
  {...}
end;
Dann ists auch egal, ob das Array bei 0 oder 1 anfängt
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:32
@schlecki

Danke für den Tipp. Wenn ich das richtig sehe, kann ich so problemlos mein Array erweitern und muss dann hinterher nicht an tausend Stellen im Programm die Schleifen auf die neue Arraygröße umbauen.
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#8

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:33
@Flips: nein intern macht es keinen unterschied, es irritiert allerdings den programmierer. Außer dem Wochentag array in Delphi beginnt alles bei 0. Eine ForSchleife kann dan schnell so "falsch" umgesetzt werden.

for i := 0 to Max - 1 do Hat mir bei dem wochentag array schön ne AV geschmissen weil der bei 1 anfängt.
Mit Falsch meinte ich halt nur den von dir dem Lehrer gegenüber genannten Korrekten anwendungsfall.


MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:34
Solange man for idx := Low(MyArr) to High(MyArr) do verwendet, dann kann man verwenden, was man will.

Klar ist es besser bei 0 zu beginnen, wärend ich gewisse Char-Arrays auch gerne mal mit 1 beginne, wegen der Analogie zum String.
Und sonst nutze ich auch manchmal andere Startindize, wenn dieses dann eine bessere "logische" Zuweisung gewährleistet.



PS: Nicht vergessen, aber der ShortString, also auch der Typ String[x], ist und bleibt ANSI.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Variablen in einer Schleifen ansprechen?

  Alt 27. Jul 2011, 12:49
@Flips: nein intern macht es keinen unterschied, es irritiert allerdings den programmierer. Außer dem Wochentag array in Delphi beginnt alles bei 0. Eine ForSchleife kann dan schnell so "falsch" umgesetzt werden.
Der Programmierer sollte eigentlich wissen was er treibt!
und "alles" ist ja auch ein wenig kurz gegriffen (shortstring)
Einer der großen Vorteile von Delphi ist ja daß ich problemlos solche Arrays definieren kann
Code:
SecAdress : array [20..125] of ansichar;
Das ist vor allem bei der "Übersetzung" von Fremdstrukturen sinnvoll, oder wie himitsu anmerkte:
wenn dieses dann eine bessere "logische" Zuweisung gewährleistet.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:08 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