Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Taschenrechner in der Schule (https://www.delphipraxis.net/33092-taschenrechner-der-schule.html)

bogohl 1. Nov 2004 16:52


Taschenrechner in der Schule
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute,

bin ein totaler Delphi Anfänger und hab mal ne frage wie ich das nun lösen kann!!
Is ne Aufgabe aus der Schule!
Der Rechner soll OOP sein! Bei meinem Tascherechner ist das Problem das ich die Grundrechenarten nur seperat berechnen kann!
Habe das problem im programm markiert und kurz erläutert!

danke im vorraus!!

DP-Maintenance 1. Nov 2004 17:49

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Open-Source" nach "Sonstige Fragen zu Delphi" verschoben.

Nothine 1. Nov 2004 18:35

Re: Taschenrechner in der Schule
 
also soweit ich das sehen konnte würde sich dein problem dadurch lösen lassen, wenn du eine weitere membervariable in deine TRechnen-Klasse einbaust, in der du die gewünschte rechenart ablegst, z.B. '+', '-' etc. und dann beim IstGleichClick mittels einer case-anweisung abfragst welche rechenart gewünscht ist und dementsprechend die prozeduren aufrufst

bogohl 4. Nov 2004 13:04

Re: Taschenrechner in der Schule
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke erstmal für den Tipp!!
Hab das mit der case-Anweisung versucht nur funktioniert leider immer noch nicht!!!
Das Problem ist das er die erste Zahl sofort versucht mit der Zweiten zu Addieren, Subtrahieren...
Da die zweite Zahl aber noch nicht eingegeben wure liegt sie noch auf Null!!
Weiterhin liegt ein Problem noch bei meinem Zifferblatt, brauch glaube ne bessere Anweisung!
Wäre also cool wenn ihr mir dabei helfen könntet.
Stelle die neuere variante noch mal rein!!

Nothine 4. Nov 2004 13:28

Re: Taschenrechner in der Schule
 
das kann auch nicht funktionieren, wenn du die funktionen von TRechnen weiterhin aufrufst...
Delphi-Quellcode:
procedure TRechner.SubtrahiereBtnClick(Sender: TObject);
begin
  a := 2;
  DatenAkktualisieren;
  Rechnen.Subtraktion; // <-- dieser aufruf muss weg
end;

procedure TRechner.MultipliziereBtnClick(Sender: TObject);
begin
  a := 3;
  DatenAkktualisieren;
  Rechnen.Multiplikation; // <-- dieser aufruf muss weg
end;

procedure TRechner.DividiereBtnClick(Sender: TObject);
begin
  a := 4;
  DatenAkktualisieren;
  Rechnen.Division; // <-- dieser aufruf muss weg
end;
außerdem nochwas, das ergebnis kann nicht korrekt zurückgeliefert werden solange du nicht deine "Grundrechenarten" prozedur aufrufst.
Delphi-Quellcode:
function TRechnen.GetErgebnis : real;
begin
  GrundRechtenArten; // <-- diesen Aufruf hast du vergessen
  result := Ergebnis;
end;
probier es so nochmal...

bogohl 4. Nov 2004 13:56

Re: Taschenrechner in der Schule
 
Vielen Dank!!!!
Jetzt funktioniert es!!
Hatte es einfach vergessen!
Kannst du mir vielleich auch noch bei meinem zweiten Problem helfen??
Das mit dem Ziffernblatt??

tHeRiAn 4. Nov 2004 15:52

Re: Taschenrechner in der Schule
 
schau mal in deinem pn Eingang
:dp:

Nothine 4. Nov 2004 16:43

Re: Taschenrechner in der Schule
 
im moment ist es nur möglich eine zahl einzugeben, das würde sich dadurch lösen lassen das du folgendes machst:
Delphi-Quellcode:
procedure TRechner.EinsBtnClick(Sender: TObject);
begin
  if Eingabe1Edt.Text <> '0' then // wenn schon zahl vorhanden, anfügen
    Eingabe1Edt.Text := Eingabe1Edt.Text + '1'
  else // ansonsten ersetzen
    Eingabe1Edt.Text := '1'; // | <-- original
end;

procedure TRechner.ZweiBtnClick(Sender: TObject);
begin
  if Eingabe1Edt.Text <> '0' then // wenn schon zahl vorhanden, anfügen
    Eingabe1Edt.Text := Eingabe1Edt.Text + '2'
  else // ansonsten ersetzen
    Eingabe1Edt.Text := '2'; // | <-- original
end;

...
wenn man sich das genau ansieht sieht man sogar das es mehr oder weniger immer das selbe ist, du kannst also EinsBtnClick, ZweiBtnClick etc. zu einer einzigen BtnClick-Prozedur zusammenfassen, und die Caption benutzen um zu bestimmen welche zahl angefügt werden soll
Delphi-Quellcode:
procedure TRechner.EinsBtnClick(Sender: TObject);
begin
  if Eingabe1Edt.Text <> '0' then // wenn schon zahl vorhanden, anfügen
    Eingabe1Edt.Text := Eingabe1Edt.Text + TButton(Sender).Caption
  else // ansonsten ersetzen
    Eingabe1Edt.Text := TButton(Sender).Caption;
end;
edit: da schreibt man mal was, bleibt mitten drin stehn und geht für paar stunden weg, und schon schreibt da jemand anders auch etwas (kann zwar nich jeder lesen, aber ok) was die lösung sein könnte :stupid:

bogohl 4. Nov 2004 17:29

Re: Taschenrechner in der Schule
 
Dankeschön!!!!!! :-D
Werde als nächstes mal versuchen die Werte in ne Dualzahl oder Hex umzuwandeln :coder:
und wenn ich alleine nicht mehr weiter komme wende ich mich dann wieder an euch!!

idontwantaname 4. Nov 2004 17:42

Re: Taschenrechner in der Schule
 
schau dir mal IntToHex() an

Nothine 4. Nov 2004 21:21

Re: Taschenrechner in der Schule
 
und viel wichtiger als das, es gibt eine wunderschöne such-funktion auf diesem board, da werden sie geholfen :zwinker:

bogohl 5. Nov 2004 14:26

Re: Taschenrechner in der Schule
 
Delphi-Quellcode:
function TRechnen.Dualzahl : string;
//-------------------------------------------------
 begin
  while i > 0 do
   begin
    if (i mod 2) <> 0 then b := b + '1'
  else b := b + '0';
    i := i div 2;
   end;
 end;
hab diesen Quelltext gefunden. i ist integer und b ist nen string!
mein erstes problem ist, das ich diese Unit mit meiner Hauptunit verknüpfen muß und weiterhin bemängel er dann immer mein inttohex-Anweisung. von wegen incompatible typen string und integer.
Barauche also mal wieder eure hilfe!!!!!

Nothine 5. Nov 2004 17:08

Re: Taschenrechner in der Schule
 
es wäre hilfreich, wenn du dein problem ein wenig genauer beschreiben könntest. "von wegen incompatible typen string und integer" hilft hier nicht wirklich weiter solange man den dazu passenden quelltext nicht kennt... also bitte nochmal alles im zusammenhang, dann kann dir geholfen werden

ps: wieso benutzt du in einer funktion externe (bzw. globale) variablen? :gruebel:

bogohl 6. Nov 2004 13:33

Re: Taschenrechner in der Schule
 
Delphi-Quellcode:
function TRechnen.Dualzahl : string;
//-------------------------------------------------
 begin
  while i > 0 do
   begin
    if (i mod 2) <> 0 then b := b + '1'
  else b := b + '0';
    i := i div 2;
   end;
 end;

procedure TRechner.DatenAkktualisierenDual;            //steht in meiner Hauptunit
//-----------------------------------------------------
 begin
  try
   Rechnen.SetZahl3 (StrToInt(Eingabe1Edt.Text));
  except
   showmessage('Gib Bitte ganze Zahl ein!!');
  end;
 end;

procedure TRechner.DezZuDualBtnClick(Sender: TObject);
//-----------------------------------------------------
 begin
  DatenAkktualisierenDual;
  ErgebnisPnl.Caption:= StrToFloat( // bin mir nicht sicher was hier rein muß);
  FensterAkktualisieren;
 end;
Soll also in einem Panel angezeigt werden!!
Hoffe das reicht jetzt wenn nicht einfach noch mal melden!!!

gordon freeman 6. Nov 2004 14:52

Re: Taschenrechner in der Schule
 
Wieso benutzt du innerhalb der Funktion keine lokale Variable, sondern greifst auf globale Variablen zurück?

Wo wird i benannt?

Fehlt in deiner Funktion nicht eine Definition des Rückgabewerts? (z.B. result:=b;)

Nothine 6. Nov 2004 15:25

Re: Taschenrechner in der Schule
 
Delphi-Quellcode:
function TRechnen.Dualzahl(I: Integer): string;
begin
  Result := '';
  while I > 0 do begin
    Result := Result + Char(Ord(I mod 2)+48); // Chr(48) = '0'
    I := I div 2;
  end;
end;

procedure TRechner.DezZuDualBtnClick(Sender: TObject);
begin
  DatenAkktualisierenDual;
//---Ergebniszuweisung an Panel | Trunc da Ergebnis vom Typ Real ist
  ErgebnisPnl.Caption := Dualzahl( Trunc(Ergebnis) );
//-----------------------------
  FensterAkktualisieren;
end;
wenn du die prozedur Dualzahl wie oben angegeben mit Parametern arbeiten lässt, sollte es funktionieren, ob du das mit Char(...) oder mit ner if-anweisung machst ist geschmackssache.
hoffe ich konnte dir weiterhelfen.

bogohl 6. Nov 2004 19:12

Re: Taschenrechner in der Schule
 
:?: Tut mir echt leid abba kriege ich immer noch nicht hin!!! :?:
Find ich gut das du so viel Gedult mit mir hast Nothine!!!!

Stelle dir im Anhang noch mal meinen Rechner kannst ja mal, wenn du Lust hast, gucken wo das Problem liegt!!
Kannst dir ja dann bei der Gelegenheit auch das Problem mit meiner Hexadezimalumwandlung angucken!!

Wäre nett wenn du mir bescheid gibst was ich schon wieder falsch gemacht habe!! :wall:

Vielen vielen DANK!!!

Nothine 6. Nov 2004 19:32

Re: Taschenrechner in der Schule
 
(nur mal so als hinweis, ich kann immer nur deinen source durchgucken, was einzelne buttons sind und ähnliches bleibt mir verwehrt da mein delphi5 deine projekte nicht mag)

also ich weiß ja nich was du da vorher bei der darstellung als HexZahl versucht hast, es sah aber definitiv merkwürdig aus...

also erstmal möchte ich dich bitten irgendwann anzufangen deine prozeduren mit parametern auszustatten...
dann zu deiner Hexzahl-funktion:
Delphi-Quellcode:
function TRechnen.Hexzahl(const I: Integer): string;
begin
  Result := IntToHex(I,8);
end;
das dürfte eigentlich schon reichen :mrgreen:

sollten sonst noch probleme auftauchen wäre ich dir sehr verbunden wenn du GENAU schilderst was das problem ist, da ich es (wie bereits erwähnt) nicht immer nachvollziehen kann (z.B. was und wo der DezZuHexBtn-Button ist und solche scherze)

und du musst mir nicht danken, jeder hat mal klein angefangen, außerdem hab ich grad nix besseres zu tun :mrgreen: :wink:

bogohl 9. Nov 2004 17:13

Re: Taschenrechner in der Schule
 
Hat jetzt "alles" hingehauen!!!

Anschließend wollte ich dann noch den log , ln und e Funktionen erstellen. Sah auch alles eigentlich recht leicht aus nur hat nicht funktioniert!!!
Wäre also voll nett wenn mir hier nochmal jemand helfen könnte!!!
Sprich, allgemein gelößt wäre nett! :-D

Nothine 10. Nov 2004 14:24

Re: Taschenrechner in der Schule
 
Delphi-Quellcode:
// Ln
Ergebnis := Ln(Zahl3); //oder Zahl1 oder wie auch immer
// Log
  uses Math;
...
Ergebnis := Log10(Zahl3); //s.o.
:?:

die umsetzung von e (so wie im standart-windows-taschenrechner) ist etwas schwieriger, da erwarte ich dass du dir erst mal selber gedanken machst, nur soviel: Delphi-Referenz durchsuchenExp

bogohl 10. Nov 2004 18:07

Re: Taschenrechner in der Schule
 
Das hatte ich auch schon versucht!!
Hab es vergessen zhu erwähnen.

Er gibt mir als fehlermeldung zu viele Parameter!!
Delphi-Quellcode:
// Ln
Ergebnis := Ln(Zahl3); // bezogen auf Zahl3
Und bei log10 gib er mir als Fehlermeldung:
Undefinierter Bezeichner : log10;
Keine Ahnung warum!!

Nothine 10. Nov 2004 19:11

Re: Taschenrechner in der Schule
 
Delphi-Referenz durchsuchenLog10 ist nicht bekannt, weil du (wie auch in meinem vorigen post zu lesen) die unit Delphi-Referenz durchsuchenMath mit in dein projekt einbinden musst.

warum er bei Delphi-Referenz durchsuchenLn "zuviele parameter" sagen sollte kann ich dir auf die schnelle auch nicht beantworten.

bogohl 8. Dez 2004 10:47

Re: Taschenrechner in der Schule
 
Ok das mit den Log hat jetzt funktioniert!!
Habe mir als nächstes Ziel gesetzt auch noch Brche zu kürzen!
Stecke abba schon wieder fest!
Ist es denn eigentlich möglich die Brüche in meinen eeinen Editfeld zu lösen???

Brauche HILFE!!!!

Danke schon mal im vorraus!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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