![]() |
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
Dieses Thema wurde von "Daniel" von "Open-Source" nach "Sonstige Fragen zu Delphi" verschoben.
|
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
|
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!! |
Re: Taschenrechner in der Schule
das kann auch nicht funktionieren, wenn du die funktionen von TRechnen weiterhin aufrufst...
Delphi-Quellcode:
außerdem nochwas, das ergebnis kann nicht korrekt zurückgeliefert werden solange du nicht deine "Grundrechenarten" prozedur aufrufst.
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;
Delphi-Quellcode:
probier es so nochmal...
function TRechnen.GetErgebnis : real;
begin GrundRechtenArten; // <-- diesen Aufruf hast du vergessen result := Ergebnis; end; |
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?? |
Re: Taschenrechner in der Schule
schau mal in deinem pn Eingang
:dp: |
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:
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
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; ...
Delphi-Quellcode:
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:
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; |
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!! |
Re: Taschenrechner in der Schule
schau dir mal IntToHex() an
|
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:
|
Re: Taschenrechner in der Schule
Delphi-Quellcode:
hab diesen Quelltext gefunden. i ist integer und b ist nen string!
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; 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!!!!! |
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: |
Re: Taschenrechner in der Schule
Delphi-Quellcode:
Soll also in einem Panel angezeigt werden!!
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; Hoffe das reicht jetzt wenn nicht einfach noch mal melden!!! |
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;) |
Re: Taschenrechner in der Schule
Delphi-Quellcode:
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.
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; hoffe ich konnte dir weiterhelfen. |
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!!! |
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:
das dürfte eigentlich schon reichen :mrgreen:
function TRechnen.Hexzahl(const I: Integer): string;
begin Result := IntToHex(I,8); end; 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: |
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 |
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: ![]() |
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:
Und bei log10 gib er mir als Fehlermeldung:
// Ln
Ergebnis := Ln(Zahl3); // bezogen auf Zahl3 Undefinierter Bezeichner : log10; Keine Ahnung warum!! |
Re: Taschenrechner in der Schule
|
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