Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array durchlaufen und Werte rauslesen (https://www.delphipraxis.net/84235-array-durchlaufen-und-werte-rauslesen.html)

Helmi 13. Jan 2007 18:15


Array durchlaufen und Werte rauslesen
 
Hallo,

ich steh gerade auf dem Schlauch

ich möchte gerade mit einer for-schleife durch ein "festdefiniertes" Array gehen.

also so:
Delphi-Quellcode:
var
 Bool: array [1, 2, 4, 8, 16, 32, 64, 128] of Integer;     //<--- geht nicht
begin
  Wert := 0;

  for i := 1 to 8 do
    begin
      //
      Wert := Wert + (Integer(dummy_CheckBox) * Bool[i]);
    end;
nur so meckert mir Delphi die markierte Zeile an
Zitat:

[Fehler] Unit1.pas(245): '..' erwartet, aber ',' gefunden
irgendwie verständlich.

Nur, wie kann ich in der Schleife den Wert eines bestimmten Array-Feld rauslesen?

3_of_8 13. Jan 2007 18:18

Re: Array durchlaufen und Werte rauslesen
 
Delphi-Quellcode:
Bool: array [1..8] of Integer=(1, 2, 4, 8, 16, 32, 64, 128);
Mit einem shl ginge das allerdings noch viel einfacher.

Helmi 13. Jan 2007 18:21

Re: Array durchlaufen und Werte rauslesen
 
Zitat:

Zitat von 3_of_8
Mit einem shl ginge das allerdings noch viel einfacher.

Wie würd das gehen mit shl?

[Edit]
Wenn ich
Delphi-Quellcode:
Bool: array [1..8] of Integer=(1, 2, 4, 8, 16, 32, 64, 128);
in den Var-Teil der Procedure einfüge erhalte ich die Meldung:
[Fehler] Unit1.pas(245): Lokale Variablen können nicht initialisiert werden

marabu 13. Jan 2007 18:28

Re: Array durchlaufen und Werte rauslesen
 
Hallo Helmi,

was Manuel sicher meinte ist: Schenke dir die lokale Array-Variable und ersetze "Bool[5]" durch "1 shl 5".

Grüße vom marabu

Martin K 13. Jan 2007 18:29

Re: Array durchlaufen und Werte rauslesen
 
Sollte so gehen:
Delphi-Quellcode:
var
  i: Integer;
  Bool: array [1..8] of Integer;
begin
  for i := 0 to 7 do
    Bool[i + 1] := 1 shl i;
end;
shl verschiebt die Bits nach links, 1 shl i verschiebt also die 1 um i Bits nach links.

[Nachtrag]
Natürlich kannst du es auch direkt so machen, und dir das array komplett schenken (meinte marabu sicherlich auch so), lass dann aber die FOR-Schleife mit 0 beginnen, da 1 shl 0 logischerweise wieder 1 ergibt, 1 shl 1 wäre aber schon 2 (Binär: 10).
Delphi-Quellcode:
for i := 0 to 7 do
begin
  // 
  Wert := Wert + (Integer(dummy_CheckBox) * (1 shl i)); //bin mir nicht sicher, ob man die Klammern beim shl braucht, warscheinlich kannst du sie auch wegalssen
end;

p0w3r5tr34m3r 13. Jan 2007 18:33

Re: Array durchlaufen und Werte rauslesen
 
das array was du nlegen wolltest, musst du als konstante anlegen..

Delphi-Quellcode:
const
  bool: array[0..8] of integer = (1, 2, 4, 8, 16, 32, 64, 128);
var
  i   : integer;
  wert : integer;
begin
  for i := low(bool) to high(bool) do begin
    wert := wert + (integer(dummy_checkbox) * bool[i]);
  end;
end;
MfG p0w3r5tr34m3r

Helmi 13. Jan 2007 18:39

Re: Array durchlaufen und Werte rauslesen
 
Vielen Dank!

Hat funktioniert!

3_of_8 13. Jan 2007 18:46

Re: Array durchlaufen und Werte rauslesen
 
Delphi-Quellcode:
var
  I: integer;
  wert: integer;
begin
  for I:=0 to 7 do
  begin
    wert:=wert+(integer(dummy_checkbox)*1 shl I);
  end;
end;

Hawkeye219 13. Jan 2007 19:18

Re: Array durchlaufen und Werte rauslesen
 
Hallo Helmi,

der Name dummy_CheckBox ist sehr unglücklich gewählt. Er läßt den Leser deines Codes vermuten, daß es sich dabei um einen Zeiger auf eine TCheckBox-Komponente handelt und nicht um einen (booleschen?) Wert. Und da in der Schleife immer derselbe Wert verrechnet wird, verstehe ich nicht, warum du überhaupt eine Schleife verwendest - eine einfache Multiplikation mit dem Wert 255 hätte auch gereicht. Oder war das nur ein vereinfachtes Beispiel?

Gruß Hawkeye

Helmi 13. Jan 2007 19:24

Re: Array durchlaufen und Werte rauslesen
 
Hallo Hawkeye,

dummy_CheckBox ist nur ein Zeiger auf eine CheckBox.

Oben ist leider ein Fehler in den Codes - es sollte natürlich
Delphi-Quellcode:
Integer(dummy_CheckBox.checked)
heissen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz