Autor Beitrag
Peter.Kratzbaum
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.03.10 18:17 
Hey. Erstmal vorab gesagt : Ich habe über die Forensuche gesucht, aber die Ergebnisse haben mein Problem nicht gelöst.

Also.
Wir schreiben morgen eine Info-Arbeit übers Thema "Ampelprogrammierung".
Als vorbereitung sollten wir eine Ampel programmieren. ( 1. rot. 2. Rot & Gelb 3. Gelb 4. Grün 5. Gelb 6. Rot )

Das habe ich versucht und denke das das so stimmt. : (jetzt bitte nicht auf rechtschreibung --> bes. groß und kleinschreibung .. oder syntax fehler achten..)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
Begin
If (rot.Visible := true) and (gelb.visible := false) and (grün.visible := false) then
Begin
Rot.Visible := true;
Gelb.Visible := true;
Grün.Visible := false;
End
Else
Begin

If (rot.visible := true) and (gelb.visible := true) and (grün.visible := false) then
Begin
Rot.Visible := false;
Gelb.Visible := true;
Grün.Visible := false;
End
Else
Begin

If (rot.visible := false) and (gelb.visible := true) and (grün.visible := false) then
Begin 
Rot.Visible := false;
Gelb.Visible := false;
Grün.Visible := true;
End
Else
Begin

If (rot.visible := false) and (gelb.visible := false) and (grün.visible := true) then
begin
Rot.Visible := false;
Gelb.Visible := true;
Grün.Visible := false;
End
Else
Begin

If (rot.visible := false) and (gelb.visible := true) and (grün.visible := false) then
Begin
Rot.Visible := true;
Gelb.Visible := false;
Grün.Visible := false;
end;
end.


__________________________________________________________________________________________________________________

Stimmt das so?

Ich hab übrigens noch eine allgemeine frage :
Das heißt doch jetzt wenn man das spricht:

" Wenn Rot an ist und gelb aus ist und grün aus ist, dann mache :
Rot an
Gelb an
Grün an "

usw.

oder?

Und wie ist das eig. wenn die bedingung (Wenn Rot an ist und gelb aus ist und grün aus ist ) wahr ist.. dann macht der ja das was danach folgt also:

Rot an
Gelb an
Grün an

ne?

Und wenn der das gemacht hat.. beginnt er dann mit der neuen bedingung? oder fängt er mit der neuen bedingung schon an wenn die erste nicht wahr wäre? Irgendwie hab ich das noch nicht so ganz verstanden.. aber ich hoffe ich hab mich klar ausgedrückt.

Hoffe jemand kann mit helfen..
Brauche dringend hilfe !
Dankeschön schonmal. :)


Zuletzt bearbeitet von Peter.Kratzbaum am Mi 10.03.10 22:39, insgesamt 1-mal bearbeitet
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 10.03.10 18:57 
Hallo und :welcome: !

Du solltesten zunächst deinen Code in delphi-tags packen, damit man das schön lesen kann.
Weiterhin solltest du deinen Code (aus dem gleichen Grund) einrücken.

Das könnte dann in etwa so aussehen (Fehler springen einem dann viel eher ins Auge):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
If (rot.visible := false) and (gelb.visible := true) and (grün.visible := false) then
Begin
  Rot.Visible := true;
  Gelb.Visible := false;
  Grün.Visible := false;
end.


Ich habe mal ein paar Dinge markiert, die so nicht funktionieren. Bei Vergleichen wird = benutzt. := ist für Zuweisungen gedacht.
end mit einem Punkt dahinter kommt nur am Programmende vor. Da du aber noch einen neuen Block mit begin aufmachst, muss dieser auch wieder mit end; geschlossen werden.
Ups, jetzt habe ich ja doch auf Syntax-Fehler geachtet, tut mir leid :lol:

Am besten veranschaulichst du dir das Ampelbeispiel anhand eines Automaten (so wie hier etwa: mezdata.de/ti-basis/280_die-ampel/ ). Anhand dessen kannst du deine Logik leicht überprüfen.


Zuletzt bearbeitet von F34r0fTh3D4rk am Mi 10.03.10 20:09, insgesamt 1-mal bearbeitet
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 10.03.10 19:09 
Hey,

@F34r0fTh3D4rk: Page not Found ?!

@Peter.Kratzbaum: Prizipiell ist das so möglich. Ich würde es aber über einen Integer machen der die 6 Ampelphasen durchzählt (so wie du das oben schon gemacht hast um uns die Sache zu erklären). Un dann prüfst du mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case AmpelIndex of
  0begin 
    Rot.Visible  := True;
    Gelb.Visible := True;
    Grün.Visible := False;  
  end;
  //[...]
