![]() |
Re: Mehere Werte auf gleichheit überprüfen
Immer diese Sprachfeatureerweiterungen. Ich bleib bei meinem Delphi 7.
|
Re: Mehere Werte auf gleichheit überprüfen
Nehmen wir mal an, D2k5 ist vorhanden, dann wäre diese Lösung doch auch gut:
Delphi-Quellcode:
Oder passt da was nicht?
type TIntegerArray=Array of Integer;
function AreEqual(Values:TIntegerArray):Boolean; Var Key:Integer; FirstKey:Integer; Begin If Length(Values)<1 then exit; FirstKey:=Values[Low(Values)]; for Key in Values do Result:=Result and (Key=FirstKey); End; @sakura: Den Vergleich verstehe ich nicht:
Delphi-Quellcode:
wie kann man mit einem Operator vergleichen?
if Length(Value) <= < then
|
Re: Mehere Werte auf gleichheit überprüfen
Zitat:
Zitat:
...:cat:... |
Re: Mehere Werte auf gleichheit überprüfen
Hallo Benjamin,
Du solltest zu Beginn der Funktion deren Rückgabewert noch initialisieren, sonst liefert sie mehr oder weniger zufällige Ergebnisse. :wink: Gruß Hawkeye |
Re: Mehere Werte auf gleichheit überprüfen
Hallo.
Für den speziellen Fall hat xZise ja schon die optimale Lösung. Bei der allgemeinen Lösung für beliebige Array-Größen müsste bei leerem array eigentlich eine Exception geworfen werden.
Delphi-Quellcode:
Grüße vom marabu
function AllBytesEqual(const a: array of byte): Boolean;
var i: Integer; begin Result := false; for i := Succ(Low(a)) to High(a) do if a[i] <> a[Pred(i)] then Exit; Result := Length(a) > 0; end; |
Re: Mehere Werte auf gleichheit überprüfen
Zitat:
Zitat:
...:cat:... |
Re: Mehere Werte auf gleichheit überprüfen
Danke für die Antworten :)
@ sakura: Ist bei 0 Items (im Array) alle gleich? Zitat:
Seit wann kann man ein Array direkt übergeben? Muss man da nicht erstmal ein Typ davon anlegen, oder ist es anderes weil es
|
Re: Mehere Werte auf gleichheit überprüfen
[quote="emteg"]
Zitat:
natürlich liefert "Value[1]=Value[2]" einen Wert und zwar einen Boolean-Wert der true ist wenn die beiden Werte gleich sind und der false ist wenn beide Werte ungleich sind. Es wird also Result ein Wert zugewiesen (sonst würde dieser Ausdruck ja schon vom Compiler bemängelt. Also:
Delphi-Quellcode:
kann man auch so schreiben:
if Value[1]=Value[2] then Result := true;
Delphi-Quellcode:
Ciao,
Raesult := Value[1] = Value[2];
Ralf |
Re: Mehere Werte auf gleichheit überprüfen
Zitat:
das kann man nicht unbedingt so schreiben, da bei einer Zuweisung der vorherige Wert von result auf JEDEN Fall ersetzt wird. Eine if-then-else-Konstruktion kann man durch eine Zuweisung ersetzen. Hier fehlt allerdings der else-Zweig. Den Unterschied merkt man, wenn result vorher schon true ist. Bei
Delphi-Quellcode:
bleibt result true.
if Value[1]=Value[2] then Result := true;
Bei
Delphi-Quellcode:
wird es false.
Result := Value[1] = Value[2];
Gruß Michael [Edit]Wollte dies nur anmerken, da man (mich eingeschlossen) bei solchen "Optimierungen", sprich if-Konstrukte durch Zuweisungen zu ersetzen, oft kleine Fehler macht, die nachher schwer zu entdecken sind.[/Edit] |
Re: Mehere Werte auf gleichheit überprüfen
deine IF THEN Abfrage ist nichts anderes als eine Implikation des vorherigen Wertes von result.
Geht also auch so
Delphi-Quellcode:
oder
Result := Result or (Value[1] = Value[2]);
Delphi-Quellcode:
je nachdem was man erreichen möchte.
Result := Result and (Value[1] = Value[2]);
Es gibt also in diesem Falle keinen Grund eine unnötige Verkomplizierung durch die IF THEN Abfrage zu machen. Normalerweise hängt die Schwierigkeit im Verständnis des Programmieres bei solchen Konstrukten von derem "geschmack" ab. 1.) rein mechanisch denkende Menschen bervorzugen strukturierte IF THEN etc. Blöcke, quasi stückchenweises herangehen an ein Problem durch stückchenweises Ausschlußverfahren. 2.) formal denkende Menschen bevorzugen eine Gleichung/Formel zur Lösung eines Problems. Sie "kodieren" also ein Problem im Kopf so um das sie das Problem ansich als Formel darstellen können. Dies ist in den meisten Fällen besser da dadurch auch die Möglichkeiten entstehen um zb. die Komplexität eines Algos. zu errechnen, quasi sein Laufzeitverhalten. Oder durch einfache Umstellungen der Formeln diese zu verbesern. All das geht mit rei mechnischer Vorgehensweise nicht so leicht. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr. |
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