Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
vorherige zahl größer listbox
spacer
Autor Nachricht
A_Checker
Hält's aus hier

Beiträge: 14
Dabei seit: 27.02.2010



BeitragVerfasst: So 28.02.10 18:42  Antworten mit Zitat Beitrag melden
Hey Leute,
ich hab bin blutiger Anfänger im Programmieren von Delphi und soll jetzt ein Programm erstellen, das in einer Listbox zahlen ausgibt im intervall I(1;n), wobei n eingegeben werden kann, bist die letzte Zahl kleiner als die davor ist.
so weit bin ich schon gekommen:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var i, x, n, anz: integer;

begin

n:= strtoint(edit1.Text);
listbox1.Clear;
randomize;
repeat
x := random(n) + 1;
until x<i

anz := ListBox1.Items.Count;
label2.caption := anz + ' Zufallszahlen';

end;

end.


Wie sage ich ihm jetzt, dass i, die zahl vor der kleineren ist?

lg

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 28.02.2010 um 17:45
Private Nachricht sendenPosting in privater Nachricht zitieren
Sylvus
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 195
Dabei seit: 27.02.2008



BeitragVerfasst: So 28.02.10 18:52  Antworten mit Zitat Beitrag melden
drücke dich mal bitte exakter aus :)
Intervall: Ist das ein Timer, also ein Zeitintervall oder ein Zahlenintervall?
Auf jeden Fall, musst du die letzte Zahl immer in einer Variable speichern.
Also in Pseudocode:

1. Setzte alte Zahl auf die aktuelle Zahl
2. Erzeuge eine neue aktuelle Zahl
3. gebe die neue Zahl aus, wenn sie kleiner als die alte ist und beginne bei 1)


Wenns nicht klappt, melde dich nochmal, dann helfe ich auch gerne detaillierter

P.S.
Listbox1.Items.Add(inttostr(X)); falls du den Befehl nicht kennst :)
Private Nachricht sendenPosting in privater Nachricht zitieren
A_Checker
Hält's aus hier

(Threadstarter)

Beiträge: 14
Dabei seit: 27.02.2010



BeitragVerfasst: So 28.02.10 19:29  Antworten mit Zitat Beitrag melden
es soll ein Zahlen intervall sein. Deine Hilfe versteh ich leider nicht so ganz :s
Private Nachricht sendenPosting in privater Nachricht zitieren
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 52
Dabei seit: 06.11.2003
Wohnort: luzern

win 2000, win xp
d4
BeitragVerfasst: So 28.02.10 20:50  Antworten mit Zitat Beitrag melden
Vielleicht bin ich zu blöd, aber ich verstehe immer noch nicht genau was Dein Programm machen soll... :?

Kannst Du das bitte nochmals genau erklären. Praktisch wäre wohl auch ein Beispiel (Eingabe / Ausgabe).

Gruss
Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
Private Nachricht sendenPosting in privater Nachricht zitieren
Sylvus
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 195
Dabei seit: 27.02.2008



BeitragVerfasst: So 28.02.10 21:08  Antworten mit Zitat Beitrag melden
wie schon geschrieben :)
Also dein Ansatz ist ja richtig:

Generiere solange neue Zahlen bis die aktuelle grad eben generierte Zahl kleiner als die davor erzeugte ist.
Außerdem gebe die Zahl aus!

also:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
while (I<X) do 
begin
I:=X;
X:=Random(N);
Listbox1.Items.Add(X);
end;


versuchs mal so :)
Private Nachricht sendenPosting in privater Nachricht zitieren
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 52
Dabei seit: 06.11.2003
Wohnort: luzern

win 2000, win xp
d4
BeitragVerfasst: So 28.02.10 21:14  Antworten mit Zitat Beitrag melden
Beachte aber das Du I und X korrekt initialisierst (I<X) sonst kommst Du gar nie in die While Schleife...

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
Private Nachricht sendenPosting in privater Nachricht zitieren
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 179
Erhaltene Danke: 1
Dabei seit: 14.04.2008



