![]() |
Taschenrechner mit ListBox!
Hallo allerseits,
ich habe folgendes Problem... In Informatik müssen wir mit Hilfe von Delphi(unsere Version ist Delphi 5)einen Taschenrechner mit einer ListBox (also addieren,etc. auswählen)programmieren. Das Grundlegende hab ich jetzt, aber jetzt muss ich Außnahmen definieren, z.B. dass man nicht durch 0 teilen darf. Ich hab schon einiges daz gefunden aber nicht mit einer ListBox. Ich hab jetzt auch schon Variable a und b definiert also müsste ein Hinweis kommen wenn dividieren ausgewählt ist und durch b=0 geteilt wird. Ich brauch dringend Hilfe! Danke im voraus! |
AW: Taschenrechner mit ListBox!
Hallo,
und ich brauch eine konkrete Fragestellung, mit deinem bisherigen Quellcode. |
AW: Taschenrechner mit ListBox!
Was hat das Prüfen auf 0 mit der Listbox zu tun? Absolut gar nichts.
Aus der Listbox und den Editfeldern bekommst du Informationen (2 Werte und die Rechenart). Ist die Rechenart "dividieren" dann darf der 2. Wert nicht 0 sein. Also hole dir diese Informationen und suche nicht nach fertigen Umsetzungen, wo jemand schon einen Rechner mit einer Listbox programmiert hat. Suchen kannst du nach "Wie bekomme ich das, was in der Listbox ausgewählt wurde?" und "Wie bekomme ich die Werte aus einem Editfeld?" (Diese Frage zweimal stellen, oder nur einmal und die Antwort mit 2 multiplizieren) |
AW: Taschenrechner mit ListBox!
Hier ist mein Quellcode bisher:
Code:
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; 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[0] then ergebnis.Caption:= FloattoStr(StrtoFloat(zaehler.text) + StrtoFloat(zaehler2.text)); if ListBox.selected[1] then ergebnis.Caption:= FloattoStr(StrtoFloat(zaehler.text) - StrtoFloat(zaehler2.text)); if ListBox.selected[2] then ergebnis.Caption:= FloattoStr(StrtoFloat(zaehler.text) * StrtoFloat(zaehler2.text)); if ListBox.selected[3] then ergebnis.Caption:= FloattoStr(StrtoFloat(zaehler.text) / StrtoFloat(zaehler2.text)); end; end. Ich möchte nun, dass, wenn in zahler2 (also b) 0 steht, während dividieren in der listbox ausgewählt ist,die Meldung erscheint, dass man nicht durch 0 teilen kann erscheint. Wie das mit der Meldung geht, weiss ich schon, aber nicht wie man das mit der listbox verbindet. |
AW: Taschenrechner mit ListBox!
Vielleicht hast Du es überlesen: das Prüfen auf 0 hat nichts, aber auch gar nichts, man kann auch sagen überhaupt nichts mit einer Listbox zu tun. Die Listbox dient nur der Darstellung, alles andere solltest Du in Methoden auslagern, empfehlenswerterweise in solche mit Parametern. Ein Beispiel zur Verdeutlichung:
Delphi-Quellcode:
function TForm1.Division(Dividend, Divisor: double): double;
begin Result := 0; if math.IsZero(Divisor, 0.0001) then raise Exception.Create('Teilen durch 0 nicht erlaubt'); Result := Dividend / Divisor; end; |
AW: Taschenrechner mit ListBox!
1) Warum merkst du dir erst in
Delphi-Quellcode:
und
a
Delphi-Quellcode:
als Fließkommazahl, was in den Edit-Feldern steht und benutzt es dann nicht?
b
Delphi-Quellcode:
liest und schreibt sich doch wohl besser als
if ListBox.selected[0] then ergebnis.Caption:= FloattoStr(a + b);
Delphi-Quellcode:
Oder? ;-)
if ListBox.selected[0] then ergebnis.Caption:= FloattoStr(StrtoFloat(zaehler.text) + StrtoFloat(zaehler2.text));
2) Eine noch einfachere Methode wäre doch einfach zu sagen "Wenn das dritte Item in der Listbox ausgewählt ist (Division) und b=0 ist, dann
Delphi-Quellcode:
begin
ShowMessage('Teilen durch 0 nicht erlaubt'); Exit; end; |
AW: Taschenrechner mit ListBox!
Zitat:
Delphi-Quellcode:
zeigt es mir sofort als Fehler an! Das war auch mein ursprüngliches Problem.
if ListBox.selected[3] and b=0 then
|
AW: Taschenrechner mit ListBox!
Immer Klammern um die einzelnen logischen Terme die du mit und, oder, x-oder und allem möglichen verknüpfst machen:
Delphi-Quellcode:
if (ListBox.selected[3]) and (b=0) then [...]
|
AW: Taschenrechner mit ListBox!
Zitat:
Du bist echt meine Rettung!:-D Unser Lehrer hat uns leider rein gar nichts erklärt! :( |
AW: Taschenrechner mit ListBox!
Sorry aber irgendetwas stimmt immer noch nicht...
ich hab das jetzt eingegeben und beim dividieren tut es was es soll, aber jetzt teilt es auch beim addieren, etc. Wieso ist das so?
Delphi-Quellcode:
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[0] then ergebnis.Caption:= FloattoStr(a + b); if ListBox.selected[1] then ergebnis.Caption:= FloattoStr(a - b); if ListBox.selected[2] then ergebnis.Caption:= FloattoStr(a * b); if (ListBox.selected[3]) and (b=0) then Showmessage('Durch 0 darf nicht geteilt werden') else begin ergebnis.Caption:= FloattoStr(a / b); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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