Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Übersetzung C -> Delphi: Verkürzte if-Bedingung (https://www.delphipraxis.net/109915-uebersetzung-c-delphi-verkuerzte-if-bedingung.html)

Luckie 10. Mär 2008 09:12


Übersetzung C -> Delphi: Verkürzte if-Bedingung
 
Ich habe hier den folgenden kranken C-Code:
Code:
UINT Sum(UINT uNum) {
  return((uNum == 0) ? 0 : (uNum + Sum(uNum - 1)));
}
Wie sieht das in Delphi aus?

thkerkmann 10. Mär 2008 09:17

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;

Luckie 10. Mär 2008 09:21

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. ;)

Dax 10. Mär 2008 09:22

Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
 
Zitat:

Zitat von Luckie
Ich habe hier den folgenden kranken C-Code

Wieso krank? Das sieht noch fast(!) schön aus für C ;)

DeddyH 10. Mär 2008 09:22

Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
 
Das ist der sog. ternäre Operator, den gibt es in Java oder PHP auch ;)

Medium 10. Mär 2008 09:24

Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
 
Die Funktion lässt sich durch eine Formel weit eleganter und schneller abbilden: Herrn Gauß sei Dank

Luckie 10. Mär 2008 09:36

Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
 
@Medium: Ich weiß, aber damit bekomme ich keinen Stacküberlauf hin, aber genau den brauche ich. ;)

jottkaerr 10. Mär 2008 10:05

Re: Übersetzung C -> Delphi: Verkürzte if-Bedingung
 
Dann nimm doch ein Argument, dass groß genug ist:

Delphi-Quellcode:
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.
jkr

Luckie 10. Mär 2008 10:09

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. ;)

jottkaerr 10. Mär 2008 10:15

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.
Seite 1 von 2  1 2      

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