AGB  ·  Datenschutz  ·  Impressum  







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

Zufallszahl mit Ausnahme

Ein Thema von Stefan92 · begonnen am 4. Apr 2008 · letzter Beitrag vom 27. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Stefan92

Registriert seit: 9. Jan 2007
146 Beiträge
 
Delphi 7 Enterprise
 
#1

Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 13:39
So, nach längerer Pause hätte ich mal wieder eine Frage.

Und zwar möchte ich eine Zufallszahl ermitteln, wobei es im Zahlenbereich Ausnahmen gibt.
Ein einfaches Beispiel:

Ich möchte eine zufällige Zahl von 1 bis 10 ziehen, wobei die Zahlen 3 und 5 nicht gezogen werden dürfen. Die Zahlen 3 und 5 sollen später beliebig sein.

Natürlich könnte ich jedesmal, wenn eine verbotene Zahl vorkommt nochmal die Zufallsfunktion aufrufen, doch das könnte im schlimmsten Falle lange Wartezeiten verursachen. Hat jemand eine Idee, wie ich dieses Problem effizient und elegant löse?

Ich hoffe, ich habe es einigermaßen verständlich formuliert.

Gruß

Stefan
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 13:42
Hallo,

Du könntest Dir alle Zahlen die Du haben möchtest
in ein Array of Integer packen, die Indizes dann per random
auswählen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 13:42
Delphi-Quellcode:
const Zufallszahlen:array[0..7] of byte=(1,2,4,6,7,8,9,10);
...
Zahl:=Zufallszahlen[random(8)];
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 13:43
Moin auch

Ganz einfach:
Delphi-Quellcode:
if i = 3 then
  Inc(i)
else
  if i = 5 then
    Inc(i,2);
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 13:48
Zitat von MacGuyver:
Moin auch

Ganz einfach:
Delphi-Quellcode:
if i = 3 then
  Inc(i)
else
  if i = 5 then
    Inc(i,2);
So wären die Zahlen nicht mehr zufällig, da die 4 und die 7 häufiger kommen würden.
Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Stefan92

Registriert seit: 9. Jan 2007
146 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 13:50
Danke für die vielen Antworten.

Ich werde es mit einem dynamischen Array machen, da sich die verbotenen Werte in jedem Durchlauf erhöhen werden.

Damit wäre das Problem gelöst, danke!

Gruß

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 14:39
Noch ein kleiner Beitrag zum Thema:

Delphi-Quellcode:
function RandomBeside(const min, max: Integer; const beside: array of Integer): Integer; overload;
var
  i, j: Integer;
  inarray: Boolean;
begin
  repeat
    i := Random(max - min) + min;
    inarray := False;
    for j := 0 to Length(beside) - 1 do
      if beside[j] = i then begin
        inarray := True;
        Break;
      end;
  until (not inarray);
  Result := i;
end;

function RandomBeside(const max: Integer; const beside: array of Integer): Integer; overload;
begin
  Result := RandomBeside(0, max, beside);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  rnd: Integer;
begin
  // Zufalls Zahl zw. 0 und 9 ausser 3,5 und 7
  rnd := RandomBeside(10, [3, 5, 7]);
end;
  Mit Zitat antworten Zitat
Stefan92

Registriert seit: 9. Jan 2007
146 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Zufallszahl mit Ausnahme

  Alt 4. Apr 2008, 21:35
Danke, werde ich auch mal ausprobieren.
Ursprünglich ging es darum, jedem Buchstaben im Alphabet einen anderen zuzuweisen, ohne dass dabei einer doppelt oder mehrfach vorkommt.

Ich poste mal meinen Code (leider noch unkommentiert):

Delphi-Quellcode:
function Alphabet_Neu: String;
var ErlaubteZeichen: array of char;
    i, j, zufall: Integer;
    zeichen, hilf: Char;
begin
  SetLength(ErlaubteZeichen, 26);
  for j := 0 to High(ErlaubteZeichen) do
    ErlaubteZeichen[j] := chr(ord('A') + j);

  for i := 1 to 26 do
  begin
    zufall := Low(ErlaubteZeichen) +
              Random(High(Erlaubtezeichen) - Low(ErlaubteZeichen) + 1);
    zeichen := ErlaubteZeichen[zufall];

    hilf := ErlaubteZeichen[zufall];
    ErlaubteZeichen[zufall] := ErlaubteZeichen[High(ErlaubteZeichen)];
    ErlaubteZeichen[High(ErlaubteZeichen)] := hilf;

    SetLength(ErlaubteZeichen, 26 - i);

    result := result + zeichen + ' ';
  end;
end;

procedure TfrmAlphabet.BtnNewAlphabetClick(Sender: TObject);
begin
  PnlNeu.Caption := Copy(Alphabet_Neu, 1, length(Alphabet_Neu) - 1);
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Zufallszahl mit Ausnahme

  Alt 5. Apr 2008, 08:30
Hallo Stefan,

du kannst dein Problem auch als zufällige Neuanordnung einer gegebenen Menge von Zeichen (Mischen) betrachten:

Delphi-Quellcode:
function Shuffle(const s: string): string;
var
  i, iRand: Integer;
  cTemp: Char;
begin
  Result := s;
  for i := Length(Result) downto 2 do
  begin
    iRand := Succ(Random(i));
    cTemp := Result[i];
    Result[i] := Result[iRand];
    Result[iRand] := cTemp;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#10

Re: Zufallszahl mit Ausnahme

  Alt 5. Apr 2008, 12:38
Zitat von Stefan92:
Ursprünglich ging es darum, jedem Buchstaben im Alphabet einen anderen zuzuweisen, ohne dass dabei einer doppelt oder mehrfach vorkommt.
das klingt mir nach Bei Google suchenmonoalphabetische verschlüsselung. gehts in die richtung? falls ja findest du hier In der Entwickler-Ecke suchenmonoalphabetische und hier Hier im Forum suchenmonoalphabetische sicher genügend beispiele, wie sich ein alphabet mappen lässt.

<HTH>
  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 14:27 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