Entwickler-Ecke

Sonstiges (Delphi) - Taschenrechner mit ListBox


info.noob - Di 16.04.13 19:58
Titel: Taschenrechner mit ListBox
Hallo,

also wir haben in Informatik jetzt aufbekommen, einen Taschenrechner mit einer ListBox zu programmieren. Leider hat uns mein Lehrer rein gar nichts dazu gesagt (wir benutzen in der Schule übrigens Delphi 5). Ich bin jetzt schon so weit gekommen, dass ich die ganzen Vorgänge (also addieren,subtrahieren,etc.) den Items in der ListBox zugeordnet habe. Jetzt besteht mein Problem aber darin, dass eine Fehler Meldung aufploppen soll, wenn durch 0 geteilt wird. Wenn ich das nämlich schreibe, wird aufeinmal auch bei "addieren" oder "multiplizieren" geteilt.

Ich hoffe jemand kann mir helfen, denn wir haben grad erst mit dem Thema angefangen und ich kriege leider auch keine Hilfe vom Lehrer.

Hier der Quellcode:


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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    zaehler: TEdit;
    reset: TButton;
    zaehler2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Image1: TImage;
    ListBox: TListBox;
    berechnen: TButton;
    schliessen: TButton;
    ergebnis: TLabel;
    Timer: TTimer;
    fehler1: TLabel;
    fehler2: TLabel;
    Image2: TImage;
    procedure berechnenClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
   a,b: real;
implementation

{$R *.DFM}



procedure TForm1.berechnenClick(Sender: TObject);

begin
    a:= StrtoFloat(zaehler.Text);
    b:= StrtoFloat(zaehler2.Text);

   if ListBox.selected[0then ergebnis.Caption:= FloattoStr(a + b);
   if ListBox.selected[1then ergebnis.Caption:= FloattoStr(a - b);
   if ListBox.selected[2then ergebnis.Caption:= FloattoStr(a * b);

   if (ListBox.selected[3]) and (b=0then
      Showmessage('Durch 0 darf nicht geteilt werden')
   else
   begin
   ergebnis.Caption:= FloattoStr(a / b);
end;

end;

end.


WasWeißDennIch - Di 16.04.13 20:04

Crosspost [http://www.delphipraxis.net/174297-taschenrechner-mit-listbox.html]


Mathematiker - Di 16.04.13 20:05

Unter
http://www.delphipraxis.net/174297-taschenrechner-mit-listbox.html#post1211574
wird Dir doch sehr viel geholfen.
Genügt das nicht?

Mathematiker


info.noob - Di 16.04.13 20:12

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Da hab ich es ja vorher versucht, aber wirklich beantwortet wurde meine Frage leider nicht.
Ich würde ja auch im Internet schauen oder eben meinen Lehrer fragen, aber im Internet steht nix und mein Lehrer sagt, wir müssen alles selbst herausfinden!


WasWeißDennIch - Di 16.04.13 20:20

Und mal selbst nachzudenken, was else bedeutet, kommt Dir nicht in den Sinn? Das sollte sogar im Internet stehen.

[edit] OK, ich will mal nicht so sein. Schau Dir mal den Unterschied an:

Delphi-Quelltext
1:
2:
3:
4:
if (ListBox.selected[3]) and (b=0then
  begin
    //
  end;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (ListBox.selected[3]) then
  begin
    if (b=0then
      begin
        //
      end;
  end;
[/edit]


info.noob - Di 16.04.13 20:34

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Danke! ^^ Der tipp mit dem Else war schon genug! :D
Ich habs einfach weggelassen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.berechnenClick(Sender: TObject);
var a, b: real;
begin
    a:= StrtoFloat(zaehler.Text);
    b:= StrtoFloat(zaehler2.Text);

   if ListBox.selected[0then ergebnis.Caption:= FloattoStr(a + b);
   if ListBox.selected[1then ergebnis.Caption:= FloattoStr(a - b);
   if ListBox.selected[2then ergebnis.Caption:= FloattoStr(a * b);
   if (ListBox.selected[3]) and (b=0then begin
      Showmessage('Durch 0 darf nicht geteilt werden')end;
   if (ListBox.selected[3]) and (b <> 0)then
       ergebnis.Caption:= FloattoStr(a / b);
      end;

Jetzt funktionierts einwandfrei!:)


Delphi-Laie - Di 16.04.13 21:22

Nun seid mal nicht gar zu streng mit dem Neuling, bitte!


WasWeißDennIch - Mi 17.04.13 08:29

Ich hätte es ja eher so geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if ListBox.selected[3then 
  begin
    if b = 0 then
      Showmessage('Durch 0 darf nicht geteilt werden')
    else
      ergebnis.Caption:= FloattoStr(a / b);
  end;

Dass der 4. Listboxeintrag selektiert ist, weiß man ja bereits, wenn man den äußeren Block betritt.


Tranx - Mi 17.04.13 09:37

user profile iconinfo.noob hat folgendes geschrieben Zum zitierten Posting springen:


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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    zaehler: TEdit;
    reset: TButton;
    zaehler2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Image1: TImage;
    ListBox: TListBox;
    berechnen: TButton;
    schliessen: TButton;
    ergebnis: TLabel;
    Timer: TTimer;
    fehler1: TLabel;
    fehler2: TLabel;
    Image2: TImage;
    procedure berechnenClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
   a,b: real;
implementation

{$R *.DFM}



procedure TForm1.berechnenClick(Sender: TObject);

begin
  a:= StrtoFloat(zaehler.Text);
  b:= StrtoFloat(zaehler2.Text);


  if (ListBox.selected[3]) and (b=0then
    Showmessage('Durch 0 darf nicht geteilt werden')
  else
  begin
     if ListBox.selected[0then Ergebnis.Caption:= FloattoStr(a + b);
     if ListBox.selected[1then Ergebnis.Caption:= FloattoStr(a - b);
     if ListBox.selected[2then Ergebnis.Caption:= FloattoStr(a * b);
     if Listbox.selected[3then Ergebnis.Caption:= FloattoStr(a / b);
  end
  else
  begin
    // hier irgendwas schreiben, falls genau keine der obigen Einträge selektiert sein
  end;

end;

end.


So müsste das funktionieren