Autor Beitrag
Hasche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 20.02.08 11:35 
Hey!
Ich erstell nen Prog wo ich 2 Button hab, die jeweils aus ner Txt Datei ein Wort auslesen (nach Zeile). Meine Frage ist allerdings, wie ich dem 2. Button sag, nicht die Zeile aus dem 1. Button auszulesen, heißt nicht das selbe Wort auszugeben.

i,k sind integer

Button 1: txt.Strings[i]

Button 2: txt.Strings[k]

wie kann ich nun sagen, dass i und k nicht gleich sein sollen? sowas wie i not k oder mit txt.Strings[..]?
über hilfe wär ich dankbar :)
tschuu lg
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Mi 20.02.08 11:38 
Ich verstehe deine Problembeschreibung noch nicht so ganz.
Du möchtest, dass Button2 nicht das gleiche anzeigt wie Button1?

Wo werden i und k denn mit Zahlen belegt?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 20.02.08 11:45 
Die Frage ist, woher der erste Button die auszulesende Zeile bekommt, aber du kannst jedenfalls ja eine Integer-Variable global deklarieren und dir darin merken, welche Zeile durch den ersten Button ausgelesen wurde. Dann kannst du im zweiten Buttonclick darauf achten eine andere Zahl zu nehmen.

Aber etwas Genaueres kann man da ja nicht sagen, wenn man nicht weiß, ob es zufällige Zeilen sein sollen oder bestimmte. etc.
FiceGoesDelphi
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mi 20.02.08 11:58 
Also ich versteh das auch noch nicht so ganz.
Ich gehe jetzt mal davon aus, dass du den Variablen i und k IntegerWerte zuweist oder?
Wenn du denen die gleichen Werte zuweist, werden die beiden auch die gleichen Zeilen auslesen.
Sonst musst du denen halt verschiedene Werte zuweisen.
Oder du kannst sagen

Button 1: txt.Strings[i]

Button 2: txt.Strings[i + 1]

Somit gehst du auf Nummer sicher, dass es nicht die gleichen Zeilen sind.
Aber wir bräuchten schon ein paar mehr Informationen. Sind i und k Randomzahlen?
Initialisierst du die überhaupt?

_________________
<(^^<) <(^^)> (>^^)>
===================
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 20.02.08 13:04 
Hi
Ich denke mal schon, das i und k globale Variablen sind und wenn er nicht weiß, ob sie gleich sind, dann wird er sie schon irgendwo zufällig belegen, daher hab ich hier mal eine Abfrage
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
If i= k Then vergisses else
begin
  Edit1.Text;= txt.Strings[i];
  Edit2.Text;= txt.Strings[k];
end;

im Angebot....
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 20.02.08 13:52 
user profile iconoldmax hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
If i= k Then vergisses else
begin
  Edit1.Text;= txt.Strings[i];
  Edit2.Text;= txt.Strings[k];
end;

*räusper* Was soll denn der Mist? Tschuldigung, aber es geht auch wesentlich eleganter:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if i <> k then
begin
  Edit1.Text;= txt.Strings[i];
  Edit2.Text;= txt.Strings[k];
end;
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Mi 20.02.08 14:06 
user profile iconYogu hat folgendes geschrieben:
user profile iconoldmax hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
If i= k Then vergisses else
begin
  Edit1.Text;= txt.Strings[i];
  Edit2.Text;= txt.Strings[k];
end;

*räusper* Was soll denn der Mist? Tschuldigung, aber es geht auch wesentlich eleganter:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if i <> k then
begin
  Edit1.Text;= txt.Strings[i];
  Edit2.Text;= txt.Strings[k];
end;

Hauptsache, man übernimmt den Fehler! =)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 20.02.08 16:36 
user profile iconXong hat folgendes geschrieben:
Hauptsache, man übernimmt den Fehler!

Ach du meine Güte :oops:

Sorry, da war ich wohl etwas zu schnell. Ich hatte auch nicht viel Zeit... ;)
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Do 21.02.08 06:34 
hi
@Yogu
Na ja, Zeit für
Zitat:
*räusper* Was soll denn der Mist? Tschuldigung, aber es geht auch wesentlich eleganter:

war jedenfalls.
Nun ja, manchmal möchte man halt wissen, warum sich nix tut .... und dafür sollte die Procedure "vergisses" dienen. War vielleicht ein wenig zu anspruchsvoll gedacht. Dies mal nur so zur Erklärung....
Mfg
oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 21.02.08 12:04 
i und k sind globale integer variablen..

