AGB  ·  Datenschutz  ·  Impressum  







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

Rechner für durch rechnen

Ein Thema von black_ · begonnen am 13. Jan 2004 · letzter Beitrag vom 17. Jan 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 01:43
Zitat von eddy:
Hi Lucki,
ich hab' beide Varianten mal in ein Programm eingebunden.
Einer macht den Braten ja auch nicht fett, aber wenn du dann noch try-finally-Blöcke hast und alles mit diesen try-except-Blöcken machst, dann bekomst du den Overhead.
Was würdest du denn nehmen:
Delphi-Quellcode:
try
  sl.LoadFromFile(Filename);
except
  RaiseKastOSError();
end;
oder
Delphi-Quellcode:
if FileExists(Filename) then
  sl.LoadFromFile(Filename)
else
  ShowMessage('Datei nicht gefunden.');
Du machst doch im Prinzip mit deinem try-except-Block folgendes: Du fährst mit Vollgas auf die Kreuzung und wenn es kracht, war es rot. Was mache ich? Ich kucke vorher auf die Ampel und wenn es grün ist fahre ich, ansonsten bleibe ich stehen.

So habe es gefunden. Jeffrey Richter schreibt folgendes zum Structured Exception Handling (SEH):
Zitat:
Your compiler must generate special code when exception blocks are entered into and exited from. The compiler must produce tables of support data structures to handle SEH. The compiler also must supply callback functions that the operating system can call so that exception blocks can be traversed. And the compiler is responsible for preparing stack frames and other internal information that is used and referenced by the operating system.
Aöso, wenn das keinen Overhead bedeutet, dann weiß ich es auch nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#12

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 06:59
Luckie: In der theorie ist das alles sehr schön und gut...

nur in der Praxis macht der Overhead kaum etwas aus - zumindest kaum an der Performance aktueller Software - die haben ihre Flaschenhälse woanders.

Ich meine - wenn bei einer 24 MB .exe vielleicht 100k overhead für try-except - Blöcke sind... wen juckt das?

Zudem: ich bin auch ein Fan von sauberem code - aber manchmal gehts halt einfach nicht aus Zeitgründen. Damit muss man als Entwickler halt leben. (Leider!)
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 07:16
Gut, das ist jetzt wohl mein Idealismuss. Aber auf der anderen Seite wird sich immer beschwert, dass jedes kleine Popel-Programm schon 2 GHz und 384 MB Ram vorraussetzt. Und hier fängt so was an. Ich finde es schade, dass heutige Programmierer, sei es mangels Können oder aus wirtschaftlichen Gesichtspunkten, nicht mehr in der Lage sind effizient zu programmieren.

Ich erinnere mich an den alten HP Tischrechner von meinem Vater, da hatte man nur 10Speicherplätze ind wenige Byte an Speicherkapazität zur Verfügung, da musste man effizient programmieren bei größeren Programmen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#14

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 11:06
Hi Lucki,

prinzipiell stimme ich Dir ja zu, aber laß' die Kirche im Dorf. Was Dein Beispiel mit "LoadFromFile(Filename)" betrifft, danach hat black_ nicht gefragt und ich garantiere Dir, daß ich in diesem Fall immer
Code:
if FileExists(Filename) then
verwendet habe.

Zurück zu der von mir als Beispiel angebotenen Funktion: wieviel Byte Overhead erhalte ich denn nun, wenn ich diese Funktion 1000 x in meinem Programm aufrufe? Ich hatte bisher immer vermutet, daß Funktionen dafür da sind, um doppelt verwendeten Programmcode nur einmal zu generieren, es daher für die EXE-Datei gleich ist, ob ich die Funktion 1 x benutze oder 1000 Mal.

Davon mal abgesehen, was immer black_ auch vor hat, ich verwende für Zahlen kein Edit, sondern eine ausschließlich eine für Zahlen ausgelegte Komponente EnhEdit, und ich würde die Eingabefelder mit Sicherheit ebenfalls dynamisch erzeugen (oder eine andere Variante wählen).

Was die Ampel betrifft: Grün heißt fahren, Rot heißt bleib stehen und Gelb heißt schneller fahren oder?

mfg
eddy
  Mit Zitat antworten Zitat
black_

Registriert seit: 9. Dez 2003
10 Beiträge
 
