AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Lottozahlengenerator

Ein Thema von Siggy · begonnen am 1. Mai 2009 · letzter Beitrag vom 2. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#1

Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 12:55
Hallo Community,

Wir sollen einen Lottozahlengenerator in der Schule programmieren.
Nun habe ich durch langes rumstöbern was gefunden...

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

begin
  for i:= 1 to 49 do Zahlen[i]:=false;
  for i:=1 to 6 do begin
   repeat
    z:=random(49)+1
   until Zahlen[z] = false;
   Zahlen[z]:=true;
  end;
  Edit1.Text:='';
  for i:=1 to 49 do
   if Zahlen[i] then memo1.Lines.add (Inttostr(i));
end;
Nur leider versteh ich so ziemlich gar nichts bei dem Code.
Kann mir den jemand verständlich erklären?
So alles bisschen ausseinanderpflücken und dann vlt so immer 2 Zeilen zusammenfassen in verständliches "Normalodeutsch" ?

Weitere Fragen:
Gibt es eine Möglichkeit, dass ich die Zahlen nicht alle auf einmal in dem Memo ausgebe? Sondern vor Jede Zahl noch eine Zeile oder so einfügen kann, sowas wie:
Zahl1: 23
Zahl2: 12

usw.
Geht das? Und wenn ja, wie?


mfg Siggy
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 13:00
Scheinbar bedeutet heute Programmieren suchen nach einer Copy&Paste-Lösung!
Überleg dir doch einfach die Vorgehensweise, wenn du das mit Blatt und Stift lösen müsstest und versuche dann die Lösung in Delphi umzusetzen!
Markus Kinzler
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#3

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 13:05
Zahlen wird wohl ein Array[1..49] of Boolean sein. Die Indizes 1-49 stellen die Werte der deutschen Lottozahlen dar.
Als erstes werden alle Elemente des Arrays auf False gesetzt, was wohl einem 'nicht gezogen' entspricht.

Anschließend werden 6 Zahlen in einer for-Schleife 'gezogen', in dem mittels einer repeat..unitl-Schleife solange ein Zufallswert zwischen 1 und 49 ermittelt wird, bis ein Index gefunden wird, dessen Element im Array auf False steht, um Doppelziehungen zu vermeiden. Dieser wird dann auf True gesetzt, also als 'gezogen' gekennzeichnet.

Abschließend wird das komplette Array durchgerattert, und alle Indizes, deren Element True ist, in das Memo geschrieben.

Meiner Meinug nach nicht optimal, aber da solltest Du Dir selber Gedanken machen.

Zu Deiner Frage:

Delphi-Quellcode:
var
   iCounter: Integer;
[...]
iCounter := 1;
for i := 1 to 49 do begin
   memo1.Lines.add (Format('Zahl %d: %d', [iCounter, i]));
   Inc(iCounter);
end;
Edit: CopyPaste-Fehler korrigiert
  Mit Zitat antworten Zitat
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#4

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 13:09
Ich hatte erst eine Lösung die auch funktioniert hat.
Die sah so aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d,e,f :integer;
begin
randomize;
repeat
  a:= random (49);
  b:= random (49);
  c:= random (49);
  d:= random (49);
  e:= random (49);
  f:= random (49);

until (a<>b) and (a<>c) and (a<>d) and (a<>e) and (a<>f)
and (b<>c) and (b<>d) and (b<>e) and (b<>f)
and (c<>d) and (c<>d) and (c<>f)
and (d<>e) and (d<>f)
and (e<>f);


edit1.Text := inttostr (a);
edit2.Text := inttostr (b);
edit3.Text := inttostr (c);
edit4.Text := inttostr (d);
edit5.Text := inttostr (e);
edit6.Text := inttostr (f);

Die auch funktioniert hat...
Allerdings ist die ja sehr unschön und ein ewig langer Text...
Unser Lehrer hat gemeint, dass wir das mit Arrays lösen sollen, allerdings hab ich davon keine Ahnung und daher hab ich hier gefragt ob mir das jemand anhand meines Lottogenerators erklären könnte.


Siggy
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 13:53
OK, hier mal die Erklärung:
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

begin
  for i:= 1 to 49 do Zahlen[i]:=false;
  for i:=1 to 6 do begin
   repeat
    z:=random(49)+1
   until Zahlen[z] = false;
   Zahlen[z]:=true;
  end;
  Edit1.Text:='';
  for i:=1 to 49 do
   if Zahlen[i] then memo1.Lines.add (Inttostr(i));
end;
Zahlen ist ein Array mit 49 Boolean-Elementen (also true oder false). In der ersten Zeile werden diese Elemente alle auf false gesetzt. Nun wird 6 mal Folgendes gemacht: es wird eine zufällige Zahl zwischen 1 und 49 gezogen. Dies wiederholt sich solange, bis das Array-Element an der gezogenen Position false ist. Im Anschluss daran wird dieses auf true gestellt. Ist dies 6 mal erfolgt, wird das Array erneut durchlaufen und die Position aller Elemente ausgegeben, an denen das jeweilige Element auf true steht. Das sieht dann etwa so aus:
Code:
//alle Elemente haben zu Beginn wohl einen zufälligen Wert
0111001101011001110011000010010000011010000111101

//nach der 1. Codezeile
0000000000000000000000000000000000000000000000000

//nach der 2. Schleife sind 6 zufällige Elemente auf true gesetzt
0010001000000100001100000000010000000000000000000

//in der letzten Schleife ergibt das dann folgende Lottozahlen
3 7 14 19 20 30
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#6

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 14:16
Erst einmal vielen Dank für die superschnelle Hilfe
Nun habe ich so ziemlich alles verstanden, denke ich.

Allerdings funktioniert eines nicht:

Delphi-Quellcode:
var
   iCounter: Integer;
[...]
iCounter := 1;
for i := 1 to 49 do begin
   memo1.Lines.add (Format('Zahl %d: %d', [IntToStr(iCounter),IntToStr(i)]));
   Inc(iCounter);
end;

Wenn ich das einfüge und das Programm starte und dann meinen Button anklicke kommt die Nachricht:

"Format '%d' ungültig oder nicht kompatibel mit Argument."


Liegt das vielleicht daran, dass ich Turbo Delphi habe?
Wenn ja, gibt es eine andere Möglichkeit?


mfg

Siggy
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#7

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 14:21
memo1.Lines.add (Format('Zahl %d: %d', [iCounter, IntToStri])); probier mal das.

//edit
%d bedeutet, dass er eine dezimalzahl (integer) erwartet, und du wolltest ihm nen string geben. mochte er net.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#8

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 14:36
Du könntest als Zähler natürlich auch einfach das i verwenden, das ohnehin schon da ist.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#9

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 19:07
Zitat von fwsp:
memo1.Lines.add (Format('Zahl %d: %d', [iCounter, IntToStri])); probier mal das.

//edit
%d bedeutet, dass er eine dezimalzahl (integer) erwartet, und du wolltest ihm nen string geben. mochte er net.

Funktioniert genau so wenig
Naja zur Not muss ich halt auf die unschönere Variante zugreifen und jede Zahl in einem Extra Edit oder Label ausgeben.



Funktioniert sowas eig auch mit Buchstaben?
Ich denke da an sowas wie die DNA, sprich ein String einer bestimmten Länge (10000 oder mehr) nur mit den Buchstaben A,C,G und T (Adenin,Cytosin,Guanin und Thymin)
Und der soll eine zufällige Reihenfolge erstellen:

ACTGAAACTGGCTGCACTAAGTCA....


Wenn dies möglich wäre, würde ich mich sehr freuen wenn mir jemand dazu was sagen könnte
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Frage zu Lottozahlengenerator

  Alt 1. Mai 2009, 21:40
Also ich würds so machen wie die Lottofee. Du hast 49 Bälle mit Zahlen von 1 bis 49. Diese mischst du durch und ziehst die ersten 6. Also n array von 1..49 durchmischen und die ersten 6 elemente sind dann deine Lösung. Ich find das ist einfach zu verstehen und auch die Umsetzung ist nicht wirklich kompliziert...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 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