Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alternative zu vielen Arrays ? (https://www.delphipraxis.net/149909-alternative-zu-vielen-arrays.html)

Olga 2. Apr 2010 00:27


Alternative zu vielen Arrays ?
 
Hallöchen mal von mir,

Ich wollte euch als relativen Delphi Neuling um Rat bitten.

Und zwar, ich arbeite gerade an einem Sudokulöser und stehe nun davor, für jedes leere Feld ein array zu deklarieren, was bei einem leeren Sudoku 81 stk wären.
In jedes dieser arrays sollen nun die Möglichkeiten der Zahlen, welche passen können, hineingeschrieben werden.

Da ich mir ziemlich sicher bin das man jedes array deklarieren muss, wollte ich nun fragen ob ihr Vorschläge für eine bessere Lösung hättet.

So weit von mir, ich freue mich auf Hilfe sowie eine schöne Zeit hier im Forum^^

Namenloser 2. Apr 2010 00:37

Re: Alternative zu vielen Arrays ?
 
Hallo Olga,

Willkommen in der DP :dp:

Hier mal ein Ansatz:
Delphi-Quellcode:
type
  TDigit = 0..9;
  TPossibleDigits = array of TDigit;
  // Alternativ (weiß nicht, was günstiger ist):
  // TPossibleDigits = set of TDigit;

  TSudokuArray = array[0..9-1, 0..9-1] of TPossibleDigits;

var
  SudokuArray: TSudokuArray;
Wenn du noch Fragen hast, immer her damit.

BUG 2. Apr 2010 00:42

Re: Alternative zu vielen Arrays ?
 
Die Alternative Sets statt der Arrays wäre schöner. Ein Set verhält sich ungefähr wie eine Menge in der Mathematik und ist praktisch wie für diesen Einsatzzweck gemacht.

Namenloser 2. Apr 2010 00:46

Re: Alternative zu vielen Arrays ?
 
Zitat:

Zitat von BUG
Die Alternative Sets statt der Arrays wäre schöner.

Im Grunde ja, allerdings kann man Arrays schön per Schleife durchiterieren, was u.U. auch von Vorteil sein kann. Dafür ist das hinzufügen und löschen von Elementen recht aufwändig.

sx2008 2. Apr 2010 00:47

Re: Alternative zu vielen Arrays ?
 
Du kannst die möglichen Zahlen in einem Sudoku-Feld als Array deklarieren:
Delphi-Quellcode:
type
  TErlaubteZahlen = {packed} array[1..9] of Boolean;
Wenn du Speicher sparen möchtest, dann kannst du das Schlüsselwort packed benützen.
Es gäbe auch die Möglichkeit du erlaubten Zahlen bitcodiert in einem Integer oder Short unterzubringen
oder die Klasse TBits zu benützen.
Das Boolean-Array ist aber die einfachste Möglichkeit.

Man kann den Anfangszustand (alle Zahlen von 1 bis 9 erlaubt) so herstellen:
Delphi-Quellcode:
const
  AlleErlaubtenZahlen: TErlaubteZahlen= (True,True,True,True,True,True,True,True,True);
...
  ErlaubteZahlen := AlleErlaubtenZahlen;
Man erspart sich dadurch eine Schleife von 1 bis 9, die die Werte im Array auf True setzt.

Namenloser 2. Apr 2010 00:54

Re: Alternative zu vielen Arrays ?
 
Zitat:

Zitat von sx2008
Es gäbe auch die Möglichkeit du erlaubten Zahlen bitcodiert in einem Integer oder Short unterzubringen
oder die Klasse TBits zu benützen.

Wenn schon Sets, TBits ist deutlich umständlicher in der Bedienung und lohnt sich nur für Mengen mit mehr als 255 Elementen.

BUG 2. Apr 2010 01:04

Re: Alternative zu vielen Arrays ?
 
Sets drängen sich geradezu auf ... nimm Sets ... kaufe 80 und bekomme eins gratis :mrgreen:

Olga 2. Apr 2010 01:09

Re: Alternative zu vielen Arrays ?
 
VIELEN Dank für die vielen schnellen Antworten. :)

Ich werde mich dann sofort an diese Sets setzen um diese zu verstehen und sie folglich richtig anzuwenden :)

Danke nochmal, mal sehen wann ich euch das nächste mal behelligen muss :) (villeicht ja sogar zu den sets?^^)

sx2008 2. Apr 2010 01:16

Re: Alternative zu vielen Arrays ?
 
Zitat:

Zitat von NamenLozer
...Wenn schon Sets

So vielleicht:
Delphi-Quellcode:
type
  TZiffer = 1..9;
  TZiffernset = set of TZiffer;

function AnzahlErlaubterZahlen(x:TZiffernset):integer;
var i : TZiffer;
begin
  Result := 0;
  for i:=1 to 9 do
    if i in x then
      Inc(Result);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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