AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

guter stil????

Ein Thema von Mr. Pink · begonnen am 25. Mär 2006 · letzter Beitrag vom 29. Mär 2006
Antwort Antwort
Seite 1 von 8  1 23     Letzte » 
Mr. Pink

Registriert seit: 29. Jan 2006
72 Beiträge
 
#1

guter stil????

  Alt 25. Mär 2006, 22:28
hallo,
auch wenn ich noch vor ein paar stunden eine frage zu diesem programm gestellt habe, hab ich doch jetzt eine ganz andere:
Ich möchte mal hören, ob mein schreibstil in delphi gut oder schlecht ist. ich kam drauf, indem ich mir mal andere sources angeschaut habe, die irgendwie ganz anders aufgebaut sind als meine codes!

Ich würd mich freuen wenn sich mal jemand den code angucken und sagen könnte was ich besser/anders machen sollte.

danke an alle die sich die mühe machen!!!
btw, das ganze ist zur primfaktorzerlegung gedacht.

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var m:int64;
  Form1: TForm1;

implementation

{$R *.dfm}

function pruefen(n:int64):boolean;
var x:int64;
    p:boolean;
begin
 p:=true;
 x:=round(n/2);
 if n>=2 then
 begin
  while x>1 do
  begin
   if (n mod x) = 0 then
   begin
    p:=false;
    break;
   end;
   x:=x-1;
  end;
 end
 else p:=false;
 if p=true then pruefen:=true
 else pruefen:=false;
end;

procedure zerlegen(n:int64);
var x:int64;
begin
 x:=2;
 while (n mod x<>0) do x:=x+1;
 if length(form1.Label2.Caption)>0 then form1.Label2.Caption:=form1.Label2.Caption+'*';
 form1.Label2.Caption:=form1.Label2.Caption+inttostr(x);
 if pruefen(n div x)=false then zerlegen(n div x);
 m:=m*x;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 m:=1;
 label2.Caption:='';
 if pruefen(strtoint(edit1.Text))=true then label2.Caption:=edit1.Text+' ist eine Primzahl!'
 else
 begin
  zerlegen(strtoint(edit1.Text));
  label2.Caption:=label2.Caption+'*'+inttostr(strtoint(edit1.Text)div m);
 end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von GLaforge
GLaforge

Registriert seit: 16. Nov 2003
Ort: Halle
106 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: guter stil????

  Alt 25. Mär 2006, 22:37
Hi,
was mir gleich auffällt sind fehlende Kommentare, sind für dich und uns schon meist von nutzen. Desweiteren würde ich eine Einrückung bei den if Konstrukten vornehmen. Ich schreibe immer das else unter das then etc. Ausserdem würde ich nach dem 1. Begin die fortlaufenden Zeilen auch um ein bis zwei Leerzeichen einrücken.
Jedoch muss man auch sagen, dass es so keine wirklichen Festlegungen gibt. Es sollte aber immer dein Ziel sein, dass du und jeder andere sich im QT zurechtfindet, eben indem man Schleifen etc. gesondert einrückt.
Cogito ergo sum - Ich denke also bin Ich
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: gutet stil????

  Alt 25. Mär 2006, 22:39
Nur ein Wort zur Formatierung, die ist so ja schrecklich.
Inhaltlich leicht verändert (wichtig!) und wenn du so Wert auf Ordentlichkeit legst, solltest du den Code auch entsprechend formatieren. Ich würde ihn in deinem Fall so formatieren:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  m: Int64;
  Form1: TForm1;

implementation

{$R *.dfm}

function pruefen(n: Int64): Boolean;
var
  x: Int64;
  p: Boolean;
begin
  p := true;
  x := round(n / 2);
  if n >= 2 then
  begin
    while x > 1 do
    begin
      if (n mod x) = 0 then
      begin
        p := false;
        break;
      end;
      x := x - 1;
    end;
  end else
    p := false;

  if p then // überprüfe niemals auf "= true" !!
    pruefen := true else // Willst du die Gründe wissen -> Suchfunktion.
      pruefen := false; // 'p := pruefen' müsste hier auch gehen
