| Autor |
Beitrag |
magic87
      
Beiträge: 45
Delphi 7, PHP
|
Verfasst: Mi 04.10.06 08:15
Hallo!
Möchte gerad folgende Aufgabe lösen:
Ich habe eine Liste vom Typ TList. Dort hab ich 8 Lampen.
Ich habe noch ein Memofeld und ein Button.
Wenn ich jetzt auf den Button klicke soll eine Lampe zufällig ausgewählt werden und diese soll dann in der Memo als defekt erscheinen. Ungefähr so:
Lampe1
Lampe2
Lampe3
Lampe4
Lampe5 ist defekt!
Lampe6
Lampe7
Lampe8
Mein Problem ist, dass ich nicht weiß wie die 5. Lampe bzw. die zufällige Lampe als defekt in der Memo darstellen kann. Mein Quelltext sieht im Moment so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var x : integer; Lampe : TLampe; Zahl : integer; begin random(LampenListe.Count+1); for x := 1 to Lampenliste.Count do begin memLampencontroller.Lines.Add('Lampe '+ intToStr(x)); end; Zahl := random(LampenListe.Count+1); label1.caption := IntToStr(Zahl); end; |
Naja.. ich hoffe mir kann hier wer auf die Sprünge helfen!
Liebe Grüße
Bluemagicon
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 04.10.06 08:32
Hi
Eigentlich könntest du da selbst darauf kommen, aber ich gebe dir mal einen Denkanstoß...
Dein Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var x : integer; Lampe : TLampe; Zahl : integer; begin random(LampenListe.Count+1); for x := 1 to Lampenliste.Count do begin memLampencontroller.Lines.Add('Lampe '+ intToStr(x)); end; Zahl := random(LampenListe.Count+1); label1.caption := IntToStr(Zahl); end; |
soweit dein Programm und hier die Hinweise
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var x : integer; Lampe : TLampe; Zahl : integer; begin Zahl := random(LampenListe.Count+1); for x := 1 to Lampenliste.Count do begin If Zahl =x then .... else memLampencontroller.Lines.Add('Lampe '+ intToStr(x)); end; label1.caption := IntToStr(Zahl); end; |
Aber bedenke, Add fügt immer wieder Einträge zu, also bei jedem Durchlauf wird dein Memo größer. Wenn das nicht sein soll, mußt du vor der Schleife den Inhalt des Memos löschen.
Ich glaub, das wird reichen.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
magic87 
      
Beiträge: 45
Delphi 7, PHP
|
Verfasst: Mi 04.10.06 09:29
Vielen Dank oldmax! Du hast recht.. da haette ich wirklich selbst drauf kommen können! Weißt du vll. oder wer anders auch noch, wie ich es machen kann, das die aktuelle Liste im Memo immer gelöscht wird und die neue liste mit einer anderen Zufallszahl angezeigt wird, wenn ich ein weiteres mal auf den Button klicke?? So das die Liste praktisch überschrieben wird?
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 04.10.06 09:31
hallo!
Bevor du die Funktion "random()" aufrufst, ruf davor noch "Randomize" auf damit "random()", also der "Zufalls"zahlen generator initialisiert wird.
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 04.10.06 09:33
Zu deinem neuen Problem =)
Delphi-Quelltext 1: 2: 3:
| meinMemo.lines.clear; |
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Mi 04.10.06 11:52
Hi
Nun, bisher dürftest du schon ein wenig Hilfe gehabt haben, aber ? lautet die Aufgabe vielleicht, das du den Einträgen in deiner TList einen Defekt zuordnen sollst?
Dann ist deine Lösung nur scheinbar richtig...
Du kannst aber auch
Delphi-Quelltext 1: 2: 3:
| ..... ..... :=List1.Items[x-1] + .... ..... |
benutzen.
Zu x-1 folgendes:
Deine Laufvariable x beginnt mit 1 und endet bei List1.Count.
Der erste Eintrag steht aber bei Index 0 also bei List1.Items[0], deshalb steht der letzte Eintrag bei List1.Items[List1.Count-1]. Ich könnte mir vorstellen, das die Aufgabenstellung genau auf diese Besonderheit gerichtet ist.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
magic87 
      
Beiträge: 45
Delphi 7, PHP
|
Verfasst: Fr 06.10.06 13:43
ja.. da hast du recht oldmax! Aber habe das problem nun schon hinbekommen!
Mein Quelltext sieht nun folgendermaßen aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var x : integer; Lampe : TLampe; Zahl : integer; begin memLampencontroller.lines.clear; Zahl := random(LampenListe.Count); for x := 0 to Lampenliste.count-1 do begin If x = Zahl then memLampencontroller.Lines.Add('Lampe '+ intToStr(x+1) + ' ist defekt') else memLampencontroller.Lines.Add('Lampe '+ intToStr(x+1)); end; label1.caption := IntToStr(Zahl); end; |
Naja..will gerad so bisschen in die objektorientierte Richtung und mich bisschen mit Constructorn, Destructorn usw. beschäftigen! Wie seid ihr denn so immer weiter in die Richtung gekommen?? Bin jetzt seid 3 Monaten dabei und hab das Gefühl, jetzt ist wieder so einen Kleine Sperre.. aber das wird schon bestimmt!
LG
Dennis
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Sa 07.10.06 11:05
Hi
Ok, schon nicht schlecht, aber noch nicht so ganz richtig. Der Text "Lanpe 1" steht bereits in deiner TList. Also solltest du nicht im Programm eigenen Text in das Memo schreiben, sondern auf den Text in dem TList-Object zugreifen.
Hintergrund:
Deine Zuweisung ist im Quelltext deines Programmes verankert und nur dort änderbar, also mit Delphi-Entwicklungsebene.
Änderst du den Text in deinem TList-Object, so stimmen die Inhalte nicht mehr überein. Nun wirst du mir sagen, die Items in TList sind ja auch zur Entwicklungszeit eingefügt. Ja, jetzt, aber später wirst du per Programm zur Laufzeit deine Listen füllen....
Also gewöhne es dir an, so wenig Zuweisungen wie möglich im Quelltext zu tätigen, sondern greife auf bekannte oder hinterlegte Informationen zu.
Zu deiner Frage, wie finde ich Spaß an der Programmierung und demnach auch zu dem Wissen, nun es geht nicht über nNacht, aber ich denke, wenn du dir ein Ziel setzt, etwas selbst zu programmieren, eine Adressdatei, eine Verwaltung für Musikstücke, mit Liedern und Interpreten, so Stück für Stück gefüllt mit eigenen Ideen zu einem komfortablen Programm, dann bist du auf dem richtigen Weg. Ich hör zwar im Hintergrund ein Aufstöhnen, ach was für alte Kamellen, aber mit einfachen Schritten hin zu komplizierten Routinen ist halt angesagt.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
|