Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Fakultät Wurzel Potenz...
theBaby - So 20.11.05 14:56
Titel: Fakultät Wurzel Potenz...
Ich brauch mal eure Hilfe.
Arbeite in Info mit Delphi und es wurde uns zur Aufgabe gestellt, dass wir einen Taschenrechner erstellen sollen.
Ich werde euch mal die bisherige Unit reinkopieren, damit ihr ungefähr wisst, wie weit wir gekommen sind und wie das Ganze aussieht.
Es gibt 2 Editfelder, somit eine Variable a und eine b...
Mein Problem ist, dass ich nicht weiß, wie ich die Unit schreiben soll um
1.Wurzel (a)
2.log (a)
3.ln (a)
4.a^2
5.b^2
6.a^b
7.1/a
8.a!
9.MOD
10.DIV
zu erhalten/berechnen.
Hier die Unit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; ein_zahl1: TEdit; ein_zahl2: TEdit; Multiplikation: TButton; Division: TButton; Addition: TButton; Subtraktion: TButton; ausgabe: TLabel; loeschen: TButton; ende: TButton; procedure endeClick(Sender: TObject); procedure AdditionClick(Sender: TObject); procedure SubtraktionClick(Sender: TObject); procedure MultiplikationClick(Sender: TObject); procedure DivisionClick(Sender: TObject); procedure loeschenClick(Sender: TObject);
private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.endeClick(Sender: TObject); begin close; end;
procedure TForm1.AdditionClick(Sender: TObject); var zahl1, zahl2, erg:integer; begin zahl1:=strtoint (ein_zahl1.text); zahl2:=strtoint (ein_zahl2.text); erg:=zahl1+zahl2; ausgabe.caption:=inttostr (erg) end;
procedure TForm1.SubtraktionClick(Sender: TObject); var zahl1, zahl2, erg:integer; begin zahl1:=strtoint (ein_zahl1.text); zahl2:=strtoint (ein_zahl2.text); erg:=zahl1-zahl2; ausgabe.caption:=inttostr (erg); end;
procedure TForm1.MultiplikationClick(Sender: TObject); var zahl1, zahl2, erg:integer; begin zahl1:=strtoint (ein_zahl1.text); zahl2:=strtoint (ein_zahl2.text); erg:=zahl1*zahl2; ausgabe.caption:=inttostr (erg) end;
procedure TForm1.DivisionClick(Sender: TObject); var zahl1, zahl2, erg:real; begin zahl1:=strtofloat (ein_zahl1.text); zahl2:=strtofloat (ein_zahl2.text); erg:=zahl1/zahl2; ausgabe.caption:=floattostrF (erg, fffixed,10,2); end;
procedure TForm1.loeschenClick(Sender: TObject); begin ein_zahl1.text:=''; ein_zahl2.text:=''; ausgabe.caption:=''; end;
end. |
Wäre klasse, wenn ihr versuchen könntet mir die Unit komplett zu machen bzw. mir bitte nicht nur die Funktionen (also sqrt,...) schreiben würdet...
Vielen Dank im vorraus...
Moderiert von
raziel: B- durch Delphi-Tags ersetzt
AXMD - So 20.11.05 15:06
Die Funktionen findest du in der Unit Math. Der Rest mit dem Umwandeln der Dezimalzahlen in Strings und umgekehrt läuft analog wie in deinem Code bereits implementiert.
Einfach mal durch die Delphihilfe schauen: Sqrt, mod, div, ...
AXMD
Allesquarks - So 20.11.05 15:07
Entweder du bindest die Unit math ein da stehen die ganzen Sachen drin (mod und div gibts direkt als Delphi Befehl) oder du schreibst dir ne Funktion in der du die entsprechenden Funktionen (sin, cos, ln usw.) in ne Taylorreihe entwickelst, oder eine andere proprietäre Reihe, die du dann nach x-Schritten, wenn es dir genau genug ist abbrichst.
Vorsicht: nicht alle der Reihen die man üblicherweise findet haben nativ einen Konvergenzradius der genauso groß ist wie der Definitionsbereich.
AXMD - So 20.11.05 15:11
Allesquarks hat folgendes geschrieben: |
Eoder du schreibst dir ne Funktion in der du die entsprechenden Funktionen (sin, cos, ln usw.) in ne Taylorreihe entwickelst |
Mc Laurin wäre hier besser geeignet - einfachere Formeln ;)
Allesquarks hat folgendes geschrieben: |
Vorsicht: nicht alle der Reihen die man üblicherweise findet haben nativ einen Konvergenzradius der genauso groß ist wie der Definitionsbereich. |
Absolut korrekt. Wenn man das nicht beachtet kann viel Blödsinn rauskommen ;)
AXMD
iX0r - Do 24.11.05 09:01
Wer einen Taschenrechner programmieren soll, der wird wohl kaum Hochschulmathematik betreiben. Aber gut ihr habt gezeigt, dass ihr was wißt. Mal ganz davon abgesehen, dass sich der sinus immer noch am besten mit der richardson extrapolation bestimmen läßt, wie meinte unser prof. "der andere mist ist für die ingenieure.." :P
Nun zu dir, lieber Taschenrechner. Was wir nicht tun werden, ist dir deine unit auszuprogrammieren. Das hat zwei Gründe:
- es ist uns zu einfach
- du lernst genau genommen gar nix dabei (der ist eigentlich wichtiger)
Was ich dur empfehle:
- binde die "math" unit ein
Dann stehen dir alle wichtigen mathematischen Funktonen zur Verfügung. Wenn du dann mit einer der Funktione Probleme hast, oder ein Beispiel benötigst, dann helfen dir hier alle sicherlich gerne weiter.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!