AGB  ·  Datenschutz  ·  Impressum  







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

Problem in Pascal!

Ein Thema von Sofa5000 · begonnen am 2. Feb 2004 · letzter Beitrag vom 3. Feb 2004
Antwort Antwort
Sofa5000

Registriert seit: 25. Apr 2003
48 Beiträge
 
#1

Problem in Pascal!

  Alt 2. Feb 2004, 19:46
Ich habe diesen Pascal Code:

Delphi-Quellcode:
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;
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?

Danke!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem in Pascal!

  Alt 2. Feb 2004, 19:50
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
MikeS

Registriert seit: 3. Mai 2003
Ort: München
157 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem in Pascal!

  Alt 2. Feb 2004, 19:56
Delphi-Quellcode:
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;
versuche es mal damit! ist ein vorschlag von Christian Seehase soweit ich mich erinnere!
Mike Schröder
Fleiß kann man vortäuschen, faul muss man schon selber sein!
  Mit Zitat antworten Zitat
Neg

Registriert seit: 16. Jan 2004
Ort: Berlin
63 Beiträge
 
Delphi 5 Professional
 
#4

Re: Problem in Pascal!

  Alt 2. Feb 2004, 20:32
Delphi-Quellcode:
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;
Pass aber auf, dass n*n <= 9, sonst hängt der Algorithmus in einer endlosen Schleife. Logisch.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Problem in Pascal!

  Alt 2. Feb 2004, 21:01
Vielleicht hilft dir dieses http://www.delphipraxis.com/topic109...lotto&start=50

Gruß Hagen
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Problem in Pascal!

  Alt 3. Feb 2004, 08:06
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:
var
  SchonVerwendet: Set of integer;
compilieren.

Hintergrund: Bei einem Set wird für jedes mögliche Element genau ein Bit gehalten, so dass bei einem set of Byte 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
Code:
s = (n+7) div 8
(das +7, um gauß'sche Klammern zu sparen) oder in mit dem Exponenten q zur Basis 2 ausgedrückt mit
Code:
q = ln2(n)
gilt daher
Code:
s=2^(ln2(n)-3)
Das bedeutete für den Speicherverbrauch s eines set of Integer mit q=32 folglich
Code:
s = 2^29 = 536870912
was also in dem Platzverbrauch von 512MB auf dem Stack entspräche...
gruß, choose
  Mit Zitat antworten Zitat
Neg

Registriert seit: 16. Jan 2004
Ort: Berlin
63 Beiträge
 
Delphi 5 Professional
 
#7

Re: Problem in Pascal!

  Alt 3. Feb 2004, 12:05
Oha. Wusste ich noch gar nicht, dass Sets so implementiert sind. Dann kann das natürlich nicht klappen, stimmt.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:26 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