end;

procedure zerlegen(n: Int64);
var
  x: Int64;
begin
  x := 2;
  while (n mod x <> 0) do
    x := x + 1;

  if Length(Form1.Label2.Caption) > 0 then
    Form1.Label2.Caption := Form1.Label2.Caption + '*';
  Form1.Label2.Caption := Form1.Label2.Caption + IntToStr(x);

  if pruefen(n div x) = false then
    zerlegen(n div x);

  m := m * x;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  m := 1;
  Label2.Caption := '';

  if pruefen(StrToInt(Edit1.Text)) then // kein "= true"!
  begin
    Label2.Caption := Edit1.Text + ' ist eine Primzahl!else
    begin
      zerlegen(StrToInt(Edit1.Text));
      Label2.Caption := Label2.Caption + '*' +
        IntToStr(StrToInt(Edit1.Text) div m);
    end;
  end;
end;

end.
Bei Gelegenheit kannst du dir auch einmal den Borland-Styleguide durchlesen.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: guter stil????

  Alt 25. Mär 2006, 22:39
Mir fallen auf die Schnelle zwei Sachen auf:

1. Einrückungen. Manchmal vorhanden, manchmal nicht. Nimm nen Sourceformatter, google mal nach Delforex.
2. if aboolean=true then... ist nicht korrekt. if aboolean then... muss es heißen. Denn ersteres vergleicht den Wert von aboolean mit dem Wert der Konstante True. Zweiteres schaut nach, ob aboolean wahr ist oder nicht. Das macht vor allem dann einen Unterschied, wenn du mit LongBool oder ähnlichem arbeitest.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#5

Re: gutet stil????

  Alt 25. Mär 2006, 22:41
Delphi-Quellcode:
function pruefen(n: int64):boolean;
var x: int64;
begin
  result := true;
  x := round(n/2);
  if n >= 2 then
    begin
      while x > 1 do
        begin
          if (n mod x) = 0 then
            begin
              result := false;
              break;
            end;
         dec(x);
       end;
     end
   else
     result := false;
end;

procedure zerlegen(n:int64);
var x: int64;
begin
  x := 2;
  while (n mod x <> 0) do
    x := x+1;
  if length(Form1.Label2.Caption) > 0 then
    Form1.Label2.Caption := Form1.Label2.Caption + '*';
  Form1.Label2.Caption := Form1.Label2.Caption + inttostr(x);
  if not pruefen(n div x) then
    zerlegen(n div x);
  m := m*x;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  m := 1;
  Label2.Caption := '';
  if pruefen(strtoint(edit1.Text)) then
    Label2.Caption := Edit1.Text + ' ist eine Primzahl!
  else
    begin
      zerlegen(strtoint(edit1.Text));
      Label2.Caption := Label2.Caption + '*' + inttostr(strtoint(edit1.Text) div m);
    end;
end;
So würd ichs machen.
Ich hab mir den Algo an sich nicht angeschaut, wie effektiv und richtig der ist
Was hab ich gemacht: Oben in der zerlegen-Funktion hab ich die Variable p rausgenommen und gleich result verwendet. Dann hab ich alle Einrückungsebenen konsequent durchgezogen, Alle Anfangsbuchstaben von Objekten groß geschrieben, Leerzeichen vor und hinter jedes ":=" gesetzt und auch vor und hinter jedes "+" in den Stringzusammensetzungen.

//edit1: Zusätzlich noch hinter jedem ":" in den Variablendeklarationen und den Parameterangaben ein Leerzeichen eingefügt.
//edit2: Leerzeichen rund um die <, >, <=, >= und <>-Vergleiche eingefügt.
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: gutet stil????

  Alt 25. Mär 2006, 22:43
Zitat von Ultimator:
So würd ichs machen.
Da fand ich seines ja fast übersichtlicher.

Ich persönlich vorde vor begin nie einrücken. Aber darüber kann man sich natürlich streiten.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: guter stil????

  Alt 25. Mär 2006, 22:43
