AGB  ·  Datenschutz  ·  Impressum  







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

Doppelte Zahlen in Arrays finden

Ein Thema von KeeN · begonnen am 21. Jan 2003 · letzter Beitrag vom 22. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KeeN
KeeN

Registriert seit: 21. Jan 2003
Ort: Dolgowitz
14 Beiträge
 
#1

Doppelte Zahlen in Arrays finden

  Alt 21. Jan 2003, 18:51
Hallo!

Ich hab grad ein Programm geschrieben, dass mir Zufallszahlen in ein Array abspeichert. Jetzt gehts darum Doppelte Zahlen zu filtern.

Frage: Wie stellt man das am effizientesten an? Das Array Stück für Stück zu durchsuchen dürfte wohl ziemlich uneffizient sein.

MfG
KeeN
  Mit Zitat antworten Zitat
MadMason

Registriert seit: 9. Nov 2002
Ort: Altenburg
126 Beiträge
 
Delphi 2005 Architect
 
#2
  Alt 21. Jan 2003, 18:55
wird dir aber wohl nichts anderes übrigbleiben
(verbessert mich wenn ich mich irre) aber ein anderer weg als "per hand" ist mir nicht bekannt
Delphi-Quellcode:
for i:= 0 to Length(array)-1 do begin
 for i2:= 0 to Length(array)-1 do begin
  if array[i2] = array[i] then begin
   //tu was
  end;
 end;
end;
Einstein ist tot
Newton ist tot
und mir ist auch schon ganz schlecht
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#3
  Alt 21. Jan 2003, 18:58
Hallo KeeN,
du solltest von Anfang an filtern bevor du ins array schreibst.
Schau dir mal diesen thread an:
http://www.delphipraxis.net/viewtopi...ghlight=random
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#4
  Alt 21. Jan 2003, 19:14
Zitat von MadMason:
wird dir aber wohl nichts anderes übrigbleiben
(verbessert mich wenn ich mich irre) aber ein anderer weg als "per hand" ist mir nicht bekannt
Delphi-Quellcode:
for i:= 0 to Length(array)-1 do begin
 for i2:= 0 to Length(array)-1 do begin
  if array[i2] = array[i] then begin
   //tu was
  end;
 end;
end;
ich würds eher so machen
Delphi-Quellcode:
for i:= 0 to Length(array)-1 do begin
 for i2:= [color=#f60000]i[/color] to Length(array)-1 do begin
  if array[i] = array[i2] then begin
   //tu was
  end;
 end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von KeeN
KeeN

Registriert seit: 21. Jan 2003
Ort: Dolgowitz
14 Beiträge
 
#5
  Alt 21. Jan 2003, 19:25
Jan's Vorschlag klingt am besten, find ich. In dem anderen Beitrag steht geschrieben:
Zitat:
Etwas besser ist es da (insbesondere bei noch größeren Bereichen) die gezogene Zufallszahl als Zähler in der Menge der noch nicht gefundenen Zahlen zu benutzen.
Ok. Und nun für Dumme :Wie stell ich das an, bzw. kann mir das einer mal etwas genauer erläutern?

KeeN
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6
  Alt 21. Jan 2003, 23:09
Nimm doch statt nem Array ein Set. Das hat mit dem "in" Operator schon einen Membership-Test.

Also wenn, du wissen willst, ob die 5 in deinem Set ist, dann schreibst du einfach:

if 5 in DeinSet then ...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 21. Jan 2003, 23:14
Hi,

die gezogene Zahl muß dann aber aus der Menge wenigstens raus, glaube Du brauchst nur
Code:
VorhandenesSet := VorhandenesSet - [gezogene Zahl]
zumindest so in dem Sinne. Die leere Menge muß dabei eventuell berücksichtigt werden.

Gruß
Hansa
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8
  Alt 22. Jan 2003, 06:14
Und nun die Einschränkung von Sets:
Sets können max. 256 unterschiedliche Werte aufnehmen.
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#9
  Alt 22. Jan 2003, 06:34
bei großen arrays wäre es glaube ich sinnvoller und schneller die zahlen erst der größe nach zu sortieren und danach die liste einmal von oben nach unten durchzukucken:

Delphi-Quellcode:
for i:= 0 to Length(array)-2 do begin
  if array[i] = array[i+1] then
    begin
      DoSomething;
    end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#10
  Alt 22. Jan 2003, 07:11
Hallo KeeN,

der Beitrag mit dem Nutzen der Zufallszahl als Zähler war von mir. Das Problem war ja, dass Privateer3000 Zufallszahlen ziehen wollte und doppelte vermeiden wollte. Er benötigt also eine zufällige Reihenfolge einer Menge von Zahlen. Mein Vorschlag bezog sich darauf, dass du anfangs eine Liste mit allen erlaubten Zahlen erzeugst. Das kann ein Array, eine Menge (Set) oder eine ring verkette Liste sein.

Wenn du eine Zufallszahl n gezogen hast, nimmst du das n-te noch nicht gezogene Element als neue Zahl und löscht dieses bzw. markierst es als gezogen, falls du ein Array benutzt. Die Lösung mit der ring verketteten Liste ist dabei wohl die flexibelste.
Albert
Live long and prosper


MrSpock
  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:02 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