AGB  ·  Datenschutz  ·  Impressum  







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

for schleife in dreierschritten

Ein Thema von gandime · begonnen am 18. Apr 2007 · letzter Beitrag vom 19. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
gandime
(Gast)

n/a Beiträge
 
#1

for schleife in dreierschritten

  Alt 18. Apr 2007, 16:11
hi,
ist es möglich eine for schleife in dreierschritten ablaufen zu lassen sprich:
von 1 auf 4 zu 7 ...

geht das?
wenn ja wie?

mfg
gandime?
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:12
nicht automatisch, musst du selbst berechnen
  Mit Zitat antworten Zitat
Benutzerbild von Schaedel
Schaedel

Registriert seit: 5. Jan 2006
Ort: Saarland
174 Beiträge
 
Delphi 2007 Professional
 
#3

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:13
Ich schlag eine Whileschleife mit Zählvariable vor die du dann in der Schleife selbst erhöhst.

Viele Grüße
Michael S.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#4

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:13
jop danke dann mache ich das halt mit while

trotzdem danke
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:15
Hallo,
so ginge es:
Delphi-Quellcode:
i:=1;
repeat
//Hier kannst du was tun
i:=i+3;
until i>=7;
Oder du verwendest einfach das dreifache von i:
Delphi-Quellcode:
for i:=0 to 3 do
  ShowMessage(InttoStr(i*3+1));
Ausgabe ist:
1, 4, 7, 10
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:30
Zitat von BenjaminH:
Hallo,
so ginge es:
Delphi-Quellcode:
i:=1;
repeat
//Hier kannst du was tun
i:=i+3;
until i>=7;
Du hast aber schon gelesen
Zitat:
...ist es möglich eine for schleife in dreierschritten ablaufen zu lassen...
eine For-Schleife ist Kopfgesteuert
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#7

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:39
Darf ich auch noch was dreckiges, unpraktisches und vor allem fehleranfälliges hinzufügen?

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i: BYTE;

type
  PBYTE = ^BYTE;

begin
for i := 1 to 20 do
  begin
  writeln(i);

  PBYTE(@i)^ := PBYTE(@i)^ + 1
  end;

ReadLn
end.
Man muss übel aufpassen, da ja im Hintergrund immer noch "i" inkrementiert wird!
Aber diese Variante verwendet sowieso keiner (sollte man ja auch nicht!)

Was mich verwundert, wenn man bedenkt, dass die "richtige" Zählvariable einer for-Schleife immer rückwärts gezählt wird, wieso hört diese Schleife (in meinem Beispiel) schon eher auf?
Merkt der Compiler, dass man über Pointer auf i zugreift und optimiert er den dann Code nicht?
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:43
Zitat von SebE:
Man muss übel aufpassen, da ja im Hintergrund immer noch "i" inkrementiert wird!
Aber diese Variante verwendet sowieso keiner (sollte man ja auch nicht!)

Was mich verwundert, wenn man bedenkt, dass die "richtige" Zählvariable einer for-Schleife immer rückwärts gezählt wird, wieso hört diese Schleife (in meinem Beispiel) schon eher auf?
Merkt der Compiler, dass man über Pointer auf i zugreift und optimiert er den dann Code nicht?
Aus diesem Grund sollte man diese Variante auch nicht ständig so rumplaudern ... am Ende machen es viele noch so, obwohl sie eigentlich nicht wiessen was sie machen ... und dann beschweren die sich nur wieder, weil es kracht.

Und es wird nicht immer rückwärtsgezählt.
Und nein, eigentlich sollte er nicht mitbekommen, daß darauf "schreibend" zugegriffen wird, denn dann würde der Compiler meckern.
Aber er weiß daß zumindestens lesend direkt darauf zugegriffen wird und daher optimiert er es nicht in dieser weise, daß rückwärts gezählt werden würde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:44
@SebE: Das liegt daran das I innerhalb der schleife zwar incrementiert wird (bzw. Decrementiert) aber die Schleifensteuerung (Abbruchbedingungen etc.) nicht mehr auf die Variable aufbaut. Es wird ja bei der Forschleife nur einmal die Bis-Bedingung ausgewertet und danach spielt das keine Rolle mehr.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#10

Re: for schleife in dreierschritten

  Alt 18. Apr 2007, 16:58
Ich weiß, dass das hier überhaupt nicht zum Thema passt, aber:

wenn man den Kopf der For-Schleife abändert:

Delphi-Quellcode:
a := 20;

for i := 1 to a do
...
wird tatsächlich 20 mal durchgelaufen -> i ist nicht mehr die "richtige" Zählvariable
i hat zum Schluss den Wert 39 (innerhalb der Schleife)

Bei Konstanten wird also nicht optimiert, bei Variablen aber schon (wo steckt denn da der Sinn?).

Zitat:
Es wird ja bei der Forschleife nur einmal die Bis-Bedingung ausgewertet und danach spielt das keine Rolle mehr.
stimmt -> wenn man a ändert, passiert nichts in Bezug auf die Schleife.
Aber genau deswegen sollte es ja egal sein, ob Konstante oder Variable verwendet wird!?
Sebastian
  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 15:53 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