![]() |
Übersetzung C -> Delphi: Verkürzte if-Bedingung
Ich habe hier den folgenden kranken C-Code:
Code:
Wie sieht das in Delphi aus?
UINT Sum(UINT uNum) {
return((uNum == 0) ? 0 : (uNum + Sum(uNum - 1))); } |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Delphi-Quellcode:
function Sum(uNum: Cardinal):Cardinal;
begin if uNum=0 then result := 0 else result := uNum + Sum(uNum - 1); end; |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Dank dir. Der Code ist wemfalls lesbar. Und wieder ein Grund mehr, warum mir eine Sprache unsympathisch ist, bei der man so kranken Code schreiben kann. ;)
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Zitat:
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Das ist der sog. ternäre Operator, den gibt es in Java oder PHP auch ;)
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Die Funktion lässt sich durch eine Formel weit eleganter und schneller abbilden:
![]() |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
@Medium: Ich weiß, aber damit bekomme ich keinen Stacküberlauf hin, aber genau den brauche ich. ;)
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Dann nimm doch ein Argument, dass groß genug ist:
Delphi-Quellcode:
jkr
program tso;
{$APPTYPE CONSOLE} {$R-} uses Classes; function Sum(const Num: Cardinal): Cardinal; begin if Num = 0 then Result := 0 else Result := Num + Sum(Num - 1); end; begin Writeln(Sum(MaxInt)); end. |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Genau das tue ich ja auch. Wenn ich aber den Gauss-Algorithmus benutze, dann bekomme ich keinen StackOverflow, sondern ein Integer-Overflow. ;)
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Wofür brauchst Du einen Stack Overflow? (Klar, dass Du ihn mit einer nicht-rekursiven Funktion nur schwerlich erzeugen kannst.)
Den Integer-Überlauf könntest Du mit {$Q-} verhindern. Fälschlicherweise hatte ich im Beispiel {$R-} verwendet. jkr |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Hehe. Neugierig ist er ja. Sei unbesorgt, ich weiß, was ich tue. ;)
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Einen Code als krank bezeichnen, aber nen StackOverflow provozieren, das sind mir die besten ;)
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Zitat:
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Delphi-Quellcode:
du siehst in Delphi sieht es auch nicht besser aus wenn man dort die verkürzte Version nimmt (math in den uses vorrausgesetzt)
function Sum(Cardinal uNum): Cardinal;
begin result := IfThen(uNum = 0, 0, uNum + Sum(uNum - 1)); end; |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Zitat:
|
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Hallo,
Zitat:
Gruß Hawkeye |
Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
Zitat:
Delphi 7 Hilfe Die Funktion gibt abhängig von einer Bedingung einen von zwei angegebenen Werten zurück. Unit Math oder StrUtils Kategorie Sonstige Routinen Delphi-Syntax: function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload; function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload; function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload; function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ''): string; overload; C++ Syntax: extern PACKAGE int __fastcall IfThen(bool AValue, const int ATrue const int AFalse); extern PACKAGE __int64 __fastcall IfThen(bool AValue, const __int64 ATrue const __int64 AFalse); extern PACKAGE double __fastcall IfThen(bool AValue, const double ATrue const double AFalse); extern PACKAGE AnsiString __fastcall IfThen(bool AValue, const AnsiString ATrue const AnsiString AFalse); Beschreibung IfThen überprüft den in AValue übergebenen Ausdruck und gibt AValue zurück, wenn die Auswertung true ergab. Ist die Auswertung false wird AFalse zurückgegeben. Wenn der Parameter AFalse weggelassen wird, gibt IfThen in Delphi 0 oder einen leeren String zurück, wenn die Auswertung von AValue False liefert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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