ich schreibe ein prog, dass verschiedene städte abfragt und die dazugehörigen pixelkoordinaten. die angaben dazu sind in txt dateien gespeichert. steht zb berlin in der 1. zeile, stehen die x und y koordinaten für berlin auch in der ersten zeile der x und y.txt datei.

button 1 ist der startbutton, button 2 der für die nächste frage.
jedoch darf von den städten keine nochmal abgefragt werden, somit müssten die zeilen, aus denen ausgelesen wird verschieden sein und nicht eine zeile zweimal abgefragt werden.

button1:

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:
procedure TForm1.Button1Click(Sender: TObject);
var
  txt: TStringList;
  temp: String;
begin
Label5.Visible:=False;

button1.Visible:=False;
button2.Visible:=True;

  txt:= TStringList.Create;
  txt.LoadFromFile('Stadt.txt');

  randomize;

  k:= random(txt.Count);

  Label4.Caption:= txt.Strings[k];

  txt.LoadFromFile('x.txt');
  x1:= StrToInt(txt.Strings[k]);

  txt.LoadFromFile('y.txt');
  y1:= StrToInt(txt.Strings[k]);

  bShape := TShape.Create(Self);
  bShape.Parent := self;
  bShape.Width := 4;
  bShape.Height := 4;
  bShape.Shape := stCircle;
  bShape.Brush.Color:=clRed;
  bShape.Brush.Style:=bsSolid;
  bShape.Top := y1;
  bShape.Left := x1;
  bShape.Visible:=false;

end;


button2:

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:
procedure TForm1.Button2Click(Sender: TObject);
var
  txt: TStringList;
  temp: String;
begin

  txt:= TStringList.Create;
  txt.LoadFromFile('Stadt.txt');

  randomize;

  i:= random(txt.Count);

  Label4.Caption:= txt.Strings[i];

  txt.LoadFromFile('x.txt');
  x1:= StrToInt(txt.Strings[i]);

  txt.LoadFromFile('y.txt');
  y1:= StrToInt(txt.Strings[i]);

  bShape := TShape.Create(Self);
  bShape.Parent := self;
  bShape.Width := 4;
  bShape.Height := 4;
  bShape.Shape := stCircle;
  bShape.Brush.Color:=clRed;
  bShape.Brush.Style:=bsSolid;
  bShape.Top := y1;
  bShape.Left := x1;
  bShape.Visible:=false;

  txt.Strings[i] isnot txt.Strings[k];

end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 21.02.08 12:08 
Erstens: Randomize gehört nur einmal ins FormCreate oder so.
Zweitens: Am Einfachsten (nicht optimal, aber das ist ja egal):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  // statt:
  i:= random(txt.Count);
  // einfach:
  i := k;
  while i = k do
    i:= random(txt.Count);
Sollte txt.Count allerdings nicht mindestens 2 sein gibt das natürlich ne Endlosschleife. ;-)
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 21.02.08 12:18 
kann man nich einfach sagen, dass i nicht k sein darf, also die gleiche zeile? würd eich mir jetz am einfachsten vorstellen :)

ausblenden Delphi-Quelltext
1:
2:
3:
  i := k;
  while i = k do
    i:= random(txt.Count);


tut doch nichts zur sache, dass eine zeile nicht 2x abgefragt wird oder? *nich duchblick* xD
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 21.02.08 12:21 
Klar kannst du das sagen, aber woher willst du dann die zweite Zahl nehmen? ;-)

Die Schleife sucht so lange eine neue Zufallszahl bis diese nicht mehr gleich k ist. Und diese Zahl ungleich k liegt dann in i.
Hasche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Do 21.02.08 12:27 
mh gibts ne möglichkeit, dass du dir das prog ma anguckst? ^^
ich glaub, wir reden ein bisschen aneinander vorbei xD
Einloggen, um Attachments anzusehen!
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 21.02.08 14:46 
du musst doch nur jeweils statt deinem aufruf von random eine Schleife daraus machen. :nixweiss:

Also einmal
ausblenden Delphi-Quelltext
1:
2:
while i=k do
  i:=random(x);

und in deiner andren procedure
ausblenden Delphi-Quelltext
1:
2:
while i=k do
  k:=random(x);

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 21.02.08 14:49 
Was jetzt hier im Thread noch nicht steht: Wir haben uns via Messenger unterhalten. Das Problem ist, dass es nicht nur darum geht dies zu unterscheiden, sondern dass auch bei weiteren Klicks die ganze Sequenz eindeutig ist und nichts doppelt vorkommt.

Hier habe ich ein array of Boolean vorgeschlagen, dass die bereits abgefragten Fragen speichert.