Delphi Programm für Zufallszahlen.

compitech

Cadet 1st Year
Registriert
Dez. 2010
Beiträge
9
Hallo,
ich bin neu hier.
Ich habe mir im Unterricht leider nie wirklich Notizen gemacht, dachte eigentlich ich verstehe alles. Wenn nicht hatte ich noch meinen Sitznachbarn. (Ja das ist doof.)
Und nun steh ich vermutlich vor dem einfachsten Problem überhaupt, habe aber auch erst seit nem halben Jahr Info.
Und zwaar wollte ich ein Programm für Zufallszahlen in einem beliebigen Bereich.

Mein Formblatt sieht im groben so aus:

Zuffalszahl zwischen
EditFeld (0) und EditFeld(0)

Label

Button



Dazu sieht mein Programm so aus:

var zahl, x, y : integer;



procedure TForm1.Button1Click(Sender: TObject);
begin
y := edit1.text(StrToInt);
x := edit2.text(StrToInt);

zahl:=random((x-y)+1+y);
label1.caption := zahl;
end;

end.

nun hab ich wie zu erwarten in den Zeilen mit x und y ein Problem.
Operator oder Semikolon fehlt. Was habe ich falsch gemacht?

edit: Das ich "randomize;" noch nicht eingebaut habe ist mir auch bewusst :D
 
Zuletzt bearbeitet:
ich musste erstmal eine weitere aufmachen..:D

Ich verstehe nicht ganz was du von mir willst. Irgendwo kann an vielen Stellen sein.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
y := StrToInt(edit1.text);
x := StrToInt(edit2.text);

zahl:=random((x-y)+1+y);
label1.text := zahl;
end;

Probiers mal lieber so (meine Delphi Zeiten sind Jahre her merke ich gerade :D)!

Der Aufruf von StrToInt funzt glaub ich so rum, anders wärs ja eine Funktion mit Namen edit1.text. Hier kann ich mich aber auch irren, aber in vernünftigen Programmiersprachen wäre das so :)
Und beim random fehlte die Klammer vorne! Die inneren Klammern sind aber btw garnicht nötig! Außerdem steht da im Grunde nur x+1.
 
Zuletzt bearbeitet:
es heißt
x:=strtoint(edit1.text);
 
Okay. Ich bin doof.
Ja, hätte ich auch selbst drauf kommen können.
Nun muss ich noch irgendwo ein inttostr in der zeile mit dem label einbringen, richtig?
 
1. Steht sicher in der Hilfe, welche Datentypen Label annimmt,
2. würde ich ganz schnell versuchen, deinen Lehrer von einer anderen Programmiersprache zu überzeugen :D
 
Ja, Label Captions erfordern einen String, du must also "zahl", was ja ein Integer ist, als String casten.

@Nilpferd: Delphi steht oft auf dem Lehrplan, ich musste das damals auch lernen, vor etwas längerer Zeit :D Man hat da leider keine Wahl!
 
var
zahl, x, y : integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
y := StrToInt(edit1.text);
x := StrToInt(edit2.text);

zahl:=random((x-y)+1+y);
label1.caption := IntToStr(zahl);
end;

end.



Schönen Gruß,
Stephan
 
Ich weiß, ich lern das zur Zeit auch, weil unserer Lehrer nix anderes kann (O-Ton) :D
Würds trotzdem probieren, fragen kostet nix und mit ein wenig Glück lernt man dann was vernünftiges^^
 
richtig.
Aber die random Zahl ist fail.... Die soll ja im bereich y und x sein. Dann musste erstmal ne abfrage machen, welche der beiden Zahlen die größere ist.
Nehmen wir mal o.B.d.A an, dass x die größere Zahl ist dann musste sowas schreiben wie:
Zahl:= random(x-y) + y + 1;
So wärs dann richtig. Also noch mal zur erklärung ein Beispiel:
Sei x = 10 und y = 3; Dh: zahl := random(10 - 3) + 4;
also erstellt random eine Zahl zw. 0 und 6, wenn du dann 4 auf addierst biste wieder im Bereich von x und y.
 
DunklerRabe schrieb:
Und beim random fehlte die Klammer vorne! Die inneren Klammern sind aber btw garnicht nötig! Außerdem steht da im Grunde nur x+1.

