Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verschachtelte iflcauses (https://www.delphipraxis.net/30878-verschachtelte-iflcauses.html)

Binary 30. Sep 2004 15:46


Verschachtelte iflcauses
 
Hi @all!

Ich soll in Informatik unter Delphi eine Ampel schreiben, sie soll nur aus ifclausen bestehen, mit der ersten, die pro klick weiter schaltet, von rot auf gelb, auf grün klappt das wunrderbar, bei der zweiten soll die von rot auf rot/gelb dann auf grün, von grün dann auf gelb dann auf rot

das probl. habe ich analysiert, sobald ich zwei felder aktiv habe macht der nix mehr, hier mein code der beim button steht

Delphi-Quellcode:
if s_rot.Brush.Color =clred
     then
     begin
     s_gelb.Brush.Color :=clyellow;
     end
     else
          if s_gelb.brush.color =clyellow
          then
          begin
          s_rot.Brush.Color :=clwhite;
          s_gelb.Brush.Color :=clwhite;
          s_gruen.brush.color :=clgreen;
          end
          else
              if s_gruen.brush.color =clgreen
              then
              begin
              s_gruen.Brush.Color :=clwhite;
              s_gelb.Brush.Color :=clyellow;
              end
              else
              begin
              s_gelb.Brush.color :=clwhite;
              s_rot.brush.color :=clred
              end
was is falsch?

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

gmarts 30. Sep 2004 15:54

Re: Verschachtelte iflcauses
 
Hallo

Schreibe mal anstatt:

Delphi-Quellcode:
If blabla then
begin
  bla bla;
end
else
  if bla bla...
dies:

Delphi-Quellcode:
If blabla then
begin
  bla bla;
end
else
begin
   if bla bla...
end
Dann wirds übersichtlicher....nicht nur für den Compiler. 8)

MfG Gunar

jfheins 30. Sep 2004 15:56

Re: Verschachtelte iflcauses
 
Delphi-Quellcode:
if s_rot.Brush.Color = clred then
begin
  s_gelb.Brush.Color :=clyellow;
end
else
begin
  if s_gelb.brush.color =clyellow then
  begin
    s_rot.Brush.Color :=clwhite;
    s_gelb.Brush.Color :=clwhite;
    s_gruen.brush.color :=clgreen;
  end
  else
  begin
    if s_gruen.brush.color =clgreen then
    begin
      s_gruen.Brush.Color :=clwhite;
      s_gelb.Brush.Color :=clyellow;
    end
    else
    begin
     s_gelb.Brush.color :=clwhite;
     s_rot.brush.color :=clred
    end;
  end;
end;
Ich habe einige begins und ends eingefügt, probier das mal aus

Binary 30. Sep 2004 16:15

Re: Verschachtelte iflcauses
 
danke für eure hilfe aber leider kommt immer noch der gleiche Fehler!

Matze 30. Sep 2004 17:15

Re: Verschachtelte iflcauses
 
:hi: Herzlich willkommen in der DP. :party:

Was kommt denn genau für ein Fehler? Kommt irgendeine Meldung?

Binary 30. Sep 2004 17:35

Re: Verschachtelte iflcauses
 
Danke!
das programm läuft ja, theoretisch is ja nichts falsch, aber leider schaltet die ampel nicht auf grün!

Binary 30. Sep 2004 17:53

Re: Verschachtelte iflcauses
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich lade euch einfach mal alles hoch, ihr könnt es ja dann selbst sehen

gmarts 30. Sep 2004 18:52

Re: Verschachtelte iflcauses
 
Hi Binary!

Machs dir doch nicht so kompliziert :thumb:

Delphi-Quellcode:
procedure Tf_ampel.b_goClick(Sender: TObject);

begin
  {Zustände (Kannste zB. im Tag vom Form abspeichern);
  0 rot
  1 rot/gelb
  2  grün
  3 gelb}

case f_ampel.Tag of
0: begin s_rot.Brush.Color:=clred; s_gelb.Brush.Color :=clwhite; s_gruen.brush.color :=clwhite; end;
1: begin s_rot.Brush.Color:=clred; s_gelb.Brush.Color :=clyellow; s_gruen.brush.color :=clwhite; end;
2: begin s_rot.Brush.Color:=clwhite; s_gelb.Brush.Color :=clwhite; s_gruen.brush.color :=clgreen; end;
3: begin s_rot.Brush.Color:=clwhite; s_gelb.Brush.Color :=clyellow; s_gruen.brush.color :=clwhite; end;
end;

f_ampel.Tag:=f_ampel.Tag+1;
if f_ampel.tag > 3 then f_ampel.Tag:=0;

end;
Gruß GM

P.S.: Bei mir hat dein Code funktioniert...die Ampel sprang auf Grün.... !?!?! :gruebel:


Zitat:

... eine Ampel schreiben, sie soll nur aus ifclausen bestehen, ...
Ooops, sorry grad erst gesehen. :oops:

