Autor Beitrag
magic87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: 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:

ausblenden 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); //zufällige Lampe aus Lampenliste wird ausgewählt
    for x := 1 to Lampenliste.Count do
    begin
      memLampencontroller.Lines.Add('Lampe '+ intToStr(x)); //Lampe 1 bis 8 wird ins Memo   geschrieben
    end; //for
    Zahl :=   random(LampenListe.Count+1);  //Zahl bekommt den Wert der zufällig ausgewählten Lampe
    label1.caption := IntToStr(Zahl); // gibt die zufällige zahl im label aus. Ist nur zur Probe gewesen.
end;

Naja.. ich hoffe mir kann hier wer auf die Sprünge helfen!

Liebe Grüße
Bluemagicon
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 04.10.06 08:32 
Hi
Eigentlich könntest du da selbst darauf kommen, aber ich gebe dir mal einen Denkanstoß...
Dein Code:
ausblenden 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); //zufällige Lampe aus Lampenliste wird ausgewählt  
    for x := 1 to Lampenliste.Count do  
    begin  
      memLampencontroller.Lines.Add('Lampe '+ intToStr(x)); //Lampe 1 bis 8 wird ins Memo   geschrieben  
    end; //for  
    Zahl :=   random(LampenListe.Count+1);  //Zahl bekommt den Wert der zufällig ausgewählten Lampe  
    label1.caption := IntToStr(Zahl); // gibt die zufällige zahl im label aus. Ist nur zur Probe gewesen.  
end;


soweit dein Programm und hier die Hinweise
ausblenden 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); //warum Zahl nicht hier schon zuweisen ?
    for x := 1 to Lampenliste.Count do  
    begin  
      If Zahl =x then ....     // und hier vergleichen, du siehst es ist ganz einfach
      else memLampencontroller.Lines.Add('Lampe '+ intToStr(x)); //bei <else> wie gehabt
    end; //for  
      
    label1.caption := IntToStr(Zahl); // Zahl ist ja schon definiert
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 04.10.06 09:33 
Zu deinem neuen Problem =)

ausblenden Delphi-Quelltext
1:
2:
3:
 //ruf einfach an erster Stelle in deiner Prozedur
 meinMemo.lines.clear; 
 //auf, dann wird der aktuelle Inhalt in meinMemo gelöscht


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45


Delphi 7, PHP
BeitragVerfasst: 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:

ausblenden 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;      //lines von Memo werden gelöscht
  Zahl :=   random(LampenListe.Count); //Zahl bekommt zufälligen Wert von Lampenliste
    for x := 0 to Lampenliste.count-1 do
    begin
      If x = Zahl then         // Wenn eine Zahl den zufälligen Wert hat...
        memLampencontroller.Lines.Add('Lampe '+ intToStr(x+1) + ' ist defekt') //... schreibe: "Lampe ist defekt"
          else memLampencontroller.Lines.Add('Lampe '+ intToStr(x+1)); //...sonst schreibe: "Lampe"
    end;
    label1.caption := IntToStr(Zahl); //Nur zur Probe
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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....