Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Zahlen in einer Menge (Set Of) speichern, Verständnisfra

  Alt 11. Dez 2005, 17:00
Zitat von stoxx:
also eigentlich will ich ja mathematisch ausgedrückt, 3 Merkmalsvektoren, die einen Zustand von 1 bis 8 annehmen können, in einer 4 Byte großen Integerzahl speichern.
Vielleicht gibt es ja sogar noch bessere Lösungen, als das über Mengen zu gestalten ?
Du könntest die Vektoren direkt in einen Integer speichern, ob das aber geschickter ist, weiß ich nicht.
Da 8 Zustände 3 Bit entsprechen, würden in einen Longint bis zu 10 Vektoren passen.

Beispiel:
Delphi-Quellcode:
type
  TState = 0..7;
  TVectorIndex = 0..2
  
procedure SetState(const AState: TState; const AVectorIndex: TVectorIndex; var AValue: Integer);
begin
  AValue := (AValue and not (7 shl (AVectorIndex * 3)) // alten Wert löschen
            or (AState shl (AVectorIndex * 3)); // neuen einfügen
end;
Hab leider keine Zeit mehr, um zu überprüfen, ob die Prozedur nicht vollkommen falsch ist ^^ .

[edit]Doch noch etwas Zeit, es stimmt wohl soweit:
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TState = 0..7;
  TVectorIndex = 0..2;

procedure SetState(const AState: TState; const AVectorIndex: TVectorIndex; var AValue: Integer);
begin
  AValue := (AValue and not (7 shl (AVectorIndex * 3))) // alten Wert löschen
            or (AState shl (AVectorIndex * 3)); // neuen einfügen
end;

var
  Value, i: Integer;
begin
  Value := 1; // 1. Vektor = 1, 2.= 0, 3. = 0
  SetState(6, 1, Value);
  // 1.= 2, 2.= 6, 3.= 0

  // einzelne Bits ausgeben
  for i := 31 downto 0 do
    if Value and (1 shl i) <> 0 then
      Write('1')
    else
      Write('0');
  Readln;

  // Ausgabe: 00000000000000000000000000110001
  // cccbbbaaa
  // aaa = 1. Vektor = 001 = 1
  // bbb = 2. Vektor = 110 = 6
end.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat