AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehere Werte auf gleichheit überprüfen

Ein Thema von xZise · begonnen am 15. Apr 2006 · letzter Beitrag vom 15. Apr 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 13:39
Immer diese Sprachfeatureerweiterungen. Ich bleib bei meinem Delphi 7.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 13:46
Nehmen wir mal an, D2k5 ist vorhanden, dann wäre diese Lösung doch auch gut:
Delphi-Quellcode:
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;
Oder passt da was nicht?

@sakura: Den Vergleich verstehe ich nicht:
if Length(Value) <= < then wie kann man mit einem Operator vergleichen?
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#13

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 13:58
Zitat von BenjaminH:
Nehmen wir mal an, D2k5 ist vorhanden, dann wäre diese Lösung doch auch gut:[delphi]type TIntegerArray=Array of Integer;
Der funktioniert, nur mir persönlich sind da zuviele Zuweisungen (Result := ...), es wird immer der erste Wert wiederholt verglichen (mit sich selbst). Es geht, ist imo aber etwas irreführend. Ausserdem gehst Du immer das gesamte Array durch, auch wenn bereits nach zwei Werten eine Abweichung besteht, yet 998885 to go
Zitat von BenjaminH:
@sakura: Den Vergleich verstehe ich nicht:
Tippfehler korrigiert

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 14:02
Hallo Benjamin,

Du solltest zu Beginn der Funktion deren Rückgabewert noch initialisieren, sonst liefert sie mehr oder weniger zufällige Ergebnisse.

Gruß Hawkeye
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 14:07
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:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#16

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 15:01
Zitat von marabu:
Bei der allgemeinen Lösung für beliebige Array-Größen müsste bei leerem array eigentlich eine Exception geworfen werden.
Würde ich Definitionssache nennen, wurde aber nicht vorgegeben
Zitat von marabu:
if a[i] <> a[Pred(i)] then
Immer auf a[i] zuzugreifen ist nicht optimal, vorher zwischenspeichern

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 15:01
Danke für die Antworten

@ sakura:
Ist bei 0 Items (im Array) alle gleich?
Zitat von sakura:
Delphi-Quellcode:
  Result := True;
  if Length(Value) <= 1 then
    Exit;
@ marabu:
Seit wann kann man ein Array direkt übergeben?
Muss man da nicht erstmal ein Typ davon anlegen, oder ist es anderes weil es
  • dynamisch
  • oder eine Konstante
ist?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#18

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 15:31
[quote="emteg"]
Zitat:
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.
Hallo,

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:

if Value[1]=Value[2] then Result := true; kann man auch so schreiben:

Raesult := Value[1] = Value[2]; Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 15:39
Zitat von Alfi001:
Also:

if Value[1]=Value[2] then Result := true; kann man auch so schreiben:

Raesult := Value[1] = Value[2]; Ciao,
Ralf
Hallo,

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
if Value[1]=Value[2] then Result := true; bleibt result true.
Bei
Result := Value[1] = Value[2]; wird es false.

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]
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#20

Re: Mehere Werte auf gleichheit überprüfen

  Alt 15. Apr 2006, 15:46
deine IF THEN Abfrage ist nichts anderes als eine Implikation des vorherigen Wertes von result.

Geht also auch so

Result := Result or (Value[1] = Value[2]); oder
Result := Result and (Value[1] = Value[2]); je nachdem was man erreichen möchte.

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.
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