![]() |
repeat-until ersetzten durch if/for/while
Hi, ich hab ein Probelm, und zwar hab ich ne repeat until schleife (s.u.) darf die jedoch nicht benutzten, da wir die in der schule noch nicht hatten und keine sachen mit reinbringen dürfen, die wir noch nicht hatten, da die schwächeren schüler sonst angeblich nicht mitkommen würden.(und das nach über nem 1/2 schuljahr delphi, wobei der andere kurs das chon lange hat.) wir dürfen eigentlich nur if-anweisungen, und for/while schleifen benutzen.
Mein Problem ist, dass mir gerade nicht eifällt, wie ich das mit den 3 "schleifen" hinkrieg. In nen timer will ich es nicht baun, weil ich nach der einen schleife das ganz nochmal mit anderen labels machen will und dann bräuchte ich verdammt viele Timer. :dp:
Delphi-Quellcode:
repeat
c := ColorToRGB(l_rahmenprogramm.Font.Color); if GetRValue(c) > 0 then r := GetRValue(c)-1; if GetGValue(c) > 0 then g := GetGValue(c)-1; if GetBValue(c) > 0 then b := GetBValue(c)-1; l_rahmenprogramm.Font.Color:=rgb(r,b,g); l_rahmenprogramm.Refresh; sleep(1); until (r=0) or (g=0) or (b=0); |
Re: repeat-until ersetzten durch if/for/while
vorschlag:
Delphi-Quellcode:
was hab ichn gemacht?
while (r<>0) and (g<>0) and (b<>0)
do begin c := ColorToRGB(l_rahmenprogramm.Font.Color); if GetRValue(c) > 0 then r := GetRValue(c)-1; if GetGValue(c) > 0 then g := GetGValue(c)-1; if GetBValue(c) > 0 then b := GetBValue(c)-1; l_rahmenprogramm.Font.Color:=rgb(r,b,g); l_rahmenprogramm.Refresh; sleep(1); end; or durch and und = durch <> in den bedingungen ersetzt wenn das min. 1mal gemacht werden soll, schreibs einfach nochmal davor :-D |
Re: repeat-until ersetzten durch if/for/while
such dir was aus - einmal mit if und das andere mit max:
Delphi-Quellcode:
c := ColorToRGB(l_rahmenprogramm.Font.Color);
while c and $ffffff > 0 do begin c := rgb(Max(GetRValue(c) - 1, 0), Max(GetGValue(c) - 1, 0), Max(GetBValue(c) - 1, 0)); l_rahmenprogramm.Font.Color := c; l_rahmenprogramm.Font.Refresh; sleep(1); end;
Delphi-Quellcode:
PS: bei deiner Schleife war auch noch ein großer Fehler - wenn eine Farbe 0 war, so wurde der entsprechenden Variable (r, g, oder b) nichts zugewiesen.
c := ColorToRGB(l_rahmenprogramm.Font.Color);
while c and $ffffff > 0 do begin if GetRValue(c) > 0 then r := GetRValue(c) - 1 else r := 0; if GetGValue(c) > 0 then g := GetGValue(c) - 1 else g := 0; if GetBValue(c) > 0 then b := GetBValue(c) - 1 else b := 0; c := rgb(r, b, g); l_rahmenprogramm.Font.Color := c; l_rahmenprogramm.Font.Refresh; sleep(1); end; [ADD] glkbkk's Code stimmt genau mit deinem Beispiel überein, nur eben mit while und nicht mit repeat, aber dor ist auch der Fehler mit den nicht zugewiesenen Variablen drin und bei mir geht es komplett runter auf 0. Wenn z.B. im Extremfall die Schriftfarbe = Rot ist, so wird bei euren Schleifen nicht viel passeren ;) |
Re: repeat-until ersetzten durch if/for/while
Thx, das müsste gehen
|
Re: repeat-until ersetzten durch if/for/while
umms etwas allgemeiner zu beschreiben:
Delphi-Quellcode:
enspricht
repeat
Anweisung; until Bedingung;
Delphi-Quellcode:
Anweisung
while not Bedingung do begin Anweisung; end; |
Re: repeat-until ersetzten durch if/for/while
Ach ja, wenn es so anfängt
Delphi-Quellcode:
dann ist auch noch ein nette Fehler entstanden, den die Variablen, werden erst innerhalb der Schleife gesetzt (wenn überhaupt ;) ), und sind demnach vorher noch nicht definiert.
while (r<>0) and (g<>0) and (b<>0)
do begin ... |
Re: repeat-until ersetzten durch if/for/while
Zitat:
:zwinker: @himitsu: r, g und b sind sicherlich mit 0 initialisiert ;) gruss, dizzy \edit: btw: das or ist in der Bedingung auch beim repeat..until falsch. Du willst ja sicherlich ein Label nach schwarz faden, gell!? Dann müssen erst ALLE Farbanteile 0 werden. Dann erst ist's wirklich schwarz. Also statt or auch hier and nehmen! |
Re: repeat-until ersetzten durch if/for/while
Delphi-Quellcode:
Nicht schön aber ersetzt ohne kompliziertes Nachdenken jede repeat until Schleife ;)
while true do
begin if r and g and b = 0 then break; end; Loop := True; while Loop do begin Loop := r and g and b <> 0; end; Gruß Hagen |
Re: repeat-until ersetzten durch if/for/while
Zitat:
Delphi-Quellcode:
denn wenn die Variablen nul sind, was ja rein zufällig auch der Abbruchbedingung entspricht, dann wird nämlich die Schleiche nie durchaufen, da While ja vor'm Durchlauf und nicht danach auswertet.
while (r<>0) and (g<>0) and (b<>0)
do begin ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 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