![]() |
Re: Rechner für durch rechnen
Zitat:
Was würdest du denn nehmen:
Delphi-Quellcode:
oder
try
sl.LoadFromFile(Filename); except RaiseKastOSError(); end;
Delphi-Quellcode:
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.
if FileExists(Filename) then
sl.LoadFromFile(Filename) else ShowMessage('Datei nicht gefunden.'); So habe es gefunden. Jeffrey Richter schreibt folgendes zum Structured Exception Handling (SEH): Zitat:
|
Re: Rechner für durch rechnen
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!) |
Re: Rechner für durch rechnen
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. |
Re: Rechner für durch rechnen
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:
verwendet habe.
if FileExists(Filename) then
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 |
Re: Rechner für durch rechnen
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:
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.
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 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:
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.
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. mfg Black |
Re: Rechner für durch rechnen
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:
Voraussetzung, daß zur Bestimmung immer 2 Werte eingegeben werden müssen (Dein Beispiel 40 und 43).
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; mfg eddy |
Re: Rechner für durch rechnen
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 |
Re: Rechner für durch rechnen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist schon mal das Programm ,es fehlt noch einiges aber.
mfg Black |
Re: Rechner für durch rechnen
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:
Gibt es eine Möglichkeit das übersichtlicher zu machen?
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. mfg Black |
Re: Rechner für durch rechnen
Hat keiner eine Möglichkeit?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 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