AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Taschenrechner

Ein Thema von Dyami · begonnen am 2. Okt 2013 · letzter Beitrag vom 10. Okt 2013
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Taschenrechner

  Alt 2. Okt 2013, 13:49
Hallo,

in der Regel werden die Rechenoperationen (+,-,*,/) auf Button gelegt
und nicht in einem Editfeld eingegeben.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Dyami
Dyami

Registriert seit: 24. Sep 2013
Ort: Schleswig-Holstein
25 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Taschenrechner

  Alt 2. Okt 2013, 14:05
Das hatte ich zu Anfang, aber ich wollte nur einen Button haben und nicht 4 :/

Also gibt es dafür keine Kürzmöglichkeiten oder?
Philipp
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: Taschenrechner

  Alt 2. Okt 2013, 14:08
Sinnvoll ist dafür ein MATH-PARSER.
Gibt es auch hier im Forum:

http://www.delphipraxis.net/46536-ko...theparser.html

und mehr...

Geändert von hathor ( 2. Okt 2013 um 14:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Taschenrechner

  Alt 2. Okt 2013, 14:20
Case geht nicht, wenn man es mit einem String versucht. Du könntest aber mit einem Char arbeiten.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#5

AW: Taschenrechner

  Alt 2. Okt 2013, 14:21
Klar geht das auch kürzer, zumindest übersichtlicher und Funktion von der Oberfläche getrennt:
Delphi-Quellcode:
function Berechne(A, B: Float; Op: Char): Float;
begin
  case Op of
    '+': Result := (A + B);
    '-': Result := (A - B);
    '*': Result := (A * B);
    '/': Result := (A / B);
  else
    raise Exception.Create('Falsches Rechenzeichen');
  end;
end;

var
  Op: Char;
begin
  try
    if (Edit1.Text = 'Pflichtfeld') or (Edit2.Text = 'Pflichtfeld') or
       (Edit3.Text = 'Pflichtfeld') then
      raise Exception.Create('Pflichtfelder ausfüllen');

    r_Zahl1 := strtofloat(Edit1.Text);
    r_Zahl2 := strtofloat(Edit3.Text);
    S_zeichen := Trim(Edit2.Text);

    if Length(S_zeichen) = 0 then
      Op := #0
    else
      Op := S_zeichen[1];
   
    r_erg := Berechne(r_Zahl1, rZahl2, Op);

    if Edit4.Text <> 'then
    begin
      r_Zahl3 := strtofloat(Edit4.Text);
      r_erg := Berechne(r_erg, r_Zahl3, Op);
    end;

    Label1.Caption := 'Ergebnis: ' + Floattostr(r_erg);
  except
    on E: Exception do
    begin
      Label1.Caption := 'Ergebnis: ';
      showmessage(E.Message);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Dyami
Dyami

Registriert seit: 24. Sep 2013
Ort: Schleswig-Holstein
25 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Taschenrechner

  Alt 2. Okt 2013, 15:39
Werde es heute Abend mal umschreiben
Bzw erst Freitag falls ich es nicht schaffe. Danke euch!
Philipp
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Taschenrechner

  Alt 2. Okt 2013, 18:30
Hallo,

willst noch lernen? Oder reicht ein fertiger?
Sieht besser aus und hast keine Arbeit...
Von TMS ist nicht übel...Ja es gibt auch andere...
Angehängte Grafiken
Dateityp: jpg TMS-Calculator.jpg (16,6 KB, 32x aufgerufen)
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.346 Beiträge
 
Delphi 12 Athens
 
#8

AW: Taschenrechner

  Alt 2. Okt 2013, 21:04
Und um das nochmal an einem Beispiel zu zeigen.

Ein CASE-Statement entspricht praktisch vielen aneinanderhängenden IF-Statements.
Zitat:
Delphi-Quellcode:
if S_zeichen = '+then
begin
  r_erg := (r_Zahl1 + r_Zahl2 + r_zahl3);
end
else
begin
  if S_zeichen = '-then
  begin
    r_erg := (r_Zahl1 - r_Zahl2 - r_zahl3);
  end
  else
  begin
    if S_zeichen = '*then
    begin
      r_erg := (r_Zahl1 * r_Zahl2 * r_zahl3);
    end
    else
    begin
      if S_zeichen = '/then
      begin
        r_erg := (r_Zahl1 / r_Zahl2 / r_zahl3);
      end
      else
        showmessage('Falsches Rechenzeichen');
    end;
  end;
end;
BEGIN+END braucht man praktisch nur, um "mehrere" Befehle zusammenzufassen.
Steht nur ein Befehl dazwischen, dann kann das auch weg.

Delphi-Quellcode:
if S_zeichen = '+then
  r_erg := (r_Zahl1 + r_Zahl2 + r_zahl3)
else
  if S_zeichen = '-then
    r_erg := (r_Zahl1 - r_Zahl2 - r_zahl3)
  else
    if S_zeichen = '*then
      r_erg := (r_Zahl1 * r_Zahl2 * r_zahl3)
    else
      if S_zeichen = '/then
        r_erg := (r_Zahl1 / r_Zahl2 / r_zahl3)
      else
        showmessage('Falsches Rechenzeichen');
Nun noch etwas anders formatiert, womit es eher auffällt, daß die Befehle (r_erg := ...) alle in einer Ebene stehen.

Delphi-Quellcode:
if S_zeichen = '+then
  r_erg := r_Zahl1 + r_Zahl2 + r_zahl3
else if S_zeichen = '-then
  r_erg := r_Zahl1 - r_Zahl2 - r_zahl3
else if S_zeichen = '*then
  r_erg := r_Zahl1 * r_Zahl2 * r_zahl3
else if S_zeichen = '/then
  r_erg := r_Zahl1 / r_Zahl2 / r_zahl3
else
  showmessage('Falsches Rechenzeichen');
Tja, und nun wurden nur noch die "zusammenhängenden" IFs durch das CASE ersetzt.

Delphi-Quellcode:
case S_zeichen of
  '+': r_erg := r_Zahl1 + r_Zahl2 + r_zahl3;
  '-': r_erg := r_Zahl1 - r_Zahl2 - r_zahl3;
  '*': r_erg := r_Zahl1 * r_Zahl2 * r_zahl3;
  '/': r_erg := r_Zahl1 / r_Zahl2 / r_zahl3;
  else ShowMessage('Falsches Rechenzeichen');
end;
In deinem Fall hättest du also deine ganze Funktion durch 2 CASE ersetzen können. (jeweils die zusammengehörenden Rechenoperationen)

Und dann noch ein IF (oder CASE, falls es noch mehr Variablen werden ... nicht nur "2" oder "3").
Wobei du natürlich auch die Variante mit 3 Variablen auch für die mit 2 Variablen nutzen könntest. (dabei muß nur r_zahl3 bei +|- mit 0 und bei *|/ mit 1 gefüllt werden, damit sie mathematisch nicht auffällt)


PS: S_zeichen muß hier natürlich ein Char sein, denn CASE versteht nur ordinale Typen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Okt 2013 um 23:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Taschenrechner

  Alt 2. Okt 2013, 22:24
Ich greife hier mal ein Schnippsel raus:
Delphi-Quellcode:
      if (Edit1.Text = 'Pflichtfeld') or (Edit2.Text = 'Pflichtfeld') or
        (Edit3.Text = 'Pflichtfeld') then
      begin
        showmessage('Pflichtfelder ausfüllen');
Pflichtfeld, Pflichtfeld, Pflichtfeld ... das muss doch auffallen das hier was nicht stimmt.

Wenn das Edit1-Feld z.B. leer wäre dann wäre der Inhalt auch nicht korrekt.
Also müsste man auch noch prüfen, ob die Felder leer sind.

Und da gibt es etwas ganz Geniales - Funktionen.
Einmal programmiert kann man Funktionen so oft verwenden wie man will.
Delphi-Quellcode:
function EditFeldOk(const Text:string):Boolean;
begin
  Result := (Text <> 'Pflichtfeld') and (Text <>);
end;
...
      if not (EditFeldOk(Edit1.Text) and EditFeldOk(Edit2.Text) and
        EditFeldOk(Edit3.Text)) then
      begin
        showmessage('Pflichtfelder ausfüllen');
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.346 Beiträge
 
Delphi 12 Athens
 
#10

AW: Taschenrechner

  Alt 2. Okt 2013, 23:26
Anstatt EditFeldOk kannst du natürlich auch TryStrToFloat verwenden, denn damit prüft man auch gleich, ob eine "gültige" Zahl im Edit drinsteht.

Denn mit diesem EditFeldOk wäre z.B. auch 'Pflichtfel' (ohne d), sowie '123,4,789' total "OK".
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 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