AGB  ·  Datenschutz  ·  Impressum  







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

guter stil????

Ein Thema von Mr. Pink · begonnen am 25. Mär 2006 · letzter Beitrag vom 29. Mär 2006
 
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#11

Re: guter stil????

  Alt 27. Mär 2006, 12:53
Hi,

Zitat von tigerman33:
kann ich genau wie Christian Seehase gerne verzichten. Auch den viel gepredigten begin-end Block um einzeilige then/else-Zweige oder Schleifen finde ich überflüssig. Das müllt mir bloß den Code zu.
Da stimme ich zu. Allerdings hab' ich noch etwas anzumerken:

Zitat von tigerman33:
Delphi-Quellcode:
while x > 0 do
  if x < 5 then
    inc(x) else
    dec(x);
Das else würde ich an den Zeilenanfang setzen, denn wenn man schnell über Code liest, und einen der ausgeführte Text der if-Bedingung nicht interessiert, liest man die Zeile für gewöhnlich nicht zu Ende - und übersieht eventuell das else.

Letztendlich würde ich es so machen:
Delphi-Quellcode:
// 1) const sorgt eventuell für schnellere Parameterweitergabe, sicher aber dafür,
// dass man sich nicht einfach Variablen überschreibt
// 2) ein normaler Integer langt und ist auf 32bit-CPUs schneller berechnet
// - StrToInt liefert auch nur einen Integer und keinen int64
// 3) Funktionsname:
// Man prüft bei der Verwendung von functions *generell* - Was wird also geprüft?
function IstPrim(const n:integer):boolean;
var x:integer;
begin
  // Sonderfall 1 beachten
  if (n = 1) then begin
    result:=false;
    exit;
  end;

  // Deine Primzahlprüfung hab' ich nicht ganz verstanden. Warum prüfst du nur die Teiler
  // bis Round(N / 2)? Normalerweise prüft man doch von 2 bis Sqrt(N)!
  result:=true;
  for x:=2 to Trunc(Sqrt(N)) do
    if ((n mod x) = 0) then begin
      result:=false;
      exit;
    end;
end;


// integer: siehe oben
procedure Zerlegen(var OutputLabel:TLabel; const n:integer);
var x:integer;
begin
  x:=2;
  while ((n mod x) <> 0) do
    Inc(c);

  // Die Bedingung vorher war Schwachsinn (*sorry*)
  OutputLabel.Caption:=OutputLabel.Caption+'*'+IntToStr(x);

  if (not IstPrim(n div x)) then
    Zerlegen(n div x);

  m:=m*x;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  m:=1;
  label2.Caption:='';
  if (IstPrim(strtoint(edit1.Text))) then
    Label2.Caption:=edit1.Text+' ist eine Primzahl!
  else begin
    Zerlegen(Label2, StrToInt(Edit1.Text));
    Label2.Caption:=Label2.Caption+'*'+IntToStr(StrToInt(Edit1.Text) div m);
  end;
end;
Die globale Variable m hab' ich erst mal dringelassen, ich hab' ja schon genug anderes kritisiert .

cu
  Mit Zitat antworten Zitat
 


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 08:24 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