| 
| Autor | Beitrag |  
| BenBE 
          Beiträge: 8721
 Erhaltene Danke: 191
 
 Win95, Win98SE, Win2K, WinXP
 D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
 
 | 
Verfasst: So 26.02.06 17:27 
 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
 |  |  |  
| wp_xxyyzz 
          Beiträge: 40
 
 
 
 
 | 
Verfasst: So 26.02.06 17:34 
 |  |  |  
| Dezipaitor 
          Beiträge: 220
 
 
 
 
 | 
Verfasst: Di 14.03.06 22:12 
 
coole unit
 nur so zum Spaß:
 könnte man eigentlich auch mit komplexen Zahlen rechnen.
 
 also
 z = a + ib (wobei a,b e R)
 i^2 = -1
 
 i = sqrt(-1)
 
 und
 1/i = i/(i^2) = -i
 
 sowie
 1/(a+ib) = (a-ib)/(a^2 + b^2)  b <> 0 && a <> 0
 (Bruch mit (a-ib) erweitert und 3.binomF. im Nenner )
 
 Vielleicht hat jemand Lust?
 |  |  |  
| F34r0fTh3D4rk  
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: So 16.04.06 11:16 
 
von komplexen zahlen habe ich leider keine ahnung, sonst hätte ichs bestimmt umgesetzt ^^ alle anderen änderungen sollten jetzt drin sein |  |  |  
| F34r0fTh3D4rk  
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: Fr 21.04.06 15:27 
 
Ich habe die Unit nochmal ein wenig verbessert, falls noch irgendwo zb ein const zuviel oder zu wenig ist, das wäre nett, die parameterübergaben sollen ja möglichst optimal gewählt sein.
 Neu ist TBruchG, im moment kann nur von TBruch in TBruchG umgewandelt werden, aber Stringumwandlungen, sowie einige andere Dinge werden folgen, ebenso die Behandlung von Mehrfachbrüchen (autsch     )
 TBruchG repräsentiert einen Bruch mit Ganzzahlanteil, das ist nützlich wenn man sowas darstellen will: 
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 
 | 45 67/23-- -- --
 1. 2. 3.
 |  1. ganzzahl
 2. zähler
 3. nenner
 die umwandlung von und in einen string kommt noch, eventuell werde ich die unit noch ein wenig umstrukturieren
 im moment geht das mit dem anzeigen so:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 
 | varaBruch: TBruch;
 aBruchG: TBruchG;
 begin
 aBruch := StrToBruch(edit1.text);
 aBruchG := BruchToBruchG(aBruch);
 edit2.text := inttostr(aBruchG.Zahl) + ' ' + BruchToStr(ToBruch(aBruchG.Zaehler, aBruchG.Nenner));
 end;
 |  EDIT: TBruchG besteht jetzt aus Zahl und Bruch und die umwandlung sollte jetzt auch fehlerfrei funktionieren |  |  |  
| F34r0fTh3D4rk  
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: Sa 22.04.06 10:47 
 
ich arbeite momentan an einer sehr umfangreichen Demo Applikation, in der sämtliche Features mit Beispielen veranschaulicht werden, außerdem werden noch Funktionen wie FloatBruchAdd und IntBruchAdd sowie Sub multi und div dazukommen, dann kann ich auch ein wenig bei der umwandlung von bruchg zu bruch kürzen usw.
 weils so viel spass macht, der ggT in C#
 		                       C#-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 |     public int ggT(int a, int b){
 if ((a == 0) || (b == 0))
 return 0;
 int r;
 do
 {
 r = b;
 b = a % b;
 a = r;
 }
 while (b != 0);
 return a;
 }
 |  |  |  |  
| wp_xxyyzz 
          Beiträge: 40
 
 
 
 
 | 
Verfasst: So 23.04.06 12:41 
 
