Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Lotto HILFE´!!! (https://www.delphipraxis.net/35576-lotto-hilfe%B4.html)

school- delphi 9. Dez 2004 10:25


Lotto HILFE´!!!
 
Hallo liebe Delphi- Tüftler,

habe ein großes Problem. Wir schreiben morgen in Informatik eine Arbeit und wir müssen unnbedingt können, wie man ein Lottoprogramm programmiert. Dieses Lottoprogramm soll mit dem Datentyp Menge erreicht werden.
also var lottozahl: set of byte;

Die Ausgabe soll in einer Listbox erfolgen. Der Quellcode sollte möglichst einfach sein und ausschließen, dass eine Zahl zweimal erzeugt wird mit repeat ---- until not.

wer kann einen solchen quellcode für einen button(lOTTOZAHLEN ERMITTELN) schreiben.

Ich bin totale Anfängerin und damit vollkommen überfordert.
Bitte helft mir
Vielen Dank schon mal und baldige frohe Weihnacht :)
Ciao
Lisa

MiniKeks 9. Dez 2004 10:27

Re: Lotto HILFE´!!!
 
Hier findest du einen Lottozahlengenerator!
Wenn du da nicht durchblickst kann ich dir helfen!

http://www.delphi-forum.de/topic_Lot...sion_8763.html

Gruss MiniKeks

sakura 9. Dez 2004 10:28

Re: Lotto HILFE´!!!
 
Hi, lies Dir mal folgendes durch: FAQ-Eintrag zum Stichwort "Null Bock""Null Bock".

Anschließend schreibe uns mal, wie weit Du von alleine kommst, wählen einen vernünftigen Titel und wir sind gerne bereit Dir zu helfen.

...:cat:...

school- delphi 9. Dez 2004 10:32

Re: Lotto HILFE´!!!
 
Hallo,
ich versuch das schon selber, aber das ist immer vollkommen unermutigend, wenn das dauenrnd nicht klappt. Also das hier hab ich schon mal, aber naja

Delphi-Quellcode:
var
  Form1: TForm1;
  lottozahl: set of byte;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,y: integer;
begin
i:= 0;
for i:= 1 to 6 DO
Y:= random(49)+1;
ListBox1.Items.Add(inttostr(y));
end;
Danke schon für eure Antworten
Lisa

[edit=MrSpock]Delphi-Tags eingefügt. Mfg, MrSpock[/edit]

Treffnix 9. Dez 2004 10:35

Re: Lotto HILFE´!!!
 
Und was genau ist jetzt dein Problem?

Übrigens, wenns für ne Arbeit ist, wird dir ein fertiger Quelltext sowieso nichts nützen, wenn du ihn nicht verstehst. Du kannst ihn ja schlecht auswendig lernen.

school- delphi 9. Dez 2004 10:36

Re: Lotto HILFE´!!!
 
hallo
naja ist halt das Problem, dass wir n auswendig können müssen und ich komm schon ab da nicht mehr weiter.

grüße
lisa

bigg 9. Dez 2004 10:39

Re: Lotto HILFE´!!!
 
Ich frag mich grad warum ihr da ein Set of Byte benutzen sollt?
Ich glaube euer Lehrer meinte Array.

Matze 9. Dez 2004 10:39

Re: Lotto HILFE´!!!
 
Zitat:

Zitat von school- delphi
naja ist halt das Problem, dass wir n auswendig können müssen und ich komm schon ab da nicht mehr weiter.

Auswendig können musst du gar nichts, sondern nur Delphi verstehen.

Treffnix 9. Dez 2004 10:39

Re: Lotto HILFE´!!!
 
Das ist ja, was ich meine, wenn du ihn verstehst, kannst du ihn problemlos nachbauen. Wenn du ihn auswendig lernst, wirst du garantiert Fehler einbauen.

Wenn du mitteilen würdest, an welcher Stelle du Probleme hast, könnte man auch versuchen dir zu helfen.

fiasko 9. Dez 2004 10:41

Re: Lotto HILFE´!!!
 
Ach immer die Leute die sich nur wegen einer Arbeit in den nächsten Tag anmelden.... :thumb:

Erstmal mußt du sagen um was den für ein Lotto es sich denn handelt, imho gibt es da verschiedene Modi bzw. spielt hier sicher nur ne Minderheit Lotto und weiss deswegen wie ich nichts genaues drüber :-).

Und wie schon gesagt wurde, was ist denn jetzt dein Problem? Wo kommen Fehlermedlung bzw. woch macht der Code nicht das was du erwartest?

school- delphi 9. Dez 2004 10:42

Re: Lotto HILFE´!!!
 
hallo
danke für eure antworten

