Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehere Werte auf gleichheit überprüfen (https://www.delphipraxis.net/67483-mehere-werte-auf-gleichheit-ueberpruefen.html)

xZise 15. Apr 2006 11:33


Mehere Werte auf gleichheit überprüfen
 
Ich würde gerne mehere Werte auf gleichheit hin überprüfen!

Ungfähr so:
Delphi-Quellcode:
var Value : array [1..3] of Byte;
{...}
if Value[1] = Value[2] = Value[3] then
  Showmessage('Subba! Alle Werte sind gleich!')
Da mekert wer rum!
Gibt es schon eine Funktion? Oder muss ich die mir selber machen:

Delphi-Quellcode:
Result := (Value[1] = Value[2]) and (Value[2] = Value[3])
(Aso: Bei 3 Werten geht es noch, aber wer weiß ... wie es nachher bei 10 oder 20 Werten ist?)

droppi 15. Apr 2006 11:37

Re: Mehere Werte auf gleichheit überprüfen
 
machs doch mit einer for - to schleife
überprüfe ob alle werte des arrays dem wert value[1] entsprechen.

emteg 15. Apr 2006 12:10

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Delphi-Quellcode:
Result := (Value[1] = Value[2]) and (Value[2] = Value[3])

Wo hast du denn das her? Arbeitest du sonst mit ner anderen sprache? Also delphi ist das sicher nicht :)

Eine for schleife wäre definitiv das mittel der wahl. Aber um mal einen weg zu zeigen, der deiner logik entspräche:
Delphi-Quellcode:
if (Value[1]=Value[2]) and (Value[1]=Value[3]) and (Value[2]=Value[3]) then
  Result:=true;
So und nicht anders. Wenn du sagtst Result:= dann erwartet delphi da eine zuweisung. Und mit Value[1]=Value[2] erhältst du keinen wert. Du vergleichst nur zwei array werte, aber ohne das ergebnis zu speichern.

Muetze1 15. Apr 2006 12:12

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Zitat von emteg
Zitat:

Delphi-Quellcode:
Result := (Value[1] = Value[2]) and (Value[2] = Value[3])

Wo hast du denn das her? Arbeitest du sonst mit ner anderen sprache? Also delphi ist das sicher nicht :)

Bevor man grosse Sprüche klopft mal lieber selber ausprobieren, nich?!

Er hat 2 logischer Vergleiche die einen boolsches Ergebnis liefern und das mit einem logischen UND verknüpft - was soll dabei nicht gehen?

3_of_8 15. Apr 2006 12:14

Re: Mehere Werte auf gleichheit überprüfen
 
Mit value[1]=value[2] erhält man durchaus einen Wert, nämlich einen Boolean.

Result:=(value[1]=value[2])and(value[2]=value[3]);

Ist korrekt.

Hawkeye219 15. Apr 2006 12:21

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Zitat von emteg
Delphi-Quellcode:
if (Value[1]=Value[2]) and (Value[1]=Value[3]) and (Value[2]=Value[3]) then
  Result:=true;

Wenn Value[1]=Value[2] und Value[1]=Value[3] ist, was läßt sich dann wohl über Value[2] und Value[3] sagen? :wink:

Gruß Hawkeye

BenjaminH 15. Apr 2006 12:26

Re: Mehere Werte auf gleichheit überprüfen
 
Das müsste doch gehen, oder?
Delphi-Quellcode:
for Value in Array do
  Result:=Result and Value;

3_of_8 15. Apr 2006 12:30

Re: Mehere Werte auf gleichheit überprüfen
 
Nein. in geht nur bei Sets.

Hawkeye219 15. Apr 2006 12:33

Re: Mehere Werte auf gleichheit überprüfen
 
Die FOR-Schleife ist schon korrekt, schaue mal in der Online-Hilfe nach.
Der Compiler wird sich aber weigern, einen Integer-Wert (Value) mit einem Boolean-Wert (Result)zu verknüpfen...

Gruß Hawkeye

//Edit: bei Delphi 7 geht's natürlich noch nicht...

sakura 15. Apr 2006 12:37

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Zitat von 3_of_8
Nein. in geht nur bei Sets.

Das geht auch bei Arrays (seit D2005), allerdings macht es für obige Aufgabe keinen Sinn, da wir hier Bytes vergleichen wollen. Mein Vorschlag:
Delphi-Quellcode:
var
  Cmp: Byte;
  I: Integer;
begin
  Result := True;
  if Length(Value) <= 1 then
    Exit;
  Cmp := Value[Low(Value)];
  for I := Succ(Low(Value)) to High(Value) do
  begin
    if Value[I] <> Cmp then
    begin
      Result := False;
      Break;
    end;
  end;
end;
@emteg: wie schon gesagt, erst testen, dann reden. Zusätzlich ist Deine Lösung auch noch falsch, da Result undefiniert wäre, wenn nicht alle Werte den gleichen Wert hätten ;)

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Seite 1 von 3  1 23      

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