TBruchG findet ich zunächst eine nützliche Erweiterung, da nun praktisch die ganze Bruchrechnung abgedeckt ist. Allerdings stört mich, dass man dafür einen weiteren Int64 benötigt, die Information dafür aber schon in der bisherigen Deklaration vorhanden ist. Ich würde folgende Änderungen vorschlagen, um einen ganzzahligen Bruchanteil zu implementieren, ohne TBruchG einführen zu müssen:
 - Die bereits vorhandene Funktion ToBruch würde ich mit einer Variante mit Ganzzahl überladen:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 
 | function ToBruch(Ganze,Zaehler,Nenner:int64) : TBruch; beginif Nenner=0 then raise Exception.Create('Der Nenner darf nicht null sein.');
 result.Zaehler := Ganze*Nenner + Zaehler;
 result.Nenner := Nenner;
 end;
 |  - Die Stringumwandlungsroutine müsste die vorgeschaltete Ganzzahl erkennen; die folgende Routine geht noch weiter und erkennt auch Float-Zahlen in Ganzzahl, Zähler und Nenner; außerdem werden einige offensichtliche Syntax-Fehler erkannt (aber sicher nicht alle):
 												| 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:
 
 | function StrToBruch(const s:string; eps:extended=0.0) : TBruch;var
 p : integer;
 b1,b2,b3 : TBruch;
 
 function Get(var z : TBruch) : boolean;
 var
 tmp : string;
 begin
 tmp := '';
 while (p <= Length(s)) and (s[p] = ' ') do inc(p);
 while (p<=Length(s)) and (not (s[p] in [' ', '/'])) do begin
 tmp := tmp + s[p];
 inc(p);
 end;
 while (p <= Length(s)) and (s[p] = ' ') do inc(p);
 if tmp=''
 then result := false
 else begin
 if eps=0.0
 then z := FloatToBruch(StrToFloat(tmp))
 else z := FloatToBruch(StrToFloat(tmp), eps);
 result := true;
 end;
 end;
 
 begin
 p := 1;
 if Get(b1) then begin
 if (p>Length(s)) then
 result := b1
 else
 if s[p]='/' then begin
 inc(p);
 if Get(b2) then
 result := p_Div(b1, b2)
 else
 raise Exception.Create('Syntax-Fehler');      end else begin
 if Get(b2) then begin
 if s[p]='/' then begin
 inc(p);
 if Get(b3) then
 result := p_Add(b1, p_Div(b2,b3))
 else
 raise Exception.Create('Syntax-Fehler');         end else
 raise Exception.Create('Syntax-Fehler');
 end else
 result := b1;
 end;
 end else
 raise Exception.Create('Syntax-Fehler');   end;
 |  - Folgende Funktionen extrahieren Ganzzahl etc. aus einem Bruch, damit muss man der Anwender die interne Darstellung eines Bruchs nicht mehr kennen:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 | function Ganze(bruch:TBruch) : int64;begin
 result := Bruch.Zaehler div Bruch.Nenner;
 end;
 
 function Zaehler(bruch:TBruch) : int64;
 begin
 result := Bruch.Zaehler mod Bruch.Nenner;
 end;
 
 function Nenner(Bruch:TBruch) : int64;
 begin
 result := Bruch.Nenner;
 end;
 |  - Schließlich erscheint mir noch eine weitere Stringumwandlungsroutine sinnvoll:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 | function BruchToNiceStr(Bruch:TBruch) : string;var
 g,z,n : int64;
 begin
 Bruch := p_Kuerzen(Bruch);
 g := Ganze(Bruch);
 z := Zaehler(Bruch);
 n := Nenner(Bruch);
 if (g<>0) then begin
 if (n<>1) then result := Format('%d %d/%d', [g,z,n])
 else result := Format('%d', [g])
 end else
 if (n<>1)
 then result := Format('%d/%d', [z, n])
 else result := Format('%d', [z]);
 end;
 |  |  |  |  
| F34r0fTh3D4rk  
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: Mo 24.04.06 13:34 
 
da hast du dir ja schon gedanken gemacht ^^ einige dinge sind auch schon fertig, aber sachen wie sowas x x/x von string in einen bruch umzuwandeln hat noch nicht ganz so geklappt, ich überlege auch immer noch, funktionen einzubauen um zahlen als int oder float mit brüchen zu addieren multiplizieren usw und mehrfachbrüche einzubauen, mehrfachbrüche vielleicht mit nem array aus nennern oder einfach einem extended als nenner, da bin ich mir noch uneinig   |  |  |  
| Beiri22 
          Beiträge: 42
 
 
 
 
 | 
Verfasst: Mo 22.05.06 17:27 
Titel: in D2006
 
In delphi 2006 kannst du von records die operatoren überladen,
du könntest da also alles in den record mit einbauen, das lässt
 sich dann viel einfacher handhaben.
 |  |  |  
| F34r0fTh3D4rk  
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: Mo 22.05.06 17:46 
 
in delphi 2006    |  |  |  
| Beiri22 
          Beiträge: 42
 
 
 
 
 | 
Verfasst: Mo 22.05.06 19:43 
 |  |  |  
| F34r0fTh3D4rk  
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: Di 23.05.06 09:08 
 
es hat aber nunmal nicht jeder delphi2006, ich kann eine delphi2006 version machen, könnte es aber nicht testen weil ich kein d2006 habe   |  |  |  
| Beiri22 
          Beiträge: 42
 
 
 
 
 | 
Verfasst: Di 23.05.06 13:42 
 
ich nehm doch auch nur (noch) die trial, is mir nur halt dabei aufgefallen. |  |  |  |