end;


case macht das gleiche wie dein if-then-else, if-then-else, ... Und wenn du in Phase 6 bist, dann stellst du den Integer einfach auf 0 zurück und schon bist du fertig.

Mfg Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.03.10 19:18 
@F34r0fTh3D4rk: Mh. Mein Lehrer hat gesagt da müssen punkte vor.. nunja ich machs lieber mit ;-)
@Bergmann89: Okay, dann bin ich schonmal beruhigt, dass das so funktioniert. Wir sollen das auch erstmal so machen. Wir arbeiten erst seit 3 Wochen mit Delphi.. deswegen bin ich schonmal stolz das ich das problem schonmal irgendwie zu lösen bekommen :D

Okay, jetzt hab ich aber noch 3 Fragen. ;-)

1. "Guckt" das Programm erst ob die erste bedingung wahr ist und macht dann das was hinter dem then steht?

2. Und wenn die erste jetzt nicht wahr sein sollte nimmt der dann die zweite bedingung?

3. Und von welchem stand geh ich eig. aus? Das alle an sind? Oder woher weiß ich was die ausgangssituaiton ist.. ? Weil ich hab ja geschrieben beim ersten : If rot.Visible := true .. gelb :=false und grün := false ... ist das von anfang an so ? Und wie kann ich das umstellen? Weil ich weiß ja eig. nicht das rot am anfang an ist..

'Dankeschöön.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 10.03.10 19:51 
Eigentlich gilt hier ja, nur eine Frage pro Thread..

user profile iconPeter.Kratzbaum hat folgendes geschrieben Zum zitierten Posting springen:
1. "Guckt" das Programm erst ob die erste bedingung wahr ist und macht dann das was hinter dem then steht?

Die Frage versteh ich schon nicht. Natürlich muss erst die Bedingung geprüft werden, bevor der "Then" Teil abgearbeitet wird.

user profile iconPeter.Kratzbaum hat folgendes geschrieben Zum zitierten Posting springen:
2. Und wenn die erste jetzt nicht wahr sein sollte nimmt der dann die zweite bedingung?

Man gebe "else" in ein Wörterbuch ein.. ;) Ja, wenn die erste Bedingung nicht wahr ist, wird der else Teil ausgeführt, in diesem Fall also die zweite Abfrage. Wenn die auch nicht zutrifft die dritte, usw.

user profile iconPeter.Kratzbaum hat folgendes geschrieben Zum zitierten Posting springen:
3. Und von welchem stand geh ich eig. aus? Das alle an sind? Oder woher weiß ich was die ausgangssituaiton ist.. ? Weil ich hab ja geschrieben beim ersten : If rot.Visible := true .. gelb :=false und grün := false ... ist das von anfang an so ? Und wie kann ich das umstellen? Weil ich weiß ja eig. nicht das rot am anfang an ist..

Das stellst du doch auf dem Formular ein, welche Bilder zu Anfang an sichtbar sind.

user profile iconPeter.Kratzbaum hat folgendes geschrieben Zum zitierten Posting springen:
'Dankeschöön.

Und bitte die Delphi TAGs noch nachtragen. [Delphi]Code [/Delphi ]

_________________
PROGRAMMER: A device for converting coffee into software.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 10.03.10 20:12 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Hey,

@F34r0fTh3D4rk: Page not Found ?!

Er hat irgendwie die schließende Klammer zum Link dazu gezählt, ich habs gefixt.

user profile iconPeter.Kratzbaum hat folgendes geschrieben Zum zitierten Posting springen:
@F34r0fTh3D4rk: Mh. Mein Lehrer hat gesagt da müssen punkte vor.. nunja ich machs lieber mit ;-)

:= bei Vergleichen ist schlichtweg falsch. Da gibts kein: Ich mach's lieber mit (das gilt nur woanders ;) )
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 10.03.10 20:56 
Hey,

F34r0fTh3D4rk hat Recht. Vergleich sin immer = ! Und mit was du anfängst is ega, wenn du das Ganze so machst, das es ne Endlosschleife wird. Aber wie schon gesagt, mit dem case geht das viel einfacher. Wenn du dich bei einer Abfrage vertippst, wars das. Und dann sucht man Stunden nach dem Fehler. Außerdem glaub glaub ich, wenn wird die was Neues (aber trotzdem Richtiges/Nützliches) beibringen wird auch dein Lehrer nichts dagegen haben ;) (wenn doch schick ihn ma vorbei xD)