BeitragVerfasst: Mo 01.03.10 10:58  Antworten mit Zitat Beitrag melden
Hallo,
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
var
i,n: Integer;
begin
n := 5;
for i := 1 to n-1 do
lst1.AddItem(IntToStr(i),nil);
end;

ist der Code dafür. Wobei lst1 die Listbox ist.
Private Nachricht sendenPosting in privater Nachricht zitieren
A_Checker
Hält's aus hier

(Threadstarter)

Beiträge: 14
Dabei seit: 27.02.2010



BeitragVerfasst: Mo 01.03.10 17:28  Antworten mit Zitat Beitrag melden
Ich habs jetzt so:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var x, v, n, anz: integer;
var i: string;

begin

n:= strtoint(edit1.Text);
listbox1.Clear;
v:= Listbox1.items.count -1;
i := ListBox1.Items.Strings[v];
randomize;
repeat
x := random(n) + 1;
until x<=strtoint(i);

anz := ListBox1.Items.Count;
label2.caption := inttostr(anz) + ' Zufallszahlen';

end;

end.

aber es funktioniert trotzdem irgendwie nicht...:S

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Private Nachricht sendenPosting in privater Nachricht zitieren
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star

Beiträge: 3145
Erhaltene Danke: 10
Dabei seit: 28.12.2005
Wohnort: Österreich, Wien

Windows Vista
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 01.03.10 17:37  Antworten mit Zitat Beitrag melden
auch du darfst gerne den [delphi][/delphi]-Tag verwenden um deinen Quelltext zu markieren. Der ist nicht nur "älteren" usern vorbehalten.

lg elundril

_________________
"Und warum studierst du Informatik?" - "Weil ich gerne Computerspiele spiele, programmieren hass ich eigentlich." *wallbash*
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 1548
Dabei seit: 09.11.2005


Win 7, VM
BeitragVerfasst: Mo 01.03.10 17:42  Antworten mit Zitat Beitrag melden
user profile iconA_Checker hat folgendes geschrieben Zum zitierten Posting springen:
Ich habs jetzt so: aber es funktioniert trotzdem irgendwie nicht...:S

"Funktioniert irgendwie nicht" ist defitinitv keine ausreichende Fehlerbeschreibung! Was funktioniert nicht? Wo taucht der Fehler auf? Welche Fehlermeldungen erscheinen? :mahn:

ausblenden Delphi-Quelltext markieren
 
6:
7:
8:
{ ... }
listbox1.Clear;
v:= Listbox1.items.count -1;
i := ListBox1.Items.Strings[v];
Du entfernst alle(!) Einträge der LB, um daraufhin die Anzahl dieser festzustellen und auf ein absolut nicht existentes Item zuzugreifen. Sauber! :? :think:

ausblenden Delphi-Quelltext markieren
 
8:
9:
10:
11:
{ ... }
randomize;
repeat
x := random(n) + 1;
until x<=strtoint(i);

Randomize gehört einmal aufgerufen. Am besten beim Programmstart, da es den Pseudo-Zufallsgenerator über die Zeit initialisiert.
Zu Zeile 9-11: Würfele solange, bis [n] kleiner [n-1] ist. Welchen Zweck hat das ganze? :roll:

_________________
Nothing Is Real
Private Nachricht sendenPosting in privater Nachricht zitieren
A_Checker
Hält's aus hier

(Threadstarter)

Beiträge: 14
Dabei seit: 27.02.2010



BeitragVerfasst: Mo 01.03.10 18:00  Antworten mit Zitat Beitrag melden
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var x, n, i, anz: integer;
var v : string;

begin
n:= strtoint(edit1.Text);
listbox1.Clear;
randomize;
repeat
v := Listbox1.Items.Strings[i];
i := Listbox1.items.count -1;
x := random(n) + 1;
until x<strtoint(v);
Listbox1.Items.add(inttostr(x));

anz := ListBox1.Items.Count;
label3.caption := inttostr(anz) + ' Zufallszahlen';

