Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Rechtecksberechnung
killerbiene - So 04.02.07 18:53
Titel: Rechtecksberechnung
Hi
Ich benutze in der Schule Delphi und habe schonmal vorgearbeitet...
Angefangen habe ich mit dem wohl standart , dem rechtecksberechnungprogramm!
Code ist dieser hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TRayen = class(TForm) Panel1: TPanel; SeiteBEdit: TEdit; SeiteAEdit: TEdit; FlaecheEdit: TEdit; UmfangEdit: TEdit; DiagonaleEdit: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; RechnenButton: TButton; ResetButton: TButton; EndeButton: TButton; Label11: TLabel; procedure EndeButtonClick(Sender: TObject); procedure RechnenButtonClick(Sender: TObject); procedure ResetButtonClick(Sender: TObject); private public end;
var Rayen: TRayen; SeiteA,SeiteB,Flaeche,Umfang,Diagonale : Real;
implementation
{$R *.dfm}
procedure TRayen.EndeButtonClick(Sender: TObject); begin close; end;
procedure TRayen.RechnenButtonClick(Sender: TObject); begin SeiteA:=StrToFloat(SeiteAEdit.Text); SeiteB:=StrToFloat(SeiteBEdit.Text); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end;
procedure TRayen.ResetButtonClick(Sender: TObject); begin SeiteAEdit.Text:=''; SeiteBEdit.Text:=''; FlaecheEdit.Text:=''; UmfangEdit.Text:=''; DiagonaleEdit.Text:=''; end;
end. |
Nun habe ich aber wie ihr sicher erahnen könnt einen Fehler , wenn ich nichts in die Felder A und B eingebe , also wenn die leer bleiben!Was muss ich machen , damit Anstelle eines Fehlers einfach alles mit Nullern gefüllt wird?!
mfg Killerbiene
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
Delete - So 04.02.07 19:20
kommt auf deine delphi version an. normal prüft man zuvor, ob das feld leer ist und falls ja, setzt man 0 ansonsten wandelt man den wert um. alternativ kannst du es auch mit einen try ... except ... end block schützen oder in 'ner neueren version via tryStrToFloat. HTH
PS: kommt halt auch drauf an, ob du 'ne quick und dirty lösung für die schule brauchst, wo die ansprüche nicht so hoch sind, oder ob das professionell gemacht werden soll. beim zweiten wäre der aufwand auch um einiges grösser, was z.b. in einer klausur nicht zu machen wäre.
PPS: deine globalen variablen, solltest du in die klasse verlagern. dort gehören sie auch hin.
Robinator - So 04.02.07 19:23
Hallo,
Dafür gibt es StrToFloatDef und StrToIntDef. Sollte genau das sein, was du suchst.
gruss, Rob
killerbiene - So 04.02.07 19:28
Also ich benutze Delphi 7 und auch 5!
Ich brauche natürlich eine Einsteigerfreundliche Lösung und eine die für die Schule geeignet ist , jedoch auch eine , die beim Dbugger keinen Fehler auslöst!
Geht das mit dem StrToFloatDef odernicht? Falls ja , wo soll ich das einbauen?!
danke für euer Gedult , bin halt absoluter noob!
Robinator - So 04.02.07 19:37
Hallo,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TRayen.RechnenButtonClick(Sender: TObject); begin SeiteA:=StrToFloatDef(SeiteAEdit.Text, 0); SeiteB:=StrToFloatDef(SeiteBEdit.Text, 0); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end; |
Und evtl einfach mal auf StrToFloatDef klicken und dann F1 drücken ;)
Gruss, Rob
killerbiene - So 04.02.07 19:42
Genial , danke , hat funktioniert! Vielen Dank!
Delete - So 04.02.07 19:43
also bei D5 gibts die trystrtofloat noch nicht, ebenso wie die strtofloatdef. dir wird da nix anderes übrigbleiben als den folgenden weg zu gehen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| try SeiteA:=StrToFloat(SeiteAEdit.Text); except seitea := 0; end; try SeiteB:=StrToFloat(SeiteBEdit.Text); except seiteb := 0; end; |
sollt man zwar nicht machen, aber für die schule vollkommen ausreichend. HTH.
MSC - So 04.02.07 19:54
Titel: Re: Rechtecksberechnung
Wenn du einfach nur testen willst, ob die Eingaben leer sind, kannst du das verwenden
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TRayen.RechnenButtonClick(Sender: TObject); begin if SeiteAEdit.Text = '' then exit else SeiteA:=StrToFloat(SeiteAEdit.Text); if SeiteBEdit.Text = '' then exit else SeiteB:=StrToFloat(SeiteBEdit.Text); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end; |
Ansonsten kannst du auch direkt abtesten, ob nur Zahlen und Bauchstaben verwendet wurden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| procedure TRayen.RechnenButtonClick(Sender: TObject); var ok:boolean; begin ok:=True; if SeiteAEdit.Text <> '' then begin for i:=1 to length(SeiteAEdit.Text) do if SeiteAEdit.Text[i] in ['0'..'9',','] then else ok:=false
if SeiteAEdit.Text <> '' then for i:=1 to length(SeiteBEdit.Text) do if SeiteBEdit.Text[i] in ['0'..'9',','] then else ok:=false
if ok=true then begin SeiteA:=StrToFloat(SeiteAEdit.Text); SeiteB:=StrToFloat(SeiteBEdit.Text); Flaeche:=SeiteA*SeiteB; Umfang:=2*(seiteA+SeiteB); Diagonale:=Sqrt(SeiteA*2+SeiteB*2); FlaecheEdit.Text:=FloatToStr(Flaeche); UmfangEdit.Text:=FloatToStr(Umfang); DiagonaleEdit.Text:=FloatToStr(Diagonale); end; end; end; |
Ich hoffe es funktioniert alles.
Edit: ok, in der Zeit waren 3 andere Beiträge geschrieben worden :)
killerbiene - So 04.02.07 20:05
Ok , wenn das mit der 5-er nicht geht ist es schlecht....
Nunja....also das mit Try except funktioniert zwar in der exe , jedoch löst es im debugger Fehler aus! Gibt es eine leichte andre Möglichkeit , ohne das der Debugger ausschlägt? oder ist das , dass was man im normalfall als Schüler nimmt?
Edit: Die erste Methode des letzten Beitrags probier ich mal!
Delete - So 04.02.07 20:11
für den debugger, gibts drei möglichkeiten
a) fehler ignorieren und auf weiter drücken
b) debugger abschalten
c) except in debugger abschalten
oder einfach kompilieren und die kompilierte exe ausführen :-)
killerbiene - So 04.02.07 20:12
Überflüssig....wenn ich es einfach so mache wie MSC es sagtest , also mit if '' then.... funktioniert es sogar mit Debugger wunderbar!
Danke Leute für die Hilfe! Tolles Board!
Delete - So 04.02.07 20:20
tja, dann gib mal 'n dezimalpunkt ein, oder 'n leerzeichen oder 'n buchstaben...
dann krachts. also, diesen weg würd ich an deiner stelle nicht gehen, da er zeitaufwendig ist. aber wenns richtung professionell gehen soll, gibts hier normal keinen anderen weg. aber muss halt noch etwas ausprogrammiert werden, so dass er wirklich verhebt. IMHO
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!