Autor Beitrag
info.noob
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 16.04.13 19:58 
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:

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


Zuletzt bearbeitet von info.noob am Di 16.04.13 20:35, insgesamt 1-mal bearbeitet
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 16.04.13 20:04 
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 16.04.13 20:05 
Unter
www.delphipraxis.net...box.html#post1211574
wird Dir doch sehr viel geholfen.
Genügt das nicht?

Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
info.noob Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if (ListBox.selected[3]) and (b=0then
  begin
    //
  end;

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

Für diesen Beitrag haben gedankt: info.noob
info.noob Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 16.04.13 21:22 
Nun seid mal nicht gar zu streng mit dem Neuling, bitte!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mi 17.04.13 08:29 
Ich hätte es ja eher so geschrieben:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mi 17.04.13 09:37 
user profile iconinfo.noob hat folgendes geschrieben Zum zitierten Posting springen:

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

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.