Das einfachste ist erstmal alles das, was geht und schon einem einheitlichem Stil entspricht auszulagen und als eigene Klasse zusammennzufassen.
Dann die Grundfuntionen zum Laufen zu bekommen
und sich danach um Optimierungen und Erweiterunen zu kümmern.
Delphi-Quellcode:
function tform1.isOdd(const a: AnsiString): AnsiString; // modul(b, '2') <> '0'
begin
Result := (a <> '') and (a[Length(a)] in ['1', '3', '5', '7', '9']);
end;
function tform1.isEven(const a: AnsiString): AnsiString; // modul(b, '2') = '0'
begin
Result := (a = '') or (a[Length(a)] in ['0', '2', '4', '6', '8']);
end;
Delphi-Quellcode:
type TMathe =
class
function summe ( a, b: AnsiString): AnsiString;
function differenz( a, b: AnsiString): AnsiString;
procedure inc (
var a: AnsiString);
procedure dec (
var a: AnsiString);
function produkt ( a, b: AnsiString): AnsiString;
function quotient (
const a, b: AnsiString): AnsiString;
function modul ( a, b: AnsiString): AnsiString;
function vergleich( a, b: AnsiString): TValueRelationship;
function ungerade (
const a: AnsiString): Boolean;
function gerade (
const a: AnsiString): Boolean;
end;
da wo intern der String nicht verändert wird, macht sich const besser
(hab es jetzt nicht bei allem gesetzt, da ich nicht weiß, ob es möglich ist)
siehe
VAR CONST OUT und Co. ... warum?
Delphi-Quellcode:
var mathe: TMathe;
a, b, c: AnsiString;
mathe := TMathe.Create;
a := '123';
b := '456';
c := mathe.summe(a, b);
if mathe.vergleich(c, '56088') = 0 then ...;
mathe.Free;
Ja, das mit der Division ist wirklich nicht leicht,
wenn ich bedenke, wie ich mich bei meiner Lib da abgequält hab
Im Prinzip kannst kannst du dich auch von hinten rum annähern
und dich von der anderen Seite aus, über Additionen oder Multiplikationen schrittweise annähern.
der Einachste und leider auch lagsamste Weg wäre
Delphi-Quellcode:
function TMathe.quotient(a, b: AnsiString): AnsiString;
begin
result := '0';
while vergleich(a, b) >= 0 do
begin
result := summe(result, '1');
a := differenz(a, b);
end;
end;
function TMathe.modul(const a, b: AnsiString): AnsiString;
begin
result := a;
while vergleich(result, b) >= 0 do
result := differenz(result, b);
end;
also das sollte erstmal funktionieren
und über eine Multiplication sollte sich da noch was optimieren lassen.
Ein Therapeut entspricht 1024 Gigapeut.