end;

end.



so weit so gut. das programm lässt sich auch öffnen. Gibt man aber iene zahl ein erscheint folgendes:

Im Projekt Projekt2.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Listindex überschreitet das Maximum (o)'. Prozess wurde angehalten. Mit Einzlne Anweisungen oder Start fortsetzen.


dann makiert er mir die zeil : v := Listbox1.Items.Strings[i];
mit einem grünen pfeil und blau makiert.
Private Nachricht sendenPosting in privater Nachricht zitieren
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 300
Dabei seit: 18.08.2002



BeitragVerfasst: Mo 01.03.10 18:49  Antworten mit Zitat Beitrag melden
Du hast gleich mehrere Fehler, die beim ersten Schleifendurchlauf zu einem Fehler in dieser Zeile führen:
v := Listbox1.Items.Strings[i];
  • i ist undefiniert
  • Deine Listbox ist Leer, du kannst also auch nichts auslesen
Private Nachricht sendenPosting in privater Nachricht zitieren
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 571
Dabei seit: 17.09.2008
Wohnort: Schleswig-Holstein, nahe Bad Bramstedt

WIN XP/2000&7Prof (Familie:Win 95,Win 98)
BeitragVerfasst: Mo 01.03.10 19:53  Antworten mit Zitat Beitrag melden
user profile iconSvenAbeln hat folgendes geschrieben:
i ist undefiniert

Ja, solange Du der Variable zu Anfang nicht irgendwie einen bestimmten Wert zuweist, kann sie 2348^7 (einfach mal ausgedachte Zahl) oder so sein.
Damit kann es ja keinen angesprochenen Index geben.

Und wie es user profile iconSvenAbeln vor mir geschrieben hat, hast Du ja gerade vorher listbox1.Clear; gemacht - also kann da nichts ausgelesen werden.
Private Nachricht sendenPosting in privater Nachricht zitieren
A_Checker
Hält's aus hier

(Threadstarter)

Beiträge: 14
Dabei seit: 27.02.2010



BeitragVerfasst: Mo 01.03.10 20:09  Antworten mit Zitat Beitrag melden
aber i soll ja die Position sein, an der sich die zahl befindet, die größer sein soll, damit das programm aufhört zu laufen.
Ich schick euch noch mal die ganze Aufgabenstellung:

Aufgabe 2
Nach Eingabe einer Zahl bildet dieses Programm so lange Zufallszahlen aus dem Intervall
I = [ 1 ; n ], bis die zuletzt gebildete Zufallszahl kleiner als die vorherige ist - in diesem
Falle bricht die Zahlenreihe, die also mit Ausnahme der letzten Zahl monoton wachsend
ist, ab. Das Programm weist sämtliche Zufallszahlen in einer ListBox aus und gibt auch
die Anzahl der insgesamt gebildeten Zufalls zahlen an (vgl. Skizze 2 auf der folgenden
Seite).
Private Nachricht sendenPosting in privater Nachricht zitieren
A_Checker
Hält's aus hier

(Threadstarter)

Beiträge: 14
Dabei seit: 27.02.2010



BeitragVerfasst: Mo 01.03.10 20:35  Antworten mit Zitat Beitrag melden
habe den Fehler gefunden. musste eine for schleife setzten, weil er den ersten wert ja nicht kannte also -1 z.b und da ist er dann abgestürzt.

ausblenden Delphi-Quelltext markieren
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:
var x, n, i, anz: integer;
var v : string;
var runde1 : boolean;

begin

listbox1.items.Clear;
n:= strtoint(edit1.Text);
runde1:=true;
randomize;

repeat
if runde1=true then begin
v:='0';
runde1:=false;
end
else begin
i := Listbox1.items.count;
v := Listbox1.Items.Strings[i-1];
end;
x := random(n) + 1;
Listbox1.Items.add(inttostr(x));
until x<=strtoint(v);