also ich hänge and der stelle mit until not und an dieser komischen menge und wenn ich den quellcode so durchlaufen lasse kommt nur eine zahl in der listbox.

sorry, dass ich wahrscheinlich mich richtig unprofessionell anhöre, aber bin echt überfordert momentan- schulstress/abistress

grüße
lisa

fiasko 9. Dez 2004 10:46

Re: Lotto HILFE´!!!
 
Zitat:

Zitat von school- delphi
also ich hänge and der stelle mit until not und an dieser komischen menge und wenn ich den quellcode so durchlaufen lasse kommt nur eine zahl in der listbox.

Also entweder hast du nicht allen Code gepostet... ich sehe jedenfalls kein until dort oben! Das nur ein Wert dort reinkommt ist klar, du willst doch sicher das das ListBox.Add mit in die for-Schleife kommt? Dann bekommst du auch 6 Werte.

Treffnix 9. Dez 2004 10:54

Re: Lotto HILFE´!!!
 
Fangen wir mal an:

for.. Do führt nur die nächste Anweisung in Schleife aus. Wenn du mehrere Anweisungen ausführen willst, musst du es in Begin..End kapseln
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,y: integer;
begin
i:= 0; // unnötig bei For-Schleifen
for i:= 1 to 6 DO
Y:= random(49)+1; // hier läuft dein Programm 6 mal lang ( für i von 1 - 6 )
ListBox1.Items.Add(inttostr(y));// erst anschliessend läuft dein Programm hierhin und schreibt das letzte y in die Box
end;

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,y: integer;
begin
  for i:= 1 to 6 DO
  Begin
    Y:= random(49)+1;
    ListBox1.Items.Add(inttostr(y));
  End;
end;
So hätteste zumindest schonmal alle Zahlen in der Box. Allerdings benutzt du dein Set ja gar nicht und hast somit auch keine Prüfung auf doppelte Zahlen.

school- delphi 9. Dez 2004 10:59

Re: Lotto HILFE´!!!
 
hallo,

schon mal vielen vielen Dank vor allem für die letzte Antwort, die hat mich schon mal sehr weitergebracht.

Nur stellt sich jetzt noch die frage
wie man das überprüfen kann (until not); dass man nicht zweimal die gleiche erzeugt.


Vielen Dank nochmal
und schöne baldige Weihnachten
Viele Grüße
Lisa

Treffnix 9. Dez 2004 11:03

Re: Lotto HILFE´!!!
 
Dafür ist wohl das Set gedacht.

Guck dir mal in der Delphi-Hilfe den Begriff Delphi-Referenz durchsuchenMengentypen an, wenn ihr das noch nicht im Unterricht hattet.

fiasko 9. Dez 2004 11:04

Re: Lotto HILFE´!!!
 
oder schau einfach nach, ob die Zahl schon in der ListBox steht, also sowas der Art:

Delphi-Quellcode:
repeat
  Y:=random(49)+1;
until ListBox1.Items.IndexOf(IntToStr(y))=-1;
(ungetestet, da grad kein Delphi zu Hand)

school- delphi 9. Dez 2004 11:06

Re: Lotto HILFE´!!!
 
Hallo,

also erstmal klappt das jetzt, dass wenigstens 6 Zahlen in der Listbox erscheinen- dafür bin ich unendlich froh. Jetzt könnte man ja die for schleife in repeat until umändern.

begin
for i:= 1 to 6 DO
repeat
Y:= random(49)+1;
ListBox1.Items.Add(inttostr(y));
until not lottozahl= y;
end;

Die rote zeile funktioniert ja nicht, aber so in der art glaube ich sollten wir das machen. Desweiteren haben wir noch aufgeschrieben verschiedene mengenoperationen, wie differenzmenge und so, aber weiß nicht ob das was damit zu tun hat.


Vielen Dank euch allen nochmal
Lisa

school- delphi 9. Dez 2004 11:08

Re: Lotto HILFE´!!!
 
hallo,

also wenn man das so versucht- klappts leider nicht--- unendlich viele zahlen in der listbox erscheinen dann.

begin
for i:= 1 to 6 DO
repeat
Y:= random(49)+1;
ListBox1.Items.Add(inttostr(y));
until not ListBox1.Items.IndexOf(IntToStr(y))=-1;
end;

danke!
grüße
lisa

Treffnix 9. Dez 2004 11:11

Re: Lotto HILFE´!!!
 
1. Benutz für Quellcode bitte die [delphi] Tags ( oder den Button Delphi-Code ). Ist einfach lesbarer.
2. Ja, das geht mit den Mengen. Darum sag ich ja schau mal in der Hilfe nach. In sets kannst du mit + Werte hinzufügen mit - entfernen und mit <Wert> in <Set> kannst du abfragen, ob der Wert schon in der Menge ( der Lottozahlen ) enthalten ist

