Autor Beitrag
killerbiene
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 04.02.07 18:53 
Hi
Ich benutze in der Schule Delphi und habe schonmal vorgearbeitet...
Angefangen habe ich mit dem wohl standart , dem rechtecksberechnungprogramm!
Code ist dieser hier:
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconGausi: Code- durch Delphi-Tags ersetzt
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: So 04.02.07 19:23 
Hallo,

Dafür gibt es StrToFloatDef und StrToIntDef. Sollte genau das sein, was du suchst.

gruss, Rob

_________________
erare humanum est
killerbiene Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: So 04.02.07 19:37 
Hallo,

ausblenden 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

_________________
erare humanum est
killerbiene Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 04.02.07 19:42 
Genial , danke , hat funktioniert! Vielen Dank!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 63

Win XP Home, Win Vista Buisiness
Delphi 7 Enterprise
BeitragVerfasst: So 04.02.07 19:54 
Wenn du einfach nur testen willst, ob die Eingaben leer sind, kannst du das verwenden
ausblenden 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        //Prozedur abbrechen
else        
SeiteA:=StrToFloat(SeiteAEdit.Text);
if SeiteBEdit.Text = '' then
exit        //Prozedur abbrechen
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:

ausblenden 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   //abtesten, dass nur 0 1 2...9 und , eingegeben wurden
    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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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