#15

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 11:19
Jetzt sind alle Edits und Label in dem Programm nur fehlt wie gesagt die Fehlermeldung dazu.
Noch mal was anders ,zu den Leuten die sich wundern für was man so viele Edits und Labels brauch ,das Programm ist zur berechnung von Bienenflügel gedacht ,das heißt man kann an Hand von Werten erechnen mit welcher Bienrasse es zu tun hat. Zb. 43:40=1,075 dieser Wert ergibt 27 ,diese Werte trägt man in ein Korortienatensystem daraus kann man dann erkennen welche Rasse es ist. Das ganze kann man mit Excel berechnen ,diese Programm soll das aber übernehmen.
Hier sind die bestimmten Werte.
Code:
0,5   0
0,515   1
0,531   2
0,546   3
0,563   4
0,578   5
0,596   6
0,613   7
0,63   8
0,648   9
0,666   10
0,685   11
0,704   12
0,724   13
0,744   14
0,765   15
0,786   16
0,807   17
0,829   18
0,852   19
0,875   20
0,899   21
0,923   22
0,948   23
0,974   24
1,000   25
1,027   26
1,055   27
1,083   28
1,113   29
1,143   30
1,174   31
1,206   32
1,239   33
1,272   34
1,308   35
1,344   36
1,381   37
1,479   38
Bei Excel geht das mit der Formel =SVERWEIS(C59;Blatt2!$A$1:$B$41;2) die Formal schaut welcher Wert auf Blatt1 ist und gleicht das mit den Werten auf Blatt2 ab.
Hier ist jetzt der fast fertige Code für das Programm. Damit kann man nur die durch Rechnungen machen.
Es müssen alle Felder ausgefüllt werden sonst kommt eine Fehlermeldung.
Code:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    Edit20: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    GroupBox2: TGroupBox;
    Edit21: TEdit;
    Edit22: TEdit;
    Edit23: TEdit;
    Edit24: TEdit;
    Edit25: TEdit;
    Edit26: TEdit;
    Edit27: TEdit;
    Edit28: TEdit;
    Edit29: TEdit;
    Edit30: TEdit;
    Edit31: TEdit;
    Edit32: TEdit;
    Edit33: TEdit;
    Edit34: TEdit;
    Edit35: TEdit;
    Edit36: TEdit;
    Edit37: TEdit;
    Edit38: TEdit;
    Edit39: TEdit;
    Edit40: TEdit;
    GroupBox4: TGroupBox;
    Edit41: TEdit;
    Edit42: TEdit;
    Edit43: TEdit;
    Edit44: TEdit;
    Edit45: TEdit;
    Edit46: TEdit;
    Edit47: TEdit;
    Edit48: TEdit;
    Edit49: TEdit;
    Edit50: TEdit;
    Edit51: TEdit;
    Edit52: TEdit;
    Edit53: TEdit;
    Edit54: TEdit;
    Edit55: TEdit;
    Edit56: TEdit;
    Edit57: TEdit;
    Edit58: TEdit;
    Edit59: TEdit;
    Edit60: TEdit;
    StatusBar1: TStatusBar;
    GroupBox5: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox6: TGroupBox;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Label40: TLabel;
    SpeedButton1: TSpeedButton;
    Edit61: TEdit;
    Edit62: TEdit;
    Edit63: TEdit;
    Edit64: TEdit;
    Edit65: TEdit;
    Edit66: TEdit;
    Edit67: TEdit;
    Edit68: TEdit;
    Edit69: TEdit;
    Edit70: TEdit;
    Edit71: TEdit;
    Edit72: TEdit;
    Edit73: TEdit;
    Edit74: TEdit;
    Edit75: TEdit;
    Edit76: TEdit;
    Edit77: TEdit;
    Edit78: TEdit;
    Edit79: TEdit;
    Edit80: TEdit;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    Label44: TLabel;
    Label45: TLabel;
    Label46: TLabel;
    Label47: TLabel;
    Label48: TLabel;
    Label49: TLabel;
    Label50: TLabel;
    Label51: TLabel;
    Label52: TLabel;
    Label53: TLabel;
    Label54: TLabel;
    Label55: TLabel;
    Label56: TLabel;
    Label57: TLabel;
    Label58: TLabel;
    Label59: TLabel;
    Label60: TLabel;
    Label61: TLabel;
    Label62: TLabel;
    Label63: TLabel;
    Label64: TLabel;
    Label65: TLabel;
    Label66: TLabel;
    Label67: TLabel;
    Label68: TLabel;
    Label69: TLabel;
    Label70: TLabel;
    Label71: TLabel;
    Label72: TLabel;
    Label73: TLabel;
    Label74: TLabel;
    Label75: TLabel;
    Label76: TLabel;
    Label77: TLabel;
    Label78: TLabel;
    Label79: TLabel;
    Label80: TLabel;
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private-Deklarationen }
     u, o, Index: real;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  u := StrToFloat(Edit1.text);
  o := StrToFloat(Edit21.text);
  u := StrToFloat(Edit2.text);
  o := StrToFloat(Edit22.text);
  u := StrToFloat(Edit3.text);
  o := StrToFloat(Edit23.text);
  u := StrToFloat(Edit4.text);
  o := StrToFloat(Edit24.text);
  u := StrToFloat(Edit5.text);
  o := StrToFloat(Edit25.text);
  u := StrToFloat(Edit6.text);
  o := StrToFloat(Edit26.text);
  u := StrToFloat(Edit7.text);
  o := StrToFloat(Edit27.text);
  u := StrToFloat(Edit8.text);
  o := StrToFloat(Edit28.text);
  u := StrToFloat(Edit9.text);
  o := StrToFloat(Edit29.text);
  u := StrToFloat(Edit10.text);
  o := StrToFloat(Edit30.text);
  u := StrToFloat(Edit11.text);
  o := StrToFloat(Edit31.text);
  u := StrToFloat(Edit12.text);
  o := StrToFloat(Edit32.text);
  u := StrToFloat(Edit13.text);
  o := StrToFloat(Edit33.text);
  u := StrToFloat(Edit14.text);
  o := StrToFloat(Edit34.text);
  u := StrToFloat(Edit15.text);
  o := StrToFloat(Edit35.text);
  u := StrToFloat(Edit16.text);
  o := StrToFloat(Edit36.text);
  u := StrToFloat(Edit17.text);
  o := StrToFloat(Edit37.text);
  u := StrToFloat(Edit18.text);
  o := StrToFloat(Edit38.text);
  u := StrToFloat(Edit19.text);
  o := StrToFloat(Edit39.text);
  u := StrToFloat(Edit20.text);
  o := StrToFloat(Edit40.text);
  u := StrToFloat(Edit41.text);
  o := StrToFloat(Edit61.text);
  u := StrToFloat(Edit42.text);
  o := StrToFloat(Edit62.text);
  u := StrToFloat(Edit43.text);
  o := StrToFloat(Edit63.text);
  u := StrToFloat(Edit44.text);
  o := StrToFloat(Edit64.text);
  u := StrToFloat(Edit45.text);
  o := StrToFloat(Edit65.text);
  u := StrToFloat(Edit46.text);
  o := StrToFloat(Edit66.text);
  u := StrToFloat(Edit47.text);
  o := StrToFloat(Edit67.text);
  u := StrToFloat(Edit48.text);
  o := StrToFloat(Edit68.text);
  u := StrToFloat(Edit49.text);
  o := StrToFloat(Edit69.text);
  u := StrToFloat(Edit50.text);
  o := StrToFloat(Edit70.text);
  u := StrToFloat(Edit51.text);
  o := StrToFloat(Edit71.text);
  u := StrToFloat(Edit52.text);
  o := StrToFloat(Edit72.text);
  u := StrToFloat(Edit53.text);
  o := StrToFloat(Edit73.text);
  u := StrToFloat(Edit54.text);
  o := StrToFloat(Edit74.text);
  u := StrToFloat(Edit55.text);
  o := StrToFloat(Edit75.text);
  u := StrToFloat(Edit56.text);
  o := StrToFloat(Edit76.text);
  u := StrToFloat(Edit57.text);
  o := StrToFloat(Edit77.text);
  u := StrToFloat(Edit58.text);
  o := StrToFloat(Edit78.text);
  u := StrToFloat(Edit59.text);
  o := StrToFloat(Edit79.text);
  u := StrToFloat(Edit60.text);
  o := StrToFloat(Edit80.text);
  Index := u / o;
  Label21.Caption := FloatToStr(Index);
  Label22.Caption := FloatToStr(Index);
  Label23.Caption := FloatToStr(Index);
  Label24.Caption := FloatToStr(Index);
  Label25.Caption := FloatToStr(Index);
  Label26.Caption := FloatToStr(Index);
  Label27.Caption := FloatToStr(Index);
  Label28.Caption := FloatToStr(Index);
  Label29.Caption := FloatToStr(Index);
  Label30.Caption := FloatToStr(Index);
  Label31.Caption := FloatToStr(Index);
  Label32.Caption := FloatToStr(Index);
  Label33.Caption := FloatToStr(Index);
  Label34.Caption := FloatToStr(Index);
  Label35.Caption := FloatToStr(Index);
  Label36.Caption := FloatToStr(Index);
  Label37.Caption := FloatToStr(Index);
  Label38.Caption := FloatToStr(Index);
  Label39.Caption := FloatToStr(Index);
  Label40.Caption := FloatToStr(Index);
  Label61.Caption := FloatToStr(Index);
  Label62.Caption := FloatToStr(Index);
  Label63.Caption := FloatToStr(Index);
  Label64.Caption := FloatToStr(Index);
  Label65.Caption := FloatToStr(Index);
  Label66.Caption := FloatToStr(Index);
  Label67.Caption := FloatToStr(Index);
  Label68.Caption := FloatToStr(Index);
  Label69.Caption := FloatToStr(Index);
  Label70.Caption := FloatToStr(Index);
  Label71.Caption := FloatToStr(Index);
  Label72.Caption := FloatToStr(Index);
  Label73.Caption := FloatToStr(Index);
  Label74.Caption := FloatToStr(Index);
  Label75.Caption := FloatToStr(Index);
  Label76.Caption := FloatToStr(Index);
  Label77.Caption := FloatToStr(Index);
  Label78.Caption := FloatToStr(Index);
  Label79.Caption := FloatToStr(Index);
  Label80.Caption := FloatToStr(Index);
end;

end.
Ich weiß nicht ob es die Möglichkeit gibt im Delphi so was zu erstellen das wenn Zb. das das Ergebnis erscheind und dahinter der Wert 27 ,bei 37:43=0,860 Wert 19 ,kann man auch in der Liste oben nach schauen.

mfg

Black
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#16

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 13:34
Hallo black_,

vielleicht hättest Du mit dem Hintergrund zu Deinem Problem anfangen sollen! Wo kommen die Werte 43 und 40 zum Berechnen her?

Ich würde die Konstanten in ein Array legen:

Code:
const
  wanz = 38; // Anz. der Werte
  werte : array[0..wanz] of real = (0.5, 0.515, ....., 1.479);

function (a,b : integer) : integer;
var
  r : real;
begin
  r := a/b;
  i := 0;
  while (r < werte[i]) and (i < wanz) do inc(i);
  Result := i;
end;
Voraussetzung, daß zur Bestimmung immer 2 Werte eingegeben werden müssen (Dein Beispiel 40 und 43).


mfg
eddy
  Mit Zitat antworten Zitat
black_

Registriert seit: 9. Dez 2003
10 Beiträge
 
#17

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 14:22
Die Werte 43 und 40 sind Messwerte und werden mit eine Microlesegerät ermittelt, der Flügel wird mit dem Gerät auf 48 fache Vergrößerung und kann Vermessen werden mit eine Specialschablone, und die Werte kann man dann ablesen.
Z.B. sind 43 =4,3 cm.
Das ganze ist eine Wissenschaft für sich.
Wenn das Programm fertig ist dann werden alle die mit geholfen haben erwähnt, so gut in Delphi bin ich noch nicht um so ein Programm aus dem Kopf zu Coden.
Bekomme nächste Woche erst mal ein gutes Buch.


mfg Black
  Mit Zitat antworten Zitat
black_

Registriert seit: 9. Dez 2003
10 Beiträge
 
#18

Re: Rechner für durch rechnen

  Alt 14. Jan 2004, 15:35
Hier ist schon mal das Programm ,es fehlt noch einiges aber.

mfg

Black
Angehängte Dateien
Dateityp: exe project1_647.exe (414,0 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
black_

Registriert seit: 9. Dez 2003
10 Beiträge
 
#19

Re: Rechner für durch rechnen

  Alt 15. Jan 2004, 20:37
Ein großer Fehler ist in der Berechnug drin ,wie kann man die edits und label ansprechen das nicht immer das selber Ergebnis raus kommt.
Sonst muß man alles über var eingeben.
Zb.
Code:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var a, b, c, d, e, f, ab, cd, ef: Real;
begin
  a := StrToFloat(Edit1.text);
  b := StrToFloat(Edit21.text);
  c := StrToFloat(Edit2.text);
  d := StrToFloat(Edit22.text);
  e := StrToFloat(Edit3.text);
  f := StrToFloat(Edit23.text);
  ab:= a / b;
  cd:= c / d;
  ef:= e / f;
  Label21.Caption := FloatToStr(ab);
  Label22.Caption := FloatToStr(cd);
  Label23.Caption := FloatToStr(ef);
...............usw.
..........
end;

end.
Gibt es eine Möglichkeit das übersichtlicher zu machen?

mfg

Black
  Mit Zitat antworten Zitat
black_

Registriert seit: 9. Dez 2003
10 Beiträge
 
#20

Re: Rechner für durch rechnen

  Alt 17. Jan 2004, 08:25
Hat keiner eine Möglichkeit?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:01 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