alcaeus 9. Dez 2004 11:11

Re: Lotto HILFE´!!!
 
Hallo Lisa,

erstmal verwende bitte die [ delphi] [ /delphi]-Tags (ohne Leerzeichen), dann kann man den Code auch vernuenftig lesen.
Zum Problem: Der Code den du gepostet hast ist falsch. Du willst ja keine Zahl doppelt haben. Nachdem du kein Set benutzt, musst du es so machen wie Fiasko gesagt hat:
Delphi-Quellcode:
for i:= 1 to 6 do
begin
  repeat
    Y:=random(49)+1;
  until ListBox1.Items.IndexOf(IntToStr(y))=-1;
  ListBox1.Items.Add(inttostr(y));
end;
Nun die Erklaerungen:
wir machen das Ganze 6 mal, wie bereits gehabt. Anstatt aber nun die Zahl zu suchen, und dann hinzuzufuegen, suchen wir nun bis dir Zahl nicht mehr in der ListBox ist. Dies erledigt der Befehl ListBox1.Items.IndexOf (Delphi-Referenz durchsuchenIndexOf). Wird das Element nicht gefunden, so liefert die Funktion -1 zurueck. In dem Fall fuegen wir die Zahl der Liste hinzu, ansonsten suchen wir weiter.

Greetz
alcaeus

fiasko 9. Dez 2004 11:15

Re: Lotto HILFE´!!!
 
Hallo,

Zitat:

Zitat von school- delphi
also wenn man das so versucht- klappts leider nicht--- unendlich viele zahlen in der listbox erscheinen dann.

Das glaub ich dir nicht :-) Der Rechner hat nur endlichen Speicher :mrgreen:

Ich meinte das eher so:

Delphi-Quellcode:
begin
  for i:= 1 to 6 do
  begin
    // Solange Zahlen testen bis wir ein neue noch nicht in der Listbox stehende in Y haben
    repeat
      Y:= random(49)+1;
    until ListBox1.Items.IndexOf(IntToStr(y))=-1;

    ListBox1.Items.Add(inttostr(y));
  end;
end;
[edit]
Verdammt, wieder Bummelletzter :wall:
[/edit]

school- delphi 9. Dez 2004 11:16

Re: Lotto HILFE´!!!
 
Hallo,

vielen Dank erstmal. Leider hat die Version nicht geklappt. Und mein grö0tes Problem ist dass es genau um die menge geht (Hauptbestandteil der Arbeit)
Und die Lottozahlen müssen unabdingbar auch diese arbeitsweisen mit mengen besitzen.

danke aber
grüße
lisa

alcaeus 9. Dez 2004 11:19

Re: Lotto HILFE´!!!
 
Hi Lisa,

in dem Fall solltest du dir mal die Hilfe zu Mengen ansehn. Ein Beispiel mit mengen:

Delphi-Quellcode:
var Menge: set of Byte;
    i: Integer;
begin
  Menge := []; //Menge initialisieren
  Randomize; //Zufallsgenerator initialisieren
  for i := 1 to 6 do
    repeat
      y := Random(49)+1; //Zahl generieren
    until y not in Menge; //Ueberpruefen ob Zahl schon in Menge
    Menge := Menge + [y]; //Zahl zu Menge hinzufuegen
    ListBox1.Items.Add(IntToStr(y)); //Zahl zu Listbox hinzufuegen
  end;
end;
Wichtig: Ich hab den Code nicht getestet, er sollte aber funktionieren.

Greetz
alcaeus

school- delphi 9. Dez 2004 11:20

Re: Lotto HILFE´!!!
 
DANKE

also jetzt klappt das mit dem überprüfen anhand dem index.
Nur ich muss leider mit den mengen arbeiten.
Leider weiß ich überhaupt nichts mit dem until not anzufangen, obwohl das der Lehrer ausdrücklich betont hat. :cry:

Aber vielen vielen dank
Lisa

Treffnix 9. Dez 2004 11:24

Re: Lotto HILFE´!!!
 
:gruebel:

Das letzte Beispiel von alcaeus arbeitet doch mit Mengen und repeat. Im Grunde ist das schon deine Lösung.

Orbmu2k 9. Dez 2004 11:27

Re: Lotto HILFE´!!!
 
Code von alcaeus berichtigt ...

Delphi-Quellcode:
var
  Menge: set of Byte;
  i,y: Integer;
begin
  Menge := []; //Menge initialisieren
  Randomize; //Zufallsgenerator initialisieren
  for i := 1 to 6 do
  begin
    repeat
      y := Random(49)+1; //Zahl generieren
    until not (y in Menge); //Ueberpruefen ob Zahl schon in Menge
    Menge := Menge + [y]; //Zahl zu Menge hinzufuegen
    ListBox1.Items.Add(IntToStr(y)); //Zahl zu Listbox hinzufuegen
  end;
end;

school- delphi 9. Dez 2004 11:28

Re: Lotto HILFE´!!!
 
Hallo
die Lösung von alcaeus ist total super und verständlich. Erstmal herzlichen Dank - nur in der Zeile mit dem until not tauchen folgende Fehler auf:

[Fehler] Unit1.pas(41): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(41): Operator ist auf diesen Operandentyp nicht anwendbar

Ich glaube ich schicke nochmal den ganzen quellcode- wie geht das mit dem delpgi tags

vielen dank liebe delphi- Könner
Lisa

bigg 9. Dez 2004 11:29

Re: Lotto HILFE´!!!
 
Ich weis nicht, aber man hätte ja auch suchen können.
http://www.delphipraxis.net/search.p...69127&start=0&

Treffnix 9. Dez 2004 11:31

Re: Lotto HILFE´!!!
 
@ Bigg: "Keine Beiträge entsprechen Deinen Kriterien."

@ school - delphi: beim Beitrag erstellen oben den Button "Delphi-Code" drücken, Quelltext einfügen und nochmal den gleichen Button drücken

school- delphi 9. Dez 2004 11:34

Re: Lotto HILFE´!!!
 
Hallo

es klappt jetzt--- ihr seid echt super
vielen herzlichen dank

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

 var
  Menge: set of Byte;
  i,y: Integer;
begin
  Menge := []; //Menge initialisieren
  Randomize; //Zufallsgenerator initialisieren
  for i := 1 to 6 do
  begin
    repeat
      y := Random(49)+1; //Zahl generieren
    until not (y in Menge); //Ueberpruefen ob Zahl schon in Menge
    Menge := Menge + [y]; //Zahl zu Menge hinzufuegen
    ListBox1.Items.Add(IntToStr(y)); //Zahl zu Listbox hinzufuegen
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;

school- delphi 9. Dez 2004 11:38

Re: Lotto HILFE´!!!
 
Hallo,


Abschließend will ich mich nochmal bedanken. Ihr habt mir sehr weitergeholfen. Meine Fragen werden sich für Profis wahrscheinlich vollkommen unprofessionell anhören. Aber der ganze Stress, obwohl ich Delphi spannend finde und mich auch in meiner nächsten Freizeit mal ohne Schulzwänge so richtig damit befassen werde.

Vielen Dank und baldige schöne Weihnachten!!!!

Lisa

glkgereon 9. Dez 2004 11:48

Re: Lotto HILFE´!!!
 
eins noch:

man muss nur einmal randomize; machen, du machst es zweimal... :wink:

negaH 18. Dez 2004 09:52

Re: Lotto HILFE´!!!
 
Am effizientesten dürfte das sein:

Delphi-Quellcode:
type
  TZahlen = array of Integer;

procedure Lotto(var Sortiert,Gezogene: TZahlen; Ziehungen: Integer = 6; Elemente: Integer = 49);
var
  I,J,K,N: Integer;
begin
  Sortiert := nil; // stellt sicher das Sortiert <> Gezogene ist
  Gezogene := nil;

  if Ziehungen > Elemente then
    raise Exception.Create('Man kann nicht mehr Kugeln ziehen als in der Urne sind');

  SetLength(Sortiert, Ziehungen);
  SetLength(Gezogene, Ziehungen);

  for I := 0 to Ziehungen -1 do
  begin
    K := 0;
    N := Random(Elemente - I) + 1;
    for J := 0 to I -1 do
      if N >= Sortiert[J] then
      begin
        Inc(N);
        Inc(K);
      end else Break;
    for J := I downto K +1 do
      Sortiert[J] := Sortiert[J -1];
    Sortiert[K] := N;
    Gezogene[I] := N;
  end;
end;

procedure Test;

  procedure Print(const Title: String; const Zahlen: TZahlen);
  var
    I: Integer;
  begin
    Write(Title);
    for I := 0 to High(Zahlen) do Write(Zahlen[I]:4);
    WriteLn;
  end;

var
  Sortiert,Gezogene: TZahlen;
begin
  Lotto(Sortiert, Gezogene, 10, 10);

  Print('gezogene : ', Gezogene);
  Print('sortiert : ', Sortiert);
  WriteLn;
end;
In deinem Falle also:

Lotto(Sortiert, Gezogene, 60, 60);

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz