![]() |
Die größer Zahl nehmen ?
Hallo
kann man in Delphi die direkt die größer zahl nehmen ? ich möchte nicht folgendes machen
Delphi-Quellcode:
Sondern z:=groesser(x;y):
if x > y then begin z:=x; end else begin z:=y; end:
Oder gibt es sowas in delphi nicht ? |
Re: Die größer Zahl nehmen ?
Max (Unit math, glaube ich).
|
Re: Die größer Zahl nehmen ?
|
Re: Die größer Zahl nehmen ?
Hi,
nur als Ergänzung, damit du siehst, was es tolles in Delphi gibt: Man kann selbst Funktionen schreiben. :stupid:
Delphi-Quellcode:
Das ist ungetestet. Der Aufruf (fast so wie du es möchtest):
function groesser(const a, b: Integer): Integer;
begin if a > b then Result := a else Result := b; end;
Delphi-Quellcode:
Das gilt nun für Integer-Zahlen (ganze Zahlen).
z := groesser(x, y):
Grüße, Matze |
Re: Die größer Zahl nehmen ?
und damit du siehst wie gut deine If-Abfrage war :angel:
die eine Max-Funktion aus der Unit Math
Delphi-Quellcode:
function Max(const A, B: Integer): Integer;
begin if A > B then Result := A else Result := B; end; |
Re: Die größer Zahl nehmen ?
Mit der Funktion geht auch aber Delphi macht dach von alleine
Max(3,11):=11; Danke |
Re: Die größer Zahl nehmen ?
Zitat:
|
Re: Die größer Zahl nehmen ?
Die Frage ist immer, ob es sich lohnt, eine große Mathematik-Unit einzubinden für eine noch so einfache Funktion.
Aber gut, die Dateigröße spielt heute kaum mehr eine Rolle und von der Geschwindigkeit her wird es ähnlich sein. Aber es ist richtig, was Meflin sagt und es wäre gut, wenn du das auch verstehen würdest, denn solche Grundlagen sind immer hilfreich. PS: Lustig, mein runter getippter Code oben nahezu identisch mit dem der Math-Unit, sehe ich gerade (Bezeichner, Formatierung). Grüße, Matze |
Re: Die größer Zahl nehmen ?
nja, die Math-Unit selber braucht nicht mehr platz, als man davon verwendet (keine Initialisierung vorhanden) ... nja, außer daß sie die rießige Unit SysUtils einbindet ... aber wenn man diese Unit eh schon drin hat, isses hier egal :stupid:
|
Re: Die größer Zahl nehmen ?
Zitat:
|
Re: Die größer Zahl nehmen ?
Hallo!
Wenn Du es ganz krass machen willst kannst du es auch so machan :shock: :lol:
Delphi-Quellcode:
Liebe Grüsse Laufi
function Max(const A, B: Integer): Integer;
asm CMP EAX, EDX; CMOVL EAX, EDX; end; |
Re: Die größer Zahl nehmen ?
@Laufi:
wenn schon, dann
Delphi-Quellcode:
type irgendwas = Integer;
nochmalwas = irgendwas; function tu_mal_was_von_alleine_und_frag_nicht_lange_nach_dem_sinn_von_dem_ganzen((const kleine_oder_grosse_zahl, grosse_oder_kleine_zahl: irgendwas): nochmalwas; |
Re: Die größer Zahl nehmen ?
Zitat:
|
Re: Die größer Zahl nehmen ?
Zitat:
|
Re: Die größer Zahl nehmen ?
Du meinst wegen dem const? Nein das ist ihm gleich bei den kleinen typen :o
|
Re: Die größer Zahl nehmen ?
Zitat:
Die Online-Hilfe ist in solchen Fällen leider gar nicht mehr hilfreich. |
Re: Die größer Zahl nehmen ?
Er übergibt nur bei grossen typen die adresse wenn man const schreibt, er ist ja nicht dumm! Das const macht also nichts langsamer es ist nur zur schutz für den Programmierer :roll:
|
Re: Die größer Zahl nehmen ?
Zitat:
|
Re: Die größer Zahl nehmen ?
ist entweder drin, weil es bei den anderen Max-Funktionen auch drin ist ... sieht einheitlicher aus
und eventuell könnte es vorteile für den Inline-Code haben. PS: die Pascalversion ist am Ende schneller, als das ASM von dort oben, da in Delphi diese Funktion als INLINE-Code defniert ist. heißt, im Programm gibt es diese Funktion dann nicht, da der Vergleich direkt vor Ort in deinen Quellcode integriert wird. (bei dem ASM gibt es diese Funktion, wo erst hin- und dann wieder zurückgesprungen werden muß) |
Re: Die größer Zahl nehmen ?
In D7 ist es kein inline (gibts das hier überhaupt?)
|
Re: Die größer Zahl nehmen ?
also seit 'ner Weile gibt's das wieder (weiß nicht genau, seit D2006 auf jeden Fall)
|
Re: Die größer Zahl nehmen ?
Zitat:
Es gab hier mal ein Thema (vielleicht gibt es das auch noch), im dem der Sinn des Ganzen beschrieben war. Seitdem habe ich mir gemerkt, wenn die Parameter-Werte in der Funktion nicht verändert werden, ein "const" davor zu setzen. Mich würde es jedoch auch interessieren, wieso genau ich das davor setze. :mrgreen: Vielleicht bin ich zu gutgläubig. Grüße, Matze |
Re: Die größer Zahl nehmen ?
Bevor ich mir hier den Wolf tippe:
Zitat:
Zitat:
|
Re: Die größer Zahl nehmen ?
solange man bei einem Integer/LongInt/SmallInt/ShortInt/Cardinal/LongWord/Word/Byte/Boolean mit Var/Out arbeitet, wird eine Refferenz übergeben ... wenn man Const oder nichts übergibt, dann wird (zumindestens bei der Konvention PASCAL ... bei den anderen weiß ich es jetzt nicht) nur der Inhalt koppiert da dieses in der Verarbeitung schneller ist ... muß dann ja nur noch aus dem Variablenspeicher gelesen und nicht erst die Referenz aufgelöst werden.
Vorallem bei größeren Typen wird bei Const/Var/Out die Referenz übergeben und ohne eine Angabe eine Kopie des Inhalts angelegt und damit geareitet. für IN bin ich mir grad nicht ganz sicher. Sozusagen: in Delphi gibt es in der Standardaufrufkonvention und bei vielen Typen kleiner-gleich Integer eigentlich keinen Unterschied zwischen Const oder Nichts ... aber es kann auch nicht schaden, wenn man es macht ... wenn man es immer macht, vergißt man es nicht bei Typen, wo es besser wär :stupid: |
Re: Die größer Zahl nehmen ?
Wenn ich es richtig verstanden habe, meckert der Compiler also, wenn ich aus proc1(Const a: xy)
eine proc2(var b:yz) mit meinem konstanten Parameter aufrufe. Das war früher anders. Da konnte man sowas machen und in der Procedure proc1 mit dem veränderten Parameter weitermachen, aber eben nur intern! An die ursprüngliche Aufrufstelle wurde dann keine Veränderung zurückgegeben. So gesehen, macht das durchaus Sinn! |
Re: Die größer Zahl nehmen ?
wie, das ginge früher mal?
weder in D7 noch Neuer geht's
Delphi-Quellcode:
man kann es sich so vorstellen (von der Verwendung her):
procedure Test2(var x: Integer);
begin x := 123; end; procedure Test1(const x: Integer); begin Test2(x); // [Fehler] Unit1.pas(32): Konstantenobjekt kann end; // nicht als Var-Parameter weitergegeben werden procedure TForm1.FormCreate(Sender: TObject); begin Test1(Tag); end; mit Const ist der Parameter wie eine Konstante ohne Const ist es wie eine lokale Vaiable, welche beim Prozedurstart vorbelegt wurde |
Re: Die größer Zahl nehmen ?
Zitat:
Außerdem meine ich mit früher sowas wie Turbo Pascal, da kommt das ja alles her. und das kannte auch keine const-Angabe bei den Parametern. Zitat:
|
Re: Die größer Zahl nehmen ?
und das geht auch heute noch! gerade ausprobiert!
wenn dagegen const dabei steht, gibt es ne Fehlermeldung vom Compiler: E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden |
Re: Die größer Zahl nehmen ?
ja klar, ohne CONST ist es ja keine Konstante mehr und darf verändert werden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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