anz := ListBox1.Items.Count;
label3.caption := inttostr(anz) + ' Zufallszahlen';

end;

end.
Private Nachricht sendenPosting in privater Nachricht zitieren
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 571
Dabei seit: 17.09.2008
Wohnort: Schleswig-Holstein, nahe Bad Bramstedt

WIN XP/2000&7Prof (Familie:Win 95,Win 98)
BeitragVerfasst: Mo 01.03.10 20:37  Antworten mit Zitat Beitrag melden
Das klingt mir nach etwa einem solchen Lösungsansatz:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var Zufallszahl1,Zufallszahl2,anzahlDurchlaeufe,hoechstwert: integer;
zufallszahl_2_IstDran,geschafft:bool;
begin
hoechstwert:={hier darfst Du Deinen Höchstwert hinschreiben};
randomize();
Zufallszahl1:=random(hoechstwert)
zufallszahl_2_IstDran:=true;
geschafft:=false;
while not geschafft do
begin
anzahlDurchlaeufe:=anzahlDurchlaeufe+1;
if zufallszahl_2_IstDran then
begin
Zufallszahl2:=random(hoechstwert);
end
else
begin
Zufallszahl1:=random(hoechstwert);
end;
if ((not zufallszahl_2_IstDran)and(Zufallszahl1<Zufallszahl2))
or ((zufallszahl_2_IstDran)and(Zufallszahl1>Zufallszahl2)) then
geschafft:=true;
end;
end;

Ich hoffe, dass ich nichts falsches geschrieben habe und dass Du da durchsteigst...

...und natürlich, dass ich Dein Problem überhaut richtig verstanden habe.
Das ist leider nicht so einfach, da durchzusteigen, was genau Du möchtest.
Private Nachricht sendenPosting in privater Nachricht zitieren
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 52
Dabei seit: 06.11.2003
Wohnort: luzern

win 2000, win xp
d4
BeitragVerfasst: Di 02.03.10 11:56  Antworten mit Zitat Beitrag melden
Ich verstehe die Aufgabe eher so:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var x, n, y, : integer;
begin
x:=0; // Zufalszahl
y:=0; // letzte Zufallszahl
n:=50; // Obergrenze

randomize;
listbox1.clear;

repeat
y:=x;
x := random(n) + 1;
Listbox1.Items.add(inttostr(x));
until x<=y


Was aber genau erwartet wird kann vielleicht A_Checker sagen. Eventuell wäre ,wie ich schon früher geschrieben habe, ein Bsp des erwarteten Outputs hilfreich....

nicht getestet da ich hier kein delphi zur verfügung habe.

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
Private Nachricht sendenPosting in privater Nachricht zitieren
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 1548
Dabei seit: 09.11.2005


Win 7, VM
BeitragVerfasst: Di 02.03.10 14:13  Antworten mit Zitat Beitrag melden
user profile iconA_Checker hat folgendes geschrieben Zum zitierten Posting springen:

Nach Eingabe einer Zahl bildet dieses Programm so lange Zufallszahlen aus dem Intervall
I = [ 1 ; n ], bis die zuletzt gebildete Zufallszahl kleiner als die vorherige ist - in diesem
Falle bricht die Zahlenreihe, die also mit Ausnahme der letzten Zahl monoton wachsend
ist, ab. Das Programm weist sämtliche Zufallszahlen in einer ListBox aus und gibt auch
die Anzahl der insgesamt gebildeten Zufalls zahlen an (vgl. Skizze 2 auf der folgenden
Seite).

user profile iconbole hat folgendes geschrieben Zum zitierten Posting springen:
Ich verstehe die Aufgabe eher so:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
  y:=x;
x := random(n) + 1;
Listbox1.Items.add(inttostr(x));
until x<=y
:zustimm: So habe ich die Aufgabenstellung ebenfalls verstanden. Es geht allerdings auch eleganter, aber das überlassen wir wohl besser dem Threadersteller, der sonst gar keine Arbeit mehr hat. ;)

_________________
Nothing Is Real
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home