Hallo,

ein paar Anmerkungen:
- mehr einrücken
- ab und zu mit Lehrzeilen logische Schritte trennen
- Kommentare
- vor und nach Operatoren ein Leerzeichen
- Zwischenergebnisse nicht mehrfach ausrechnen, sondern speichern
- statt "if a = False" lieber "if not a"
- bei Funktionen/Schlüsselwörtern Groß-/Kleinschreibung beachten
- Variablennamen evtl. aussagekräftiger

Beispiel:
Delphi-Quellcode:
procedure zerlegen(n:int64);
var x:int64;
begin
x:=2;
while (n mod x<>0) do x:=x+1;
if length(form1.Label2.Caption)>0 then form1.Label2.Caption:=form1.Label2.Caption+'*';
form1.Label2.Caption:=form1.Label2.Caption+inttostr(x);
if pruefen(n div x)=false then zerlegen(n div x);
m:=m*x;
end;
Besser:
Delphi-Quellcode:
procedure Zerlegen(n: Int64);
var
  x: Int64;
  Zwischen: Int64;
begin
  x := 2;
  while (n mod x <> 0) do
    Inc(x);

  if Length(Form1.Label2.Caption) > 0 then
    Form1.Label2.Caption := form1.Label2.Caption + '*';
  Form1.Label2.Caption := Form1.Label2.Caption + IntToStr(x);

  Zwischen := n div x;
  if not Pruefen(Zwischen) then
    Zerlegen(Zwischen);
  m := m * x;
end;
Ansonsten schon nicht so schlecht. Insbeondere bei der Einrückung sehe ich Potential, auch wenn das bei Dir teilweise noch schwer lesbar ist.

Gruß
xaromz
//Edit: Wie viele Rechtschreibfehler man so produzieren kann...
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#8

Re: gutet stil????

  Alt 25. Mär 2006, 22:45
Zitat von Matze:
Zitat von Ultimator:
So würd ichs machen.
Da fand ich seines ja fast übersichtlicher.

Ich persönlich vorde vor begin nie einrücken. Aber darüber kann man sich natürlich streiten.
Hm, ich hab mir das so angewöhnt und finds auch gut zu lesen *g*
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#9

Re: guter stil????

  Alt 25. Mär 2006, 22:45
Also ich häts so gemacht (von der Formatierung, vom Inhalt weiß ich nicht)

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var m:int64;
  Form1: TForm1;

implementation

{$R *.dfm}

function pruefen(n: int64): boolean;
var
  x: int64;
  p: boolean;
begin
  p := true;
  x := round(n / 2);
  if n >= 2 then
  begin
    while x > 1 do
    begin
      if (n mod x) = 0 then
      begin
        p := false;
        break;
      end;
      x := x-1;
    end;
  end else
    p := false;

  if p = true then
    pruefen := true
  else
    pruefen := false;
end;

procedure zerlegen(n: int64);
var
  x:int64;
begin
  x:=2;
  while (n mod x <> 0) do
    x := x + 1;

  if Length(form1.Label2.Caption) > 0 then
    Form1.Label2.Caption := Form1.Label2.Caption + '*';

  Form1.Label2.Caption := Form1.Label2.Caption + IntTosSr(x);
  if pruefen(n div x) = false
    then zerlegen(n div x);

  m := m * x;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  m := 1;
  Label2.Caption := '';
  if pruefen(StrToInt(Edit1.Text)) = True then
    Label2.Caption := Edit1.Text + ' ist eine Primzahl!'
  else begin
    zerlegen(StrToInt(Edit1.Text));
    Label2.Caption := Label2.Caption + '*' + IntToStr(StrToInt(Edit1.Text) div m);
  end;
end;

end.
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: guter stil????

  Alt 25. Mär 2006, 22:47
Ach ja,
in der Routine "Pruefen":
Delphi-Quellcode:
  if p = true then
    pruefen := true
  else
    pruefen := false;
Wie wäre es hier mit
Result := p; Gruß
xaromz
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz