Autor Beitrag
klausiemausie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Fr 06.02.09 19:28 
ich würde gerne eine entscheidungsstruktur formulieren, die beinhaltet, wenn alle Inhalte eines array, also in meinem fall array[1-35], etnweder den wert 0 oder den wert 1 annehmen, passiert etwas. ich hab schon lange gegrübelt, die arrays mit ner schleife auszulesen und in ne variable zu schreiben, aber zu nem konstruktiven ergebnis bin ich noch nicht gekommen, vielleicht könnt ihr mir weiterhelfen, danke
klaus
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.02.09 19:39 
Moin!

Ansatz:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Alles0, Alles1: Boolean
begin
  Alles0 := TRUE
  Alles1 := TRUE
  for i = erstesElement to letztesElement do
    Alles0 := Alles0 and (Array[i] = 0)
    Alles1 := Alles1 and (Array[i] = 1)
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.02.09 03:32 
Wenn du den Vergleich oft benötigst, dann kannst du auch direkt den ganzen Speicherbereich vergleichen. Das sollte schneller gehen, zumindest ist es jedenfalls nur ein Befehl. Dafür übergibst du CompareMem die Adresse eines Arrays, das vorher mit Nullen / Einsen gefüllt wurde und die deines Testarrays.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
type
  TFormX = class(TForm)
  ...
  private
    AllZero, AllOne: array[1..35of Integer;

...

procedure TFormX.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := Low(AllZero) to High(AllZero) do
  begin
    AllZero[i] := 0;
    AllOne[i] := 1;
  end;
end;

...

var
  i: Integer;
  TestArray: array[1..35of Integer;
begin
  for i := Low(TestArray) to High(TestArray) do
    TestArray[i] := 0;
  if CompareMem(@TestArray, @AllZero, Length(TestArray)) then
    ShowMessage('Alles 0!');

  for i := Low(TestArray) to High(TestArray) do
    TestArray[i] := 1;
  if CompareMem(@TestArray, @AllOne, Length(TestArray)) then
    ShowMessage('Alles 1!');

  TestArray[5] := 4;
  if not CompareMem(@TestArray, @AllZero, Length(TestArray)) then
    ShowMessage('Nicht alles 0!');
  if not CompareMem(@TestArray, @AllOne, Length(TestArray)) then
    ShowMessage('Nicht alles 1!');
end;
Wie du an den Meldungen siehst klappt das.
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 07.02.09 18:49 
hm das versteh ich nicht, mit dem quell text ( for i := Low(TestArray) to High(TestArray) do TestArray[i] := 0;) wird doch mein ganzer array überschriebe oder nicht?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.02.09 18:55 
Das ist ja nur als Beispiel gewesen, damit du siehst, dass die Methode klappt. ;-)

An der Stelle soll es ja komplett 0 bzw. 1 sein, damit der Vergleich erfolgreich ist, danach verändere ich einen Wert und die Vergleiche klappen nicht mehr, also wie es sein soll. ;-)
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 07.02.09 19:17 
ah gut das hab ich gecheckt, aber wie sieht es aus, wenn ich 3 array vergleichen will? also alles0, alles 1 und der testarray, quasi ob alles vom testarray entweder 0 oder 1 ist?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.02.09 19:30 
Wenn beide Werte (0 und 1) durcheinander vorkommen können, dann musst du mit einer Schleife durchgehen und jedes Element prüfen ob es 0 oder 1 ist, da geht es anders nicht.
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 07.02.09 19:38 
hättest du da vielleicht nen codeansatz für mich?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.02.09 19:45 
Probiere es doch einfach einmal. Wo ist denn dabei das Problem? Die Abfrage ob es 0 oder 1 ist?
ausblenden Delphi-Quelltext
1:
if (TestArray[i] = 0or (TestArray[i] = 1then					
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 07.02.09 20:02 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function NullOderEins: Boolean;
var i: integer;
begin
  for i := Low(TestArray) to High(TestArray) do
    begin
      Result := TestArray[i] in [0,1];
      if not Result then break;
    end;
end;