€: dabei fällt mir grad auf, das da nich nur ein end; fehlt, sondern 4! das begin nach dem else kannst du weg lassen, da du ja nur einen Befehl nach dem else hast (das if - then)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^


Zuletzt bearbeitet von Bergmann89 am Mi 10.03.10 21:00, insgesamt 1-mal bearbeitet
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.03.10 20:59 
okay, danke. ;-)
Das mit dem case versteh ich aber auch garnicht :D
Aber ist nicht so schlimm ;-)
In der arbeit wärs aber besser wenn ichs so mache wie wir es gelernt haben..

Danke trotzdem ;-)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.03.10 21:04 
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 10.03.10 21:07 
Hey,

case macht genau das, was du mit deinem ifs machst. Hier ma ein Vergleich:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if AmpelIndex = 0 then begin
  //[code1]
end else 
if AmpelIndex = 1 then begin
  //[code2]
end else
if AmpelIndex = 2 then begin
  //[code3]
end;
das ist das gleiche wie das:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
case AmpelIndex of
  0begin
    //[code1]
  end;
  1begin
    //[code2]
  end;
  2begin
    //[code3]
  end;
end;

einziger Unterschied is halt nur, dass man das jetz nicht mehr mit den Boolean machen kann, sondern Zahlen oder Buichstaben braucht.
Was mir auch grad noch auffällt. Visible ist schon vom Typ Boolean, also macht ncohmal Testen keinen Sinn. Das is wie als wenn du schreibst if (true = true) then. Boolean also immer gleich so in die Abfrage, da es manchmal zu Fhlern komm kann:
ausblenden Delphi-Quelltext
1:
2:
if Rot.Visible and Gelb.Visible and Gruen.Visile then //alle Visible
if Rot.Visible and not Gelb.Visible and not Gruen.Visile then //nur ROT ist an


@Luckie: wusst ich doch, das wir das schonma hatten ^^

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.03.10 21:11 
ahhh :)

Habs verstanden. Dankeschön. Aber ich glaub ich mach das trotzdem so.. (meine anfangs version war aber doch richtig, oder? also das würde funktionieren?)

Achja, wisst ihr vllt. wo ich Delphi 6 downloaden kann? Ich habs nämlich nicht selber zu hause auf dem pc. Und das ist ganz schon umständlich wenn man zu hause was geschrieben hat und dann warten muss bis man das in der schule ausprobieren kann..
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 10.03.10 21:20 
Hey,

Delphi gibts nich mehr als kostenlosen Download. Wenn du was daheim machen willst musst du auf FreePascal ausweichen. Da gabs noch was anderes, da fällt mir aber grad der name nich ein...glaub das hieß Python oder so ähnlich.

€: Lazarus hieß es

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.03.10 21:47 
hab jetzt mal eine doppel ampel geschrieben und wollte mal fragen ob das jetzt so stimmt.. (tschuldigung, dass ich das nicht in so nem kästchen hab, aber ich weiß nicht wie das geht.. & kann sein das da ein paar flüchtigkeitsfehler drin sind.. aber ich möchte wissen, ob ich richtig denke.. ;-)
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
begin
If (rot1.visible = true) and (gelb1.visible = false) and (grün1.visible = false) and (rot2.visible = false) and (gelb2.visible = false) and (grün2.visible = true) then  [i](Rot1 , Grün2 ) [/i]
begin
rot1.visible := true;                 [i] (Rot1 / Gelb1, Gelb2) [/i]
gelb1.visible := true;
grün1.visible := false;
rot2.visible := false;
gelb2.visible := true;
grün2.visible := false;
end
else
begin
If (rot1.visible = true) and (gelb1.visible = true) and (grün1.visible = false) and (rot2.visible = false) and (gelb2.visible = true) and (grün2.visible = false) then 
begin
rot1.visible := false;                 [i] (Grün1 , Rot2) [/i]
gelb1.visible := false;
grün1.visible := true;
rot2.visible := true;
gelb2.visible := false;
grün2.visible := false;
end
else
begin
If (rot1.visible = false) and (gelb1.visible = false) and (grün1.visible = true) and (rot2.visible = true) and (gelb2.visible = false) and (grün2.visible = false) then 
begin
rot1.visible := false;                 [i] (Gelb1, Rot2/Gelb2) [/i]
gelb1.visible := false;
grün1.visible := true;
rot2.visible := true;
gelb2.visible := true;
grün2.visible := false;
end
else
begin
If (rot1.visible = false) and (gelb1.visible = false) and (grün1.visible = true) and (rot2.visible = true) and (gelb2.visible = true) and (grün2.visible = false) then  
begin
rot1.visible := true;                 [i] (Rot1 / Grün2) [/i]
gelb1.visible := false;
grün1.visible := false;
rot2.visible := false;
gelb2.visible := false;
grün2.visible := true;
end;
end.


Danke.


Zuletzt bearbeitet von Peter.Kratzbaum am Mi 10.03.10 22:09, insgesamt 1-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 10.03.10 22:06 
Haben doch oben schon mehrere Leute geschrieben..
[Delphi]Hier dein Quellcode[/Delphi]

_________________
PROGRAMMER: A device for converting coffee into software.
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.03.10 22:09 
oh, hab ich nicht gesehen. Danke ;-)
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 11.03.10 11:42 
Hey,

1. da fehlen immer noch 3 end;. Das funktioniert in deinem Fall nur, weil du danach gleich das Programmende hast (end.). Du musst deinen Quelltext einrücken (siehe Beitrag von F34r0fTh3D4rk), dann behälst du auch die Übersicht.

2. kannst du das begin nach dem else weg lassen (siehe mein Beitrag)

3. hast du es nich nur eine doppelte, sondern eine 4-fach unnötige Überprüfung drin: if (Rot.Visible = True) and (Rot.Visible = False) then da es nur die 2 Werte haben kann ist es sinnlos beide zu prüfen. Also fliegt einmal raus: if (Rot.Visible = True) then. Und wie ich dir oben schon erklärt habe (siehe hier) sollte man Bolean nich auf Richtigkeit prüfen, da sie schon Boolean sind!

[€] hab grad gesehen, das es 2 unterschiedliche ampeln sind, sry. Also fällt Teil 1 der Ausführund unter 3. raus ^^ Aber spätestens jetzt solltest du den vorteil von case erkennen. Wenn du jetzt noch ne Ampel brauchst, dann sind das 9 Abfragen. Bei ner kompletten Kreuzung mit Fußgängerampel wären das mehr if-then abfragen als wirklcih nützlicher Code.[/€]

Wie du siehst sind alle deine Fragen aus dem letzten Beitrag schon beantwortet (manchmal sogar mehrmals). Du musst dir auch durchlesen was wir schreiben und auch verstehen. Nich einfach nur lesen un sagen alles klar. Versuch das was wir dir sagen in deinem Programm zu realisieren. Mach dir meinetwegen ne Liste, mit unseren Vorschlägen und arbeite die der Reihe nach ab. Nimm dir das zu Herzen, da manche sich nicht die Mühe machen wie ich und alles doppelt oder dreifach schreiben, sondern einfach nicht mehr antworten ;)

MfG Bergmann

p.s.: 888ster Beitrag. Ich lass ein spring ^^ :beer: :beer: :beer: :beer:

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 11.03.10 16:36 
kann ja sein das das mit dem case schneller geht aber in der arbeit sollen wir das so machen.
Danke, für eure antworten..
und glückwunsch zum 888sten ;-)
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Do 11.03.10 16:47 
"Ampel-Programmierung". Ein geiles Thema für eine Arbeit. :lol:
Peter.Kratzbaum Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 11.03.10 16:54 
wieso? :D
achja. Das kam garnicht dran :D :D
Aber sowas ähnliches. Wir mussten rechtecke in einer bestimmten reihen aufleuchten lassen und so .. ich fands nicht schwer.. aber ich war mit nicht sicher wie man das macht, dass man zwischen den schritten auf einen button klicken muss.. Hab dann da "Button1Click" hingeschrieben, weil das oben schon stand.. hoffe mal das ist richtig.. wenn nicht, dann halt nicht :D
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 13.03.10 11:41 
Die Ampel scheint bei den Lehrern ein ziemlich beliebtes Thema zu sein.
Ich weiß ja nicht, ob Du schon nach anderen Beiträgen zu diesem Thema in diesem Forum gesucht hast.
Also ich habe zum Beispiel zu diem Thema schon mal im Thread Ampelkreuzung ein bisschen geholfen.
Dann gibt es aber zum Beispiel auch noch den Thread Ampelschaltung.

Wenn man nur nach dem Begriff "Ampel" sucht, bekommt man ziemlich viele Threads zur Auswahl.