Sign in Join
Wiki copytemporary

Fractions/fi: what changed

Revision 4 to 5. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Mikä on Fractions unit?
22
33Fractions on [[Unit/fi|käännösyksikko (unit)]] joka suorittaa laskuja murtoluvuilla.\
44Käännösyksikkö syntyi keskustelun pohjalta [discussion on the Lazarus forum](http://forum.lazarus.freepascal.org/index.php/topic,27805.0.html).
55
66## Subversion
77
88Löydät Fractions unitin
99
10-`svn `[`https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions`](https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions)
10+```text
11+svn https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions
12+```
1113
1214Tai voit vain katsella sitä viewcv:n avulla
1315
14-[[`http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/fractions/`](http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/fractions/)](http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/fractions/)
16+```text
17+http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/fractions/
18+```
1519
1620## Ominaisuudet
1721
1822### TFraction tyyppi
1923
2024TFraction on niin sanottu "advanced record": eli [[Record/fi|tietue]] laajennettuna [[Method|metodeilla]] ja [[Property|ominaisuuksilla (Property)]] .
2125
2226#### TFraction ominaisuudet
2327
2428- property Numerator: Int64;
2529 - Asettaa ja hakee murtoluvun osoittajan (jaettavan).
2630- property Denominator: Int64;
2731 - Asettaa ja hakee murtoluvun nimittäjän (jakajan).
2832 - Jos jakajaa yritetään laittaa nollaksi (0) niin nostaa EZeroDivide poikkeuksen.
2933
3034#### TFraction metodit
3135
3236- procedure Normalize;
3337 - Supistaa murtoluvut jakamalla osoittajan ja nimittäjän [[Greatest common divisor/fi|suurimmalla yhteisellä tekijällä]], esim. murtoluvusta 10/5 tulee 2/1.
3438- function ToString: String;
3539 - Palauttaa merkkijonoesityksen murtoluvusta (supistusta ei tehdä), esim. kun osoittaja on 10 ja nimittäjä on 5 niin funktio palauttaa '10/5'.
3640- function Resolve: String;
3741 - Palauttaa merkkijonoesityksen murtoluvusta supistamisen jälkeen , esim. kun osoittaja on 4 ja nimittäjä on 3 niin funktio palauttaa '1 1/3'.
3842- function ToFloat: Double;
3943 - Palauttaa liukuluku esityksen murtoluvusta, esim kun Numerator (osoittaja) = 1 ja Denominator (nimittäjä) = 3 niin funktio palauttaa 0.3333333333333
4044
4145### Murtolukujen tekeminen
4246
4347- function Fraction(ANumerator, ADenominator: Int64): TFraction;
4448 - Luo murtoluvun osoittaja/nimittäjä, esim. Fraction(1,2) tekee murtoluvun 1/2 (puoli).
4549- function Fraction(AIntPart, ANumerator, ADenominator: Int64): TFraction;
4650 - Luo murtoluvun, esim. Fraction(1,1,2) antaa murtoluvun 1 1/2 (yksi ja puoli).
4751
4852### Tuetut laskut
4953
5054#### Operaattorit (Overloaded operators)
5155
5256- = (yhtäsuuri)
5357
5458- \< (pienempi kuin)
5559
5660- \> (suurempi kuin)
5761
5862- \<= (pienempi tai yhtäsuuri kuin)
5963
6064- \>= (suurempi tai yhtäsuuri kuin)
6165
6266-
6367 = (saa arvokseen): Tämä sallii kokonaisluvun ( Int64 ) tai merkkijonon arvon antamisen muuttujalle
6468
6569- \+ (lisää)
6670
6771- \- (vähennä)
6872
6973- * (kertominen): overloaded for fractions and Int64
7074
7175- / (jakolasku): overloaded for fractions and Int64
7276
7377- ** (potenssiin korotus): only allowed for Integers (on right hand side)
7478
7579#### Matemaattiset funktiot
7680
7781- function Min(a, b: TFraction): TFraction; inline; overload;
7882 - Palauttaa a:n jos a \<= b muuten palauttaa b:n.
7983- function Max(a, b: TFraction): TFraction; inline; overload;
8084 - palauttaa a:n jos a \>= b muuten palauttaa b:n.
8185- function InRange(const AValue, AMin, AMax: TFraction): Boolean; inline; overload;
8286 - Palauttaa true:n jos AValue \>= AMin ja AValue \<= AMax muuten palauttaa false:n
8387- function EnsureRange(const AValue, AMin, AMax: TFraction): TFraction; inline; overload;
8488 - Palauttaa AMin:n jos AValue \< AMin muuten palauttaa AMax vain jos AValue \> AMax muussa tapauksessa palauttaa AValue:n
8589- function Sign(const AValue: TFraction): TValueSign; inline; overload;
8690 - Palauttaa NegativeValue:n jos AValue \< 0 muuten palauttaa PositiveValue:n jos AValue \> 0 muussa tapauksessa palauttaa AZeroValue:n
8791- function IsZero(const AValue: TFraction): Boolean; overload;
8892 - Palauttaa true:n jos AValue on nolla (0) muuten palauttaa false:n.
8993- function Abs(const AValue: TFraction): TFraction; overload;
9094 - Palauttaa AValue jos AValue \>= 0 muuten palauttaa -1*AValue.
9195
9296### Yleiskäyttöiset funktiot
9397
9498- function GreatestCommonDivisor(a, b: Int64): Int64;
9599 - Palauttaa lukujen a ja b [[Greatest common divisor/fi|suurimman yhteisen tekijän]].
96100- function Floor(D: Double): Int64; overload;
97101 - Palauttaa luvun D kokonaisosan (vähentää lukua yhdellä jos luku on pienempi kuin nolla). Niin sanottu lattiafunktio.
98102
99103## Muunnos rutiinit
100104
101105- function FloatToFraction(Value, Precision: Double): TFraction;
102106 - Palauttaa Value:n likiarvon murtolukuna, esim. FloatTofraction(0.5,0.01) palauttaa 1/2 (puolikkaan)
103107 - Precision määrittää murtoluvun hyväksyttävän arvon. Hyväksyttävänä arvona pidetään arvoa joka on Abs(Result) - Abs(Value) \<= Precision.
104108 - Precision määrittämiä suurusluokkia on 15.
105109 - FloatToFraction on tosiasiassa funktiomuuttuja joka on alustettu MF_FloatTofraction() funktiolla. Voit liittää sen tilalle jonkun muun funktion jos haluat.
106110- function TryFloatToFraction(Value, Precision: Double; out F: TFraction; AcceptPrecisionError: Boolean): Boolean;
107111 - Palautettava murtoluku F riippuu annetusta AcceptPrecisionError arvosta:
108112 - Jos AcceptPrecisionError on True niin funktio palauttaa True:n jos likiarvo löydettiin
109113 - Jos AcceptPrecisionError on False niin funktio palauttaa True:n jos likiarvo löydettiin ja Abs(Abs(Result)-Abs(Value)) \<= Precision
110114 - Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n
111115- function FloatToFractionDef(Value, Precision: Double; Def: TFraction; AcceptPrecisionError: Boolean): TFraction;
112116 - Palauttaa Value:n likiarvon murtolukuna jos TryFloatToFraction(Value, Precision, F, AcceptPrecisionError: Boolean) onnistui, muuten palauttaa Def:n
113117- function StrToFraction(const S: String): TFraction;
114118 - Palauttaa murtoluvun joka on merkkijonossa S, nostaa EConvertError poikkeuksen jos muunnos ei onnistu.
115119- function TryStrToFraction(const S: String; out F: TFraction): Boolean;
116120 - Palauttaa True:n jos merkkijono S voidaan muuntaa murtoluvuksi F, muuten palauttaa False:n.
117121 - Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n.
118122- function StrToFractionDef(const S: String; Def: TFraction): TFraction;
119123 - Palauttaa merkkijonon murtolukuna jos muunnos onnistuu, muuten palauttaa Def:n.
120124
121125## Esimerkkiohjelma
122126
123127``` pascal
124128
125129program example;
126130
127131{$mode objfpc}{$H+}
128132{$apptype console}
129133
130134uses
131135 Classes, sysutils, fractions, math;
132136
133137var
134138 F1, F2: TFraction;
135139 D, Prec: Double;
136140 i: Integer;
137141begin
138142 F1 := Fraction(1,1,3); // 1 1/3
139143 F2 := Fraction(4,3); // 4/3
140144 writeln('F1.ToString = ',F1.ToString); // '4/3'
141145 writeln('F1.Resolve = ',F1.Resolve); // '1 1/3'
142146 writeln('F1.ToFloat = ',F1.ToFloat:16:16); // 1.3333333333333333
143147 writeln('F2.ToString = ',F2.ToString); // '4/3'
144148 writeln('(F1 = F2) = ',F1=F2); //True
145149
146150 F1 := Fraction(1,2);
147151 F2 := Fraction(1,3);
148152 writeln(F1.ToString,' * ',F2.ToString,' = ',(F1*F2).Resolve); // '1/6'
149153 writeln(F1.ToString,' / ',F2.ToString,' = ',(F1/F2).Resolve); // '1 1/2'
150154 writeln(F1.ToString,' + ',F2.ToString,' = ',(F1+F2).Resolve); // '5/6'
151155 writeln(F1.ToString,' - ',F2.ToString,' = ',(F1-F2).Resolve); // '1/6'
152156 writeln(F1.ToString,' ** 2 = ',(F1**2).Resolve); // '1/6'
153157
154158 D := 0.25;
155159 F1 := FloatToFraction(D, 0.000001);
156160 writeln('FloatTofraction(0.25) -> ',F1.ToString); // '1/4'
157161 writeln;
158162 writeln('Approximations of Pi:');
159163 writeln(' [Pi = ',Pi:16:16,']');
160164 Prec := 1.0;
161165 for i := 1 to 10 do
162166 begin
163167 Prec := Prec / 10;
164168 F2 := FloatTofraction(Pi, Prec);
165169 writeln('FloatTofraction(Pi,',Prec:10:10,') = ',Format('%-13s',[F2.Resolve]),' [',F2.ToFloat:16:16,']');
166170 end;
167171end.
168172```
169173
170174Ohjelma tulostaa:
171175
172176 F1.ToString = 4/3
173177 F1.Resolve = 1 1/3
174178 F1.ToFloat = 1.3333333333333333
175179 F2.ToString = 4/3
176180 (F1 = F2) = TRUE
177181 1/2 * 1/3 = 1/6
178182 1/2 / 1/3 = 1 1/2
179183 1/2 + 1/3 = 5/6
180184 1/2 - 1/3 = 1/6
181185 1/2 ** 2 = 1/4
182186 FloatTofraction(0.25) -> 1/4
183187
184188 Approximations of Pi:
185189 [Pi = 3.1415926535897932]
186190 FloatTofraction(Pi,0.1000000000) = 3 1/7 [3.1428571428571428]
187191 FloatTofraction(Pi,0.0100000000) = 3 1/7 [3.1428571428571428]
188192 FloatTofraction(Pi,0.0010000000) = 3 16/113 [3.1415929203539825]
189193 FloatTofraction(Pi,0.0001000000) = 3 16/113 [3.1415929203539825]
190194 FloatTofraction(Pi,0.0000100000) = 3 16/113 [3.1415929203539825]
191195 FloatTofraction(Pi,0.0000010000) = 3 16/113 [3.1415929203539825]
192196 FloatTofraction(Pi,0.0000001000) = 3 4703/33215 [3.1415926539214212]
193197 FloatTofraction(Pi,0.0000000100) = 3 4703/33215 [3.1415926539214212]
194198 FloatTofraction(Pi,0.0000000010) = 3 4703/33215 [3.1415926539214212]
195199 FloatTofraction(Pi,0.0000000001) = 3 14093/99532 [3.1415926536189365]
196200
197201---
198202*From the Free Pascal wiki, page "Fractions/fi", as it stood on 2020-01-24 after a change by Bart, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history