Autor |
Beitrag |
klausiemausie
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 06.02.09 19:39
Moin!
Ansatz: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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. 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..35] of 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..35] of 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 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 07.02.09 19:38
hättest du da vielleicht nen codeansatz für mich?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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? Delphi-Quelltext 1:
| if (TestArray[i] = 0) or (TestArray[i] = 1) then |
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 07.02.09 20:02
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; |
|
|
|