AGB  ·  Datenschutz  ·  Impressum  







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

Zahlen nur einmal vorkommen lassen

Ein Thema von Reap3r · begonnen am 28. Apr 2010 · letzter Beitrag vom 29. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
Reap3r

Registriert seit: 19. Mär 2009
87 Beiträge
 
#1

Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 21:49
Hi Leute!

Ganz simple Situation:

Ich würfel 13 mal mit einem Spielraum von 1 - 13:
x= random(13) + 1 Jetzt soll aber verhindert werden, dass eine der Zahlen mehrmals vorkommt.
es sollen beim würfeln also alle Zahlen, jeweils 1 mal, vorkommen.

Wie mache ich das?

Danke für alle Antworten
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 21:53
Schreibe die Zahlen in einen dynamischen Array oder einer Liste. Dann wähle durch Zufall eine aus. Entferne diese aus dem Array/der Liste
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 21:53
a) entweder alle schon gewürfelten Nummer merken
und wenn die gerade gewürfelte Nummer schonmal vorkam, dann solange weiterwürfeln, bis eine andere Nummer auftaucht.

b) eine liste aller nummern erstellen und via Zufall eine Nummer aus der Liste ziehen
nach der Ziehung die Nummer da rauslöschen.

Vorteil von letzerem ist, daß man keine Ziehung wiederholen muß.


[add]
schonwieder keine RedBox
$2B or not $2B
  Mit Zitat antworten Zitat
Reap3r

Registriert seit: 19. Mär 2009
87 Beiträge
 
#4

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 22:06
hmm das mit dem merken hab ich mir schon gedacht, aber wie sieht das im Code aus?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 22:09
Z.B. in einem dyn. Array oder einer Liste.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 22:09
Zitat von Reap3r:
aber wie sieht das im Code aus?
Da würde ich einfach mal auf die Forensuche verweisen ... vorallem auf die paar Hier im Forum suchenLotto-Threads.

Zitat von mkinzler:
Z.B. in einem dyn. Array oder einer Liste.
oder ein SET of (1..13)
$2B or not $2B
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 22:36
Ich würde aber eher die andere Lösung priorisieren
Markus Kinzler
  Mit Zitat antworten Zitat
Reap3r

Registriert seit: 19. Mär 2009
87 Beiträge
 
#8

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 22:47
Ich hab mir überlegt das ganze so zu gestalten, aber irgendwas stimmt nicht.

Delphi-Quellcode:
 var a: array [1..13] of integer;
 var i, x, j : integer; ok: boolean;
begin
 fori:=1 to 13 do
  begin
   x:= random(13)+1;
   ok:= true;
   for j:=1 to 13 do
    if x = a[j]
     then ok:= false;
   if ok then a[i] := x;
end;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zahlen nur einmal vorkommen lassen

  Alt 28. Apr 2010, 23:01
Du solltest unsere Tipps annhemen. Überlege mal wie du es unabhängig vom Rechner machen würdest, wenn du 13 Karten hättest. Würdest du nach dem du eine gezogen hast den wert aufschreiben und die Karte zurücköegen und nach jedem Zug schauen, ob der Wert auf der Liste steht oder auf ein Rücklegen verzichten?
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Zahlen nur einmal vorkommen lassen

  Alt 29. Apr 2010, 07:52
Ich weiss ja, wie man es richtig macht (Fisher-Yates), aber beim Ziehen von Karten ist mir das in den Sinn gekommen (Ich denke, das geht noch als Hilfe, ohne einem die Arbeit abzunehmen):
Delphi-Quellcode:
Procedure ZufaeligeReihenfolgeVonDreizehnZahlen;
Var
  i : Integer;
  Liste : TListeVonZahlen; // Geeigneten Datentyp ausdenken

Begin
  SchreibeDreizehnZahlenInDie(Liste); // Das ist einfach zu programmieren
  For i := 1 to 13 do begin
    Zahl := ZieheEineZufaelligeZahlAusDer(Liste); // Das auch
    Writeln('Gezogene Zahl ',Zahl);
    Entferne(Zahl, {aus der} Liste); // Und das auch, hinterher hat die Liste ein Element weniger
  End;
End;
Das solltest Du umsetzen können.

Optimierungsvorschlag:
Man könnte das Ziehen und Entfernen auch in eine Routine packen. Das wäre natürlich viel schneller, weil ich ja die Position der Zahl kenne, die ich zufällig ausgewählt habe.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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:25 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