![]() |
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. |
AW: Taschenrechner mit ListBox!
[Sorry für etwas OffTopic]
Mal ne Frage meinerseits an die Wissenden, weil es mich interessiert: der Vergleich einer Float-Variable mit einer Konstanten:
Delphi-Quellcode:
Funktioniert das, wie man das erwartet? Ich weiß, dass der Vergleich zweier Fließkommawerte problematisch ist (Stichwort SameValue, CompareValue und IsZero). Ist das beim Vergleich eines Floats mit einer Konstanten genauso? Wird die Konstante exakt - hier die 0 als 0.0 (unendlich 0) - abgebildet, oder ist es so, wie ich vermute, dass bei irgendeiner Nachkommastelle eine Abweichung vorliegt, die den exakten Vergleich beeinflusst?
var a,b: real;
if [...] (b=0) then MfG Dalai |
AW: Taschenrechner mit ListBox!
Ist schon gelöst!^^
|
AW: Taschenrechner mit ListBox!
Zitat:
Ich könnte das auch provokanter formulieren: Warum sollten Helfer noch Zeit in ihre Antworten stecken, wenn die Hilfesuchenden das bei Lösung des Themas nicht tun? Es gehört IMO einfach zum guten Ton und Umgang miteinander, das zu tun. Dazu kommt, dass nicht nur anderen Hilfesuchenden mit einer Lösung geholfen ist, sondern manchmal sogar auch anderen Helfern! So, das musste mal raus. Nimm es nicht zu persönlich, aber da ich sowas gestern schon in einem anderen Thema gesehen habe, wurde es mir nun zuviel. MfG Dalai |
AW: Taschenrechner mit ListBox!
Zitat:
Als sozial bezeichnet man Handlungen, wenn auch andere davon profitieren können. Asozial ist das Gegenteil davon. Somit hat es jeder selber in der Hand wie Andere ihn wahrnehmen |
AW: Taschenrechner mit ListBox!
Hallo,
seine Lösung findet Ihr unter ![]() Beste Grüße Mathematiker |
AW: Taschenrechner mit ListBox!
Zitat:
Delphi-Quellcode:
ist mir in seinem Code gar nicht aufgefallen (manchmal hat's der Baum nicht so mit dem Wald :lol:). Aber selbst hierzu ist zu sagen, dass es nett(iquette) gewesen wäre, auf diesen Crosspost hinzuweisen bzw. darauf, dass dort die Lösung zu finden ist. Nunja.
else
MfG Dalai |
AW: Taschenrechner mit ListBox!
Zitat:
|
AW: Taschenrechner mit ListBox!
Zitat:
MfG Dalai |
AW: Taschenrechner mit ListBox!
Zitat:
Zum nächsten Mal merke ich mir eben, dass ich die Lösung dann auch hinschreibe. Bitteschön! |
AW: Taschenrechner mit ListBox!
Ich bin oft sehr direkt, manchmal sogar provokant (wie in diesem Fall), aber ich sagte ja schon: Nimm es nicht zu persönlich, weil du nicht allein damit gemeint warst, auch wenn du nun die "volle Ladung" abbekommen hast. Ein Hinweis wie "Lösung gibt's hier <Link>" oder sowas in der Form hätte völlig gereicht (und um das zu schreiben, braucht man ja keine Stunden).
MfG Dalai |
AW: Taschenrechner mit ListBox!
Zitat:
|
AW: Taschenrechner mit ListBox!
Sooo schlimm isses ja nu auch wieder nich. Einfach beim nächsten Mal dran denken, und alles ist feini feini :lol:
|
AW: Taschenrechner mit ListBox!
Sorry, dass ich noch mal fragen muss, aber es ist wichtig!
Ich möchte jetzt nämlich, dass eine Fehlermeldung angezeigt wird, wenn in einem der edits nichts reingeschrieben wurde und man auf Ergebnis drückt. Ich habs schon mit dem versucht:
Delphi-Quellcode:
Aber hat nicht geklappt. Das Programm ist nur wieder abgestürzt.
if (zaehler.Text = '') or (zaehler2.Text = '') then begin ShowMessage('Du hast was vergessen!') end;
Hier ist mein Quellcode nochmal:
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; Image2: TImage; DatumUhr1: TLabel; procedure berechnenClick(Sender: TObject); procedure schliessenClick(Sender: TObject); procedure resetClick(Sender: TObject); procedure TimerTimer(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure zaehlerKeyPress(Sender: TObject; var Key: Char); procedure zaehler2KeyPress(Sender: TObject; var Key: Char); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b: real; implementation {$R *.DFM} procedure TForm1.berechnenClick(Sender: TObject); var a, b: real; begin a:= StrtoFloat(zaehler.Text); b:= StrtoFloat(zaehler2.Text); if ListBox.selected[0] then ergebnis.Caption:= FloattoStrF(a + b,ffFixed,10,4); if ListBox.selected[1] then ergebnis.Caption:= FloattoStrF(a - b,ffFixed,10,4); if ListBox.selected[2] then ergebnis.Caption:= FloattoStrF(a * b,ffFixed,10,4); if (ListBox.selected[3]) and (b=0) then begin Showmessage('Durch 0 darf nicht geteilt werden!')end; if (ListBox.selected[3]) and (b <> 0)then ergebnis.Caption:= FloattoStrF(a / b,ffFixed,10,4); if (a>=9999999999999999) or (b>=9999999999999999) then begin ShowMessage('Die Zahl ist zu groß') end; end; procedure TForm1.schliessenClick(Sender: TObject); begin Close(); end; procedure TForm1.resetClick(Sender: TObject); begin zaehler.Clear; zaehler2.Clear; ergebnis.Caption:='Ergebnis' end; procedure TForm1.TimerTimer(Sender: TObject); begin DatumUhr1.Caption:=DateTimeToStr(Now)+ ' Uhr'; end; procedure TForm1.Image1Click(Sender: TObject); begin Showmessage('Artwork © by Yana Toboso'); end; procedure TForm1.Image2Click(Sender: TObject); begin Showmessage('Artwork © by Yana Toboso and edited by us') end; procedure TForm1.zaehlerKeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9',#08,',']) then begin key:= #0; Beep; end; end; procedure TForm1.zaehler2KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9',#08,',']) then begin key:= #0; Beep; end; end; end. |
AW: Taschenrechner mit ListBox!
Und wo steht da jetzt der angesprochene Code?
|
AW: Taschenrechner mit ListBox!
Zitat:
(Hab jetzt nur den Teil genommen, der verändert wurde.)
Delphi-Quellcode:
procedure TForm1.berechnenClick(Sender: TObject);
var a, b: real; begin a:= StrtoFloat(zaehler.Text); b:= StrtoFloat(zaehler2.Text); FocusControl(reset); if ListBox.selected[0] then ergebnis.Caption:= FloattoStrF(a + b,ffFixed,10,4); if ListBox.selected[1] then ergebnis.Caption:= FloattoStrF(a - b,ffFixed,10,4); if ListBox.selected[2] then ergebnis.Caption:= FloattoStrF(a * b,ffFixed,10,4); if (ListBox.selected[3]) and (b=0) then begin Showmessage('Durch 0 darf nicht geteilt werden!')end; if (ListBox.selected[3]) and (b <> 0)then ergebnis.Caption:= FloattoStrF(a / b,ffFixed,10,4); if (a>=9999999999999999) or (b>=9999999999999999) then begin ShowMessage('Die Zahl ist zu groß') end; //Hier der Code, der nicht geht : if (zaehler.Text = '') or (zaehler2.Text = '') then begin ShowMessage('Da fehlt etwas!')end; end; |
AW: Taschenrechner mit ListBox!
Meinst Du nicht, dass es sinniger wäre, zuerst auf gültige Eingaben zu prüfen, bevor man versucht, diese umzuwandeln und damit zu arbeiten?
|
AW: Taschenrechner mit ListBox!
Zitat:
|
AW: Taschenrechner mit ListBox!
Wie, Du weißt nicht, wie das geht? Du tust das doch bereits, nur eben viel zu spät. Mal anders gefragt: was ist an dieser Logik falsch?
Delphi-Quellcode:
Macht das so nicht mehr Sinn?
Wasser.GießInEimer;
if Eimer.ÖffnungUnten then ShowMessage('Du musst den Eimer umdrehen');
Delphi-Quellcode:
if Eimer.ÖffnungUnten then
ShowMessage('Du musst den Eimer umdrehen') else Wasser.GießInEimer; |
AW: Taschenrechner mit ListBox!
Zitat:
|
AW: Taschenrechner mit ListBox!
Ist das Dein Ernst? Mit Eurem Info-Lehrer würde ich gern mal ein paar Takte reden.
Delphi-Quellcode:
Wobei damit auch noch nicht sichergestellt ist, dass es klappt (was ist denn, wenn jemand Buchstaben eingibt?), aber zumindest Leerstrings sollten keine Fehler mehr verursachen.
if (zaehler.Text = '') or (zaehler2.Text = '') then
begin ShowMessage('Da fehlt etwas!'); end else begin a:= StrtoFloat(zaehler.Text); b:= StrtoFloat(zaehler2.Text); //usw. end; |
AW: Taschenrechner mit ListBox!
Zitat:
|
AW: Taschenrechner mit ListBox!
Habt Ihr denn im Vorfeld nicht mit Struktogrammen oder Programmablaufplänen geübt? Logisches Denken hat ja nichts mit der Programmiersprache zu tun, die ist im Grunde doch nur Formulierung des Ablaufs, den man im Vorfeld mit den genannten Werkzeugen skizziert hat.
|
AW: Taschenrechner mit ListBox!
Hallo,
Zitat:
Ich warte schon seit Tagen darauf. Der Lehrer ist schuld! Es ist immer der Lehrer! Die sind nämlich doof und faul. Solcher Blödsinn nervt! :evil: Mathematiker (einer von den doofen Lehrern) |
AW: Taschenrechner mit ListBox!
Bitte jetzt keine diesbezügliche Diskussion. Die Lehrer erklären nix und wissen selbst nicht, was sie tun, und die Schüler sind zu blöd, den Stoff zu begreifen. Was davon stimmt, liegt im Auge des Betrachters, ich denke, irgendwo in der Mitte dürfte objektiv gesehen die Wahrheit liegen. Wenn man allerdings alle paar Wochen auf diese unsägliche mSum-Unit trifft, wundert einen gar nichts mehr.
|
AW: Taschenrechner mit ListBox!
Zitat:
Zitat:
|
AW: Taschenrechner mit ListBox!
Das mit der Hilfe lässt sich ändern:
![]() |
AW: Taschenrechner mit ListBox!
Zitat:
Ich werd mal ausprobieren, ob es geht! ...Ja! Funktioniert einwandfrei!^^ |
AW: Taschenrechner mit ListBox!
Bei mir geht' s, ich habe unter Win 8 64Bit Delphi 5 und Delphi 7 am Laufen samt Hilfe.
|
AW: Taschenrechner mit ListBox!
Zitat:
Vielen Dank für deine Hilfe! :thumb::-D |
AW: Taschenrechner mit ListBox!
Kein Thema :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 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