Zitat von
walli18:
Die letztendliche zufallszahl soll als Integerwert Schwierigkeitsgrad heißen.(Das ist zwar eine blöde Bezeichnung, aber ich habe bis jetzt die Lösungen und Fragen damit schon bezeichnet, deswegen wäre das nicht schlecht, die Zufallszahl gleich so auszugeben)
halte ich für ungünstig, den zufallszahlen einer liste mit verschiedenen "Funktionen" zu belegen.oder hab ich dich falsch verstanden....die zufallszahl sollte schon unabhängig der liste gezogen werden.
Zitat von
walli18:
Das wäre die Theoretische Lösung, ich hofe, dass mir das jemand in nen Quelltext packen kann!
Ich freue mich schon auf die Antworten!!
der Großteil wurde doch schon gelöst...bisschen Eigeninitiative wäre schon wünschenswert.
hatte bisschen Langeweile und hab das ganze mal zu Übungszwecken (und zur Verwirrung) absichtlich bisschen komplexer gelöst *g*:
Delphi-Quellcode:
var
numbers:array[0..1] of cardinal;
...
function allBitsSet(maxvalue:integer):boolean;
var max1,max2:boolean;
begin
if maxvalue>32 then
begin
max1:=(numbers[0] xor ($FFFFFFFF))=0;
max2:=(numbers[1] xor ((1 shl (maxvalue-32))-1)=0)
end else
begin
max1:=(numbers[0] xor ((1 shl maxvalue)-1)=0);
max2:=true;
end;
result:=max1 and max2;
end;
function GetRndNumber(maxvalue:byte):byte;
var bitpos,idx:byte;
mynumber:byte;
begin
result:=0;
if maxvalue>64 then exit;
//abruchbedingung, wenn alle bits gesetzt sind
if allbitsset(maxvalue) then
begin
showmessage('maximale anzahl der Zufallszahlen erreicht');
exit;
end;
while result=0 do
begin
mynumber:=random(maxvalue)+1;
idx:=(mynumber-1) div 32;
bitpos:=mynumber-(idx*32);
if (numbers[idx] and (1 shl (bitpos-1)))=0 then
begin
numbers[idx]:=(numbers[idx] or (1 shl (bitpos-1)));
result:=mynumber;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var n:byte;
begin
n:=GetRndNumber(40);
label1.caption:=inttobin(numbers[0]);
label2.caption:=inttobin(numbers[1]);
ShowMessage(IntToStr(n));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
numbers[0]:=0;
numbers[1]:=0;
end;
vielleicht ist ja die eine oder andere funktion hilfreich.
hab grade mit TLargeIntger rumgespielt und da wollte ich bisschen rumspielen
mal im Ernst, die array-Variante von Marc ist schon die effektivste
Gruß Frank