Das mit der Klammer ist mir aufgefallen. Und wenn das so ist, dann ist es falsch. Ich möchte ja eine Zufallszahl zwischen zwei bestimmten Zahlen angeben, das heiß ich muss y von x abziehen, dann hat man den bereich, das ganze dann um 1 hochsetzen, damit auch nur der bereich dazwischen angegeben wird. und wenn y über 1 ist muss es ja auch noch um y erhöht werden.

Wo deklariere ich "zahl" nun als String? In der Zeile mit dem Label kommt nichts vernünftiges bei raus.
 
Delphi ist halt schön anschaulich, aber C++ ist eigentlich viel nützlicher vor allem in Hinblick aufs Studium. Da kannste dann auch mit Pointern und Referenzen oder OOP rumhantieren. In Delphi hab ich den in meinen 3 Jahren Info in der Schule nie gesehn.
 
Es sieht nun soo aus:

var
zahl, x, y : integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
y := StrToInt(edit1.text);
x := StrToInt(edit2.text);

if y > x then
randomize;
zahl:=random(x-y)+1+y;
label1.caption := IntToStr(zahl);

if y < x then
randomize;
zahl:=random(y-x)+1+x;
label1.caption := IntToStr(zahl);

if y = x then
label1.caption := IntToStr(y)
end;

end.
 
Genau, und für ein paar Zufallszahlen dann mit Pflichtenheft, Flußdiagramm und ganz vielen Objekten und Pointern, weil es die Sache ja so ungemein vereinfacht...:freak:

Warum läßt du die Zahl nicht einfach über random(x) + y erzeugen?

Random(x) erzeugt eine Zahl zwischen 0 (war's so?) und x, dazu addierst du einfach y und liegst zwischen den Grenzen.

Oder wo habe ich jetzt den Denkfehler??? :rolleyes:
 
müsste es nicht:

if y > x then begin
randomize;
zahl:=random(x-y)+1+y;
label1.caption := IntToStr(zahl);
end;

if y < x then begin
randomize;
zahl:=random(y-x)+1+x;
label1.caption := IntToStr(zahl);
end;
heißen?
und soviel ich weiß, reicht es wenn du randomize einmal oben drüber schreibst.

@drdoctor:
x:=5, y := 10;
mit deiner Methode kommst du auch auf 15, (5+10, wenn random 5 liefert)
 
Zuletzt bearbeitet:
@drdoctor:
Beispiel: sei x = 10 und y = 3 wie oben
erzeugt random(x) eine zahl wie 9 und du addierst y drauf. dann bist du bei 12 und zwölf liegt nicht mehr im Intervall [3 ; 10]
Ergänzung ()

außerdem kann der TE auch gerne randomize auf die Form schreiben, oder oberhalb jedweder abfrage.
@Drdoctor nochmal:
natürlich sind pointer und der ganze Kram hier natürlich völlig oversized. aber ein Ausblick fürs Studium wär doch toll.
 
Ja, sach ich doch! :D

Meine letzten Pascal Schritte sind offenbar noch etwas länger her....
Danke für die Erleuchtung!

Pointer etc:
Ja sicherlich, aber in diesem Fall ging es doch nur um eine Zufallszahl, daher meine Verwunderung für den Vorschlag.
Das die Lehrer/Lehrplan das so wollen finde ich ok, für die ersten Schritte mit einer Programmiersprache ist Pascal gut geeignet.

Ob es später prozedural oder objektorientiert wird, hängt, denke ich, auch von der Problemstellung selbst ab, hat Alles seine Vor- und Nachteile.
 
Zuletzt bearbeitet:
Pointern und Referenzen oder OOP rumhantieren
Geht alles in Delphi auch wunderbar!

Das sollte funktionieren.
Wichtig ist die Prüfung, ob StrToInt funzt!

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  Zahl,
  I,
  X, Y: Integer;
begin
  try
    X := StrToInt(Edit1.Text);
    Y := StrToInt(Edit2.Text);
  except
    ShowMessage('Fehler bei der Umwandlung StrToInt');
    Exit;
  end;

  I := X - Y;
  if I > 0 then
    Zahl := Y + Random(I + 1)
  else
    Zahl := X + Random(Abs(I) + 1);
end;
 
Zuletzt bearbeitet:
Zurück
Oben