Problem in Pascal!
Ich habe diesen Pascal Code:
Delphi-Quellcode:
Jetzt werden Zufallszahlen in diesen Zweidimensionalen Array geschrieben. Aber es sollen keine zahlen doppelt vorkommen. Wie kann ich es machen dass immer verschieden Zahlen in diesem Array stehen?
var i,j:integer;
zahl:array[1..n,1..n]of integer; begin randomize; for i:=1 to n do for j:=1 to n do zahl[i,j]:=random(9)+1; Danke! |
Re: Problem in Pascal!
Du musst prüfen, ob diese spezifische Zahl bereits erstellt wurde.
Da du nur 9 mögliche Zahlen hast, bietet sich an, ein Array[1..10] of Boolean zu benutzen, in dem du für jede Zahl angibst, ob sie bereits erzeugt wurde oder nicht. |
Re: Problem in Pascal!
Delphi-Quellcode:
versuche es mal damit! ist ein vorschlag von Christian Seehase soweit ich mich erinnere!
procedure TForm6.code_erzeugen;
var zahl: array [1..4] of integer; i, iZahl, iCount : integer; fExists : boolean; begin randomize; for i := 1 to 4 do zahl[i] := 0; iCount := 4; while iCount > 0 do begin iZahl := Random(6)+11; fExists := false; for i := 1 to 4 do begin if zahl[i] = iZahl then begin fExists := true; break; end; end; if not fExists then begin zahl[iCount] := iZahl; dec(iCount); end; end; end; |
Re: Problem in Pascal!
Delphi-Quellcode:
Pass aber auf, dass n*n <= 9, sonst hängt der Algorithmus in einer endlosen Schleife. Logisch.
var
i, j, rnd: integer; Zahl: Array[1..n, 1..n] of integer; SchonVerwendet: Set of integer; begin SchonVerwendet:=[]; for i:=1 to n do for j:=1 to n do begin repeat rnd:=Random(9)+1; until not (rnd in SchonVerwendet); Include(SchonVerwendet, rnd); Zahl[i,j]:=rnd; end; end; |
Re: Problem in Pascal!
|
Re: Problem in Pascal!
Hallo Neg,
so elegant der Weg mit dem Mengen-Konstrukt auch scheint, so wenig lässt sich in der von Delphi vorgenommenen Implementierung die Deklaration
Delphi-Quellcode:
compilieren.
var
SchonVerwendet: Set of integer; Hintergrund: Bei einem Set wird für jedes mögliche Element genau ein Bit gehalten, so dass bei einem
Delphi-Quellcode:
insgesamt 256 Bits abgelegt werden müssen. Im gegensatz zu ausgerichteten Feldern wir einem Array oder einem Record setzt der Delphi-Compilier die Struktur jedoch gepackt um, so dass für jeweils 8 Bits genau ein Byte verwendet werden kann, die Gesamtstrukur belegt daher für n mögliche Elemente den Speicherplatz
set of Byte
Code:
(das +7, um gauß'sche Klammern zu sparen) oder in mit dem Exponenten q zur Basis 2 ausgedrückt mit
s = (n+7) div 8
Code:
gilt daher
q = ln2(n)
Code:
Das bedeutete für den Speicherverbrauch s eines
s=2^(ln2(n)-3)
Delphi-Quellcode:
mit q=32 folglich
set of Integer
Code:
was also in dem Platzverbrauch von 512MB auf dem Stack entspräche...
s = 2^29 = 536870912
|
Re: Problem in Pascal!
Oha. Wusste ich noch gar nicht, dass Sets so implementiert sind. Dann kann das natürlich nicht klappen, stimmt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 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