AGB  ·  Datenschutz  ·  Impressum  







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

Heron Verfahren optimieren

Ein Thema von rawsoul · begonnen am 5. Apr 2007 · letzter Beitrag vom 5. Apr 2007
Antwort Antwort
Benutzerbild von rawsoul
rawsoul

Registriert seit: 29. Okt 2006
Ort: Düsseldorf
249 Beiträge
 
Delphi 2005 Personal
 
#1

Heron Verfahren optimieren

  Alt 5. Apr 2007, 19:18
Hallo liebe Community,

Musste für die Schule über die Osterferien ein Programm schreiben, welches die Wurzel einer Zahl nach beliebiger Genauigkeit (Angabe in Nachkommastellen) berechnet und jeden Schritt in ein Stringgrid ausgibt.

Funktioniert soweit eigentlich auch ganz gut.

Aber aus eigener Erfahrung habe ich mit Sicherheit viele überflüssige Dinge in den Code reingedrexelt. Würde aus diesem Grund gerne mal wissen, wie ich die Procedure vereinfachen oder verkürzen kann.

Zur Info: Dies ist KEIN Teil der Hausaufgabe, ich frage aus reinem Interesse und möchte nicht die Aufgaben von euch gelöst bekommen...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, Grids, StdCtrls, math;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    Label3: TLabel;
    Edit3: TEdit;
    procedure Edit2Change(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //startdarstellung
  stringgrid1.Cells[0,0]:='Schritt';
  stringgrid1.cells[1,0]:='Näherungswert';
  edit3.text:=floattostr(sqrt(strtoint(edit1.text)));

  //edit1 ereignis simulieren
  edit1.OnChange(nil);
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  wurzel,r:double;
  st,i:integer;
begin
  try
    //stringgrid leeren
    stringgrid1.RowCount:=2;
    stringgrid1.Cells[0,1]:='';
    stringgrid1.Cells[1,1]:='';


    //predeklination
    i:=0;
    wurzel:=1;
    st:=strtoint(edit2.text);
    //if st>10 then st:=10;
    r:=strtofloat(edit1.text);

    //ausgabe
    edit3.text:=floattostr(sqrt(r));

    //heron
    repeat
      i:=i+1;
      wurzel:=0.5*(wurzel+r/wurzel);
      stringgrid1.RowCount:=i+1;
      stringgrid1.cells[0,i]:=inttostr(i);
      stringgrid1.Cells[1,i]:=floattostr(wurzel);
    until copy(floattostr(wurzel),1,pos(',',floattostr(wurzel))+st) = copy(edit3.text,1,pos(',',edit3.text)+st)
  except beep
  end;

  //stringgrid ausrichten
  if i>7 then stringgrid1.TopRow:=i-6;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  //edit1 ereignis simulieren
  edit1.OnChange(nil);
end;

end.
Vielen Dank schonmal im Voraus fürs Lesen

LG und frohe Ostertage,
Frank.

//Edit: Habe noch ein Screenshot zur Verständlichkeit angehängt. Oberstes Edit (Edit1) ist für den Radikand, zweites (Edit2) für die Genauigkeit und unterstes (Edit3) für die mit sqrt() berechnete Ausgabe. Arbeiten tut das ganze Programm, sobald sich in einem der ersten beiden Edits etwas tut

//Edit2: Hab ich doch glatt das Screenshot vergessen
Miniaturansicht angehängter Grafiken
heron_127.jpg  
Frank Dumont
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#2

Re: Heron Verfahren optimieren

  Alt 5. Apr 2007, 19:29
du könntest mit Hier im Forum suchenBeginUpdate und Hier im Forum suchenEndUpdate beim stringgrid arbeitet ... des steigert die leistung oft ganz nett
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#3

Re: Heron Verfahren optimieren

  Alt 5. Apr 2007, 19:33
Entweder das oder die Ausgabe generell von der Berechnung trennen. Also erst berechnen und dann ausgeben.
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

Registriert seit: 29. Okt 2006
Ort: Düsseldorf
249 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Heron Verfahren optimieren

  Alt 5. Apr 2007, 19:47
An der Geschwindigkeit gibt es eigentlich nix zu meckern, eher möchte ich die Prozedur eleganter, beziehungsweise einfacher schreiben.

Trotzdem Danke für die Antworten, ich werd mir das mal anschauen
Frank Dumont
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Heron Verfahren optimieren

  Alt 5. Apr 2007, 20:49
edit1.OnChange(nil); das ist etwas unelegant .. deklariere dir besser eine procedure, die du statt diesem Code immer aufrufst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:39 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