jfheins 30. Sep 2004 19:12

Re: Verschachtelte iflcauses
 
Fehler gefunden !!!

Delphi-Quellcode:
if s_rot.Brush.Color = clred then // trifft auch bei rot/gelb zu !!!!!
begin
  s_gelb.Brush.Color :=clyellow;
end
else // trifft nur bei gelb zu, bei rot/gelb wird's übersprungen !!!
begin
  if s_gelb.brush.color =clyellow then
  begin
    s_rot.Brush.Color :=clwhite;
    s_gelb.Brush.Color :=clwhite;
    s_gruen.brush.color :=clgreen;
  end
  else
  begin
    if s_gruen.brush.color =clgreen then
    begin
      s_gruen.Brush.Color :=clwhite;
      s_gelb.Brush.Color :=clyellow;
    end
    else
    begin
     s_gelb.Brush.color :=clwhite;
     s_rot.brush.color :=clred
    end;
  end;
end;
Lösung auch gefunden:
Delphi-Quellcode:
procedure Tf_ampel.b_goClick(Sender: TObject);
begin
if (s_rot.Brush.Color = clred) AND (s_gelb.Brush.Color = clwhite) then
begin
  s_gelb.Brush.Color := clyellow;
end
else
begin
  if (s_rot.Brush.Color = clred) AND (s_gelb.brush.color = clyellow) then
  begin
    s_rot.Brush.Color := clwhite;
    s_gelb.Brush.Color := clwhite;
    s_gruen.brush.color := clgreen;
  end
  else
  begin
    if s_gelb.brush.color := clyellow then
    begin
      s_rot.Brush.Color := clred;
      s_gelb.Brush.Color := clwhite;
      s_gruen.brush.color := clwhite;
    end
    else
    begin
      if s_gruen.brush.color = clgreen then
      begin
        s_gruen.Brush.Color := clwhite;
        s_gelb.Brush.Color := clyellow;
      end
      else
      begin
       s_gelb.Brush.color := clwhite;
       s_rot.brush.color := clred
      end;
    end;
  end;
end;

end;
Ich weis, ich bin gemein. :mrgreen: :twisted: :angel: (Bevor du den Fehler postest, schau dir den Code nochmal an ... :zwinker: )

Binary 30. Sep 2004 19:22

Re: Verschachtelte iflcauses
 
sry aber wir müssen diesen kram mit den if clauses machen, wir sind ja noch am anfang, und leider klappt das bei mir net

Binary 30. Sep 2004 20:04

Re: Verschachtelte iflcauses
 
WUNDERBARR !!!!!!! ES KLAPPTT!!!!! VIELEN DANK!!!

Zwar kam bei einem if einm := vor und es musste nur = sein aber darauf kam ich noch!! VIELEN DANK!!!!

gmarts 30. Sep 2004 20:42

Re: Verschachtelte iflcauses
 
Glückwunsch.

Nächstes mal einfach ein Diagramm (z.B. PAP) auf Papier malen, Computer ausmachen und Diagramm analysieren;... so findet man viel leichter solche Fehler. :)

Sag deinem Lehrer mal, daß if-clauses eine ziemlich sehr ungünstige Lösung für eine Ampelschaltung sind! :warn:

Binary 30. Sep 2004 20:52

Re: Verschachtelte iflcauses
 
habe ich ja gemacht, aber ich wusste den and befehl gar nicht, unser Lehrer is eine Sie und konnte am anfang nichtmal den beamer bedienen, sie verteilt aufgaben, und meint dann viel spaß und dann nach 4 stunden gibs ne lösung, echt toll, das eine bessere Lösung vorhanden is, sagten ihr viele aber sie meinten wir sollten bei dem bleiben, weil wir mit sowas komplizierte if else dinger lernen

Binary 30. Sep 2004 21:13

Re: Verschachtelte iflcauses
 
nur eines kapiere ich nicht, das mit diesem and, ich meine, wo is das problem, das sagt ja nur, wenn das und das hier der fall sind, dannn mach das da, aber bei mir stimmte der fall doch zu,

die ampel war rot gelb und ich meinte, wenn ampel gelb, dann mache grün, wo liegt das probl.?

jfheins 30. Sep 2004 21:18

Re: Verschachtelte iflcauses
 
deine behandlung für rot/gelb wird nie aufgerufen, da bereits if Ampel = rot eintritt, und rot/gelb nur aufgerufen wurde, wenn Ampel<>rot !!!

Binary 30. Sep 2004 21:29

Re: Verschachtelte iflcauses
 
DU HAST RECHT !!!! DU HAST VOLLKOMMEN RECHT!!! JUHUUU DIE ERDE IST WIEDER EINE KUGEL!

Ich wäre echt nich drauf gekommen, aber nun endlich habe ich es rausbekommen, ich denke, das wird mich auch in zukunft viel weiterbringen, ich hätte mehr dran denken müssen wie das fdunktioniert, viel logischer!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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