Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Maximum eines Wertebereiches ermitteln (https://www.delphipraxis.net/139299-maximum-eines-wertebereiches-ermitteln.html)

Baeuerle 26. Aug 2009 12:25


Maximum eines Wertebereiches ermitteln
 
Hallo,

ich möchte aus einem Wertebereich den höchsten Wert ermittlen, aber wie?

Delphi-Quellcode:

const MONTH_DAY = [1..28];
      VALUES = [1,50,3,5];

// so nun benötige ich eine function

Highest(MONTH_DAY);// sollte 28 liefern
Highest(VALUES);// sollte 50 liefern
Die function MaxIntValue aus Math.pas geht nicht mit Konstanten :-(

thx

guidok 26. Aug 2009 12:31

Re: Maximum eines Wertebereiches ermitteln
 
Da es ja Konstanten sind:

Delphi-Quellcode:
const
  HighestMonthDay = 28;
  HighestValues = 50;
Ist doch eine ziemlich sinnlose Funktion, wenn das Ergebnis eh schon feststeht, oder?

Baeuerle 26. Aug 2009 12:35

Re: Maximum eines Wertebereiches ermitteln
 
Nein, das ist NICHT sinnlos !!!

Bsp:

Es wird eine Konstante deklariert, auf diese wird mehrmals in der implementierung zugegriffen. so nun haben die monate plötzlich 45 tage. In diesem Fall muss ich nur eine Konstante ändern und schon ist wieder alles in ordnung.

angos 26. Aug 2009 12:37

Re: Maximum eines Wertebereiches ermitteln
 
Auch da brauchst keine Funktion. Vielleicht hilft ja das hier:


Delphi-Quellcode:
const
  MONTH_DAY_MIN = 1;
  MONTH_DAY_MAX = 28;

  MONTH_DAY = [MONTH_DAY_MIN..MONTH_DAY_MAX];

  VALUES_MAX = 50;
  VALUES = [1,VALUES_MAX,3,5];

HeikoAdams 26. Aug 2009 12:38

Re: Maximum eines Wertebereiches ermitteln
 
Gut möglich, das es da etwas falsch verstehe, aber sollte der Wert einer Konstante nicht, wie der Name sagt, konstant sein? PI z.B. ist auch eine Konstante und kann deshalb nicht nach belieben geändert werden.

Baeuerle 26. Aug 2009 12:41

Re: Maximum eines Wertebereiches ermitteln
 
@angos: ja, so habe ich es im moment gelöst.

jedoch sollte es doch auch möglich sein aus einem "set of" den höchsten werden zu ermitteln....


@HeikoAdams: Prinzipiell korrekt, jedoch gibt es immer wieder Änderungungen, die nicht absehbahr sind z.b. von der Geschäftsführung, und dann sollte diese so schnell wie möglich umgesetzt werden.

Uwe Raabe 26. Aug 2009 12:58

Re: Maximum eines Wertebereiches ermitteln
 
Zitat:

Zitat von HeikoAdams
Gut möglich, das es da etwas falsch verstehe, aber sollte der Wert einer Konstante nicht, wie der Name sagt, konstant sein? PI z.B. ist auch eine Konstante und kann deshalb nicht nach belieben geändert werden.

Der Wert ist auch über die gesamte Laufzeit des Programms konstant - aber eventuell nicht zwischen zwei Compilierungen.

himitsu 26. Aug 2009 13:22

Re: Maximum eines Wertebereiches ermitteln
 
Zitat:

Die function MaxIntValue aus Math.pas geht nicht mit Konstanten
klar kann die mit Konstanten umgehn, ABER du übergibst ein SET und diese Funktionen wollen ein ARRAY haben.

kennt du schon Delphi-Referenz durchsuchenHigh und Delphi-Referenz durchsuchenLow?

angos 26. Aug 2009 13:35

Re: Maximum eines Wertebereiches ermitteln
 
Zitat:

Zitat von himitsu
kennt du schon Delphi-Referenz durchsuchenHigh und Delphi-Referenz durchsuchenLow?

Wird ihm nur auch nichts bringen. Damit könnte er auch nur ein Array auslesen, aber eben nicht seine Konstanten, afaik.


gruß
angos

hadschi92 26. Aug 2009 13:55

Re: Maximum eines Wertebereiches ermitteln
 
Delphi-Quellcode:
maximal := Values[Low(Values)];
for i := low(Values) to high(Values) do
  if maximal < Values[i] then
    maximal := Values[i];
Stellst du dir das etwa so vor?

guidok 26. Aug 2009 14:20

Re: Maximum eines Wertebereiches ermitteln
 
Zitat:

Zitat von hadschi92
Delphi-Quellcode:
maximal := Values[Low(Values)];
for i := low(Values) to high(Values) do
  if maximal < Values[i] then
    maximal := Values[i];
Stellst du dir das etwa so vor?

Zitat:

Wird ihm nur auch nichts bringen. Damit könnte er auch nur ein Array auslesen, aber eben nicht seine Konstanten, afaik.

Angel4585 26. Aug 2009 14:39

Re: Maximum eines Wertebereiches ermitteln
 
Delphi-Quellcode:
const testrange = ['a'..'z'];
Was sollte dann hier rauskommen? Ord('z')?

himitsu 26. Aug 2009 14:51

Re: Maximum eines Wertebereiches ermitteln
 
Delphi-Quellcode:
const MONTH_DAY = [1..28];
var i: Integer;
begin
  i := 255;
  while (i >= 0) do
    if i in MONTH_DAY then break else Dec(i);
  ShowMessage(IntToStr(i));
end;
i=255 ist nur ein beliebiger Wert, welcher auf viele SET passend gewählt sein sollte.

korrekter wäre es so
Delphi-Quellcode:
type TMONTH_DAY = 1..31;
const MONTH_DAY: Set of TMONTH_DAY = [1..28];
var i: TMONTH_DAY;
begin
  i := High(TMONTH_DAY);
  while (i >= Low(TMONTH_DAY)) do
    if i in MONTH_DAY then break else Dec(i);
  ShowMessage(IntToStr(Ord(i)));
end;
Man könnte aber auch die RTTI bemühen, aber diese hab bis einschließlich D2009 'ne "Macke" und kommt mit SETs nicht klar, welche Lücken aufweisen, wie z.B. [1,3,5,50].
In soeinem Fall gibt es in der RTTI keine Informationen über die Werte innerhalb des Arrays ... also absolut keine Inforationen (keine Namen und auch keine "Belegungsliste")

gammatester 26. Aug 2009 14:54

Re: Maximum eines Wertebereiches ermitteln
 
Wenn man mit den etwas veränderten Definitionen
Delphi-Quellcode:
type
  MONTH_DAY = 1..28;
const
  VALUES : array[0..3] of integer = (1,50,3,5);
leben kann, sind die MONTH_DAY-Konstanten via Low(MONTH_DAY) und High(MONTH_DAY) verfügbar. Bei Values geht's nur mit MinIntValue(VALUES) und MaxIntValue(VALUES), also nicht konstant.

Angel4585 26. Aug 2009 14:58

Re: Maximum eines Wertebereiches ermitteln
 
Zitat:

Zitat von gammatester
Wenn man mit den etwas veränderten Definitionen
Delphi-Quellcode:
type
  MONTH_DAY = 1..28;
const
  VALUES : array[0..3] of integer = (1,50,3,5);
leben kann, sind die MONTH_DAY-Konstanten via Low(MONTH_DAY) und High(MONTH_DAY) verfügbar. Bei Values geht's nur mit MinIntValue(VALUES) und MaxIntValue(VALUES), also nicht konstant.

Das funzt dann aber nimmer, oder?
Delphi-Quellcode:
if irgendeinwert in MONTH_DAY then bla;

gammatester 26. Aug 2009 15:00

Re: Maximum eines Wertebereiches ermitteln
 
Zitat:

Zitat von Angel4585
Das funzt dann aber nimmer, oder?
Delphi-Quellcode:
if irgendeinwert in MONTH_DAY then bla;

War auch nicht gefordert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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