AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi repeat-until ersetzten durch if/for/while
Thema durchsuchen
Ansicht
Themen-Optionen

repeat-until ersetzten durch if/for/while

Ein Thema von Thorben86 · begonnen am 16. Apr 2004 · letzter Beitrag vom 17. Apr 2004
Antwort Antwort
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

repeat-until ersetzten durch if/for/while

  Alt 16. Apr 2004, 19:16
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.



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);
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#2

Re: repeat-until ersetzten durch if/for/while

  Alt 16. Apr 2004, 19:26
vorschlag:

Delphi-Quellcode:
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;
was hab ichn gemacht?
or durch and und
= durch <> in den bedingungen ersetzt

wenn das min. 1mal gemacht werden soll, schreibs einfach nochmal davor
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: repeat-until ersetzten durch if/for/while

  Alt 16. Apr 2004, 19:34
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:
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;
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.


[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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#4

Re: repeat-until ersetzten durch if/for/while

  Alt 16. Apr 2004, 19:35
Thx, das müsste gehen
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#5

Re: repeat-until ersetzten durch if/for/while

  Alt 16. Apr 2004, 19:36
umms etwas allgemeiner zu beschreiben:
Delphi-Quellcode:
repeat
  Anweisung;
until Bedingung;
enspricht
Delphi-Quellcode:
Anweisung
while not Bedingung do begin
  Anweisung;
end;
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: repeat-until ersetzten durch if/for/while

  Alt 16. Apr 2004, 19:40
Ach ja, wenn es so anfängt

Delphi-Quellcode:
while (r<>0) and (g<>0) and (b<>0)
do begin
...
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: repeat-until ersetzten durch if/for/while

  Alt 17. Apr 2004, 01:28
Zitat von Thorben86:
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);
der Code kommt mir irgendwie bekannt vor...



@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!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: repeat-until ersetzten durch if/for/while

  Alt 17. Apr 2004, 02:27
Delphi-Quellcode:
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;
Nicht schön aber ersetzt ohne kompliziertes Nachdenken jede repeat until Schleife

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: repeat-until ersetzten durch if/for/while

  Alt 17. Apr 2004, 06:14
Zitat von dizzy:
@himitsu: r, g und b sind sicherlich mit 0 initialisiert
genau da ist ja das Problem bei der While-Schleife
Delphi-Quellcode:
while (r<>0) and (g<>0) and (b<>0)
do begin
...
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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:11 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