Sign in Join
Wiki copytemporary

Fractions/fi: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-## Mikä on Fractions unit?
1+## Contents
22
3-Fractions on [[Unit/fi|käännösyksikko (unit)]] joka suorittaa laskuja murtoluvuilla.\
4-Käännösyksikkö syntyi keskustelun pohjalta [discussion on the Lazarus forum](http://forum.lazarus.freepascal.org/index.php/topic,27805.0.html).
3+ * 1 Mikä on Fractions unit?
4+ * 2 Subversion
5+ * 3 Ominaisuudet
6+ * 3.1 TFraction tyyppi
7+ * 3.1.1 TFraction ominaisuudet
8+ * 3.1.2 TFraction metodit
9+ * 3.2 Murtolukujen tekeminen
10+ * 3.3 Tuetut laskut
11+ * 3.3.1 Operaattorit (Overloaded operators)
12+ * 3.3.2 Matemaattiset funktiot
13+ * 3.4 Yleiskäyttöiset funktiot
14+ * 4 Muunnos rutiinit
15+ * 5 Esimerkkiohjelma
516
6-## Subversion
17+## Mikä on Fractions unit?
718
8-Löydät Fractions unitin
19+Fractions on [[Unit/fi|käännösyksikko (unit)]] joka suorittaa laskuja murtoluvuilla.
20+Käännösyksikkö syntyi keskustelun pohjalta [discussion on the Lazarus forum](<http://forum.lazarus.freepascal.org/index.php/topic,27805.0.html>).
921
10-`svn `[`https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions`](https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions)
22+## Subversion
1123
12-Tai voit vain katsella sitä viewcv:n avulla
24+Löydät Fractions unitin
25+```
26+svn <https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions>
27+```
1328
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/)
29+Tai voit vain katsella sitä viewcv:n avulla
30+```
31+<http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/fractions/>
32+```
1533
1634## Ominaisuudet
1735
1836### TFraction tyyppi
1937
20-TFraction on niin sanottu "advanced record": eli [[Record/fi|tietue]] laajennettuna [[Method|metodeilla]] ja [[Property|ominaisuuksilla (Property)]] .
38+TFraction on niin sanottu "advanced record": eli [[Record/fi|tietue]] laajennettuna [[Method|metodeilla]] ja [[Property|ominaisuuksilla (Property)]] .
2139
2240#### TFraction ominaisuudet
2341
24-- property Numerator: Int64;
25- - Asettaa ja hakee murtoluvun osoittajan (jaettavan).
26-- property Denominator: Int64;
27- - Asettaa ja hakee murtoluvun nimittäjän (jakajan).
28- - Jos jakajaa yritetään laittaa nollaksi (0) niin nostaa EZeroDivide poikkeuksen.
42+ * property Numerator: Int64;
43+ * Asettaa ja hakee murtoluvun osoittajan (jaettavan).
44+ * property Denominator: Int64;
45+ * Asettaa ja hakee murtoluvun nimittäjän (jakajan).
46+ * Jos jakajaa yritetään laittaa nollaksi (0) niin nostaa EZeroDivide poikkeuksen.
2947
3048#### TFraction metodit
3149
32-- procedure Normalize;
33- - Supistaa murtoluvut jakamalla osoittajan ja nimittäjän [[Greatest common divisor/fi|suurimmalla yhteisellä tekijällä]], esim. murtoluvusta 10/5 tulee 2/1.
34-- function ToString: String;
35- - Palauttaa merkkijonoesityksen murtoluvusta (supistusta ei tehdä), esim. kun osoittaja on 10 ja nimittäjä on 5 niin funktio palauttaa '10/5'.
36-- function Resolve: String;
37- - Palauttaa merkkijonoesityksen murtoluvusta supistamisen jälkeen , esim. kun osoittaja on 4 ja nimittäjä on 3 niin funktio palauttaa '1 1/3'.
38-- function ToFloat: Double;
39- - Palauttaa liukuluku esityksen murtoluvusta, esim kun Numerator (osoittaja) = 1 ja Denominator (nimittäjä) = 3 niin funktio palauttaa 0.3333333333333
50+ * procedure Normalize;
51+ * Supistaa murtoluvut jakamalla osoittajan ja nimittäjän [[Greatest common divisor/fi|suurimmalla yhteisellä tekijällä]], esim. murtoluvusta 10/5 tulee 2/1.
52+ * function ToString: String;
53+ * Palauttaa merkkijonoesityksen murtoluvusta (supistusta ei tehdä), esim. kun osoittaja on 10 ja nimittäjä on 5 niin funktio palauttaa '10/5'.
54+ * function Resolve: String;
55+ * Palauttaa merkkijonoesityksen murtoluvusta **supistamisen jälkeen** , esim. kun osoittaja on 4 ja nimittäjä on 3 niin funktio palauttaa '1 1/3'.
56+ * function ToFloat: Double;
57+ * Palauttaa liukuluku esityksen murtoluvusta, esim kun Numerator (osoittaja) = 1 ja Denominator (nimittäjä) = 3 niin funktio palauttaa 0.3333333333333
4058
59+
60+
4161### Murtolukujen tekeminen
4262
43-- function Fraction(ANumerator, ADenominator: Int64): TFraction;
44- - Luo murtoluvun osoittaja/nimittäjä, esim. Fraction(1,2) tekee murtoluvun 1/2 (puoli).
45-- function Fraction(AIntPart, ANumerator, ADenominator: Int64): TFraction;
46- - Luo murtoluvun, esim. Fraction(1,1,2) antaa murtoluvun 1 1/2 (yksi ja puoli).
63+ * function Fraction(ANumerator, ADenominator: Int64): TFraction;
64+ * Luo murtoluvun osoittaja/nimittäjä, esim. Fraction(1,2) tekee murtoluvun 1/2 (puoli).
65+ * function Fraction(AIntPart, ANumerator, ADenominator: Int64): TFraction;
66+ * Luo murtoluvun, esim. Fraction(1,1,2) antaa murtoluvun 1 1/2 (yksi ja puoli).
4767
68+
69+
4870### Tuetut laskut
4971
5072#### Operaattorit (Overloaded operators)
5173
52-- = (yhtäsuuri)
53-
54-- \< (pienempi kuin)
55-
56-- \> (suurempi kuin)
57-
58-- \<= (pienempi tai yhtäsuuri kuin)
59-
60-- \>= (suurempi tai yhtäsuuri kuin)
61-
62--
63- = (saa arvokseen): Tämä sallii kokonaisluvun ( Int64 ) tai merkkijonon arvon antamisen muuttujalle
64-
65-- \+ (lisää)
66-
67-- \- (vähennä)
68-
69-- * (kertominen): overloaded for fractions and Int64
70-
71-- / (jakolasku): overloaded for fractions and Int64
72-
73-- ** (potenssiin korotus): only allowed for Integers (on right hand side)
74+ * = (yhtäsuuri)
75+ * < (pienempi kuin)
76+ * > (suurempi kuin)
77+ * <= (pienempi tai yhtäsuuri kuin)
78+ * >= (suurempi tai yhtäsuuri kuin)
79+ * := (saa arvokseen): Tämä sallii kokonaisluvun ( Int64 ) tai merkkijonon arvon antamisen muuttujalle
80+ * \+ (lisää)
81+ * \- (vähennä)
82+ * * (kertominen): overloaded for fractions and Int64
83+ * / (jakolasku): overloaded for fractions and Int64
84+ * ** (potenssiin korotus): only allowed for Integers (on right hand side)
7485
7586#### Matemaattiset funktiot
7687
77-- function Min(a, b: TFraction): TFraction; inline; overload;
78- - Palauttaa a:n jos a \<= b muuten palauttaa b:n.
79-- function Max(a, b: TFraction): TFraction; inline; overload;
80- - palauttaa a:n jos a \>= b muuten palauttaa b:n.
81-- function InRange(const AValue, AMin, AMax: TFraction): Boolean; inline; overload;
82- - Palauttaa true:n jos AValue \>= AMin ja AValue \<= AMax muuten palauttaa false:n
83-- function EnsureRange(const AValue, AMin, AMax: TFraction): TFraction; inline; overload;
84- - Palauttaa AMin:n jos AValue \< AMin muuten palauttaa AMax vain jos AValue \> AMax muussa tapauksessa palauttaa AValue:n
85-- function Sign(const AValue: TFraction): TValueSign; inline; overload;
86- - Palauttaa NegativeValue:n jos AValue \< 0 muuten palauttaa PositiveValue:n jos AValue \> 0 muussa tapauksessa palauttaa AZeroValue:n
87-- function IsZero(const AValue: TFraction): Boolean; overload;
88- - Palauttaa true:n jos AValue on nolla (0) muuten palauttaa false:n.
89-- function Abs(const AValue: TFraction): TFraction; overload;
90- - Palauttaa AValue jos AValue \>= 0 muuten palauttaa -1*AValue.
88+ * function Min(a, b: TFraction): TFraction; inline; overload;
89+ * Palauttaa a:n jos a <= b muuten palauttaa b:n.
90+ * function Max(a, b: TFraction): TFraction; inline; overload;
91+ * palauttaa a:n jos a >= b muuten palauttaa b:n.
92+ * function InRange(const AValue, AMin, AMax: TFraction): Boolean; inline; overload;
93+ * Palauttaa true:n jos AValue >= AMin ja AValue <= AMax muuten palauttaa false:n
94+ * function EnsureRange(const AValue, AMin, AMax: TFraction): TFraction; inline; overload;
95+ * Palauttaa AMin:n jos AValue < AMin muuten palauttaa AMax vain jos AValue > AMax muussa tapauksessa palauttaa AValue:n
96+ * function Sign(const AValue: TFraction): TValueSign; inline; overload;
97+ * Palauttaa NegativeValue:n jos AValue < 0 muuten palauttaa PositiveValue:n jos AValue > 0 muussa tapauksessa palauttaa AZeroValue:n
98+ * function IsZero(const AValue: TFraction): Boolean; overload;
99+ * Palauttaa true:n jos AValue on nolla (0) muuten palauttaa false:n.
100+ * function Abs(const AValue: TFraction): TFraction; overload;
101+ * Palauttaa AValue jos AValue >= 0 muuten palauttaa -1*AValue.
91102
103+
104+
92105### Yleiskäyttöiset funktiot
93106
94-- function GreatestCommonDivisor(a, b: Int64): Int64;
95- - Palauttaa lukujen a ja b [[Greatest common divisor/fi|suurimman yhteisen tekijän]].
96-- function Floor(D: Double): Int64; overload;
97- - Palauttaa luvun D kokonaisosan (vähentää lukua yhdellä jos luku on pienempi kuin nolla). Niin sanottu lattiafunktio.
107+ * function GreatestCommonDivisor(a, b: Int64): Int64;
108+ * Palauttaa lukujen a ja b [[Greatest common divisor/fi|suurimman yhteisen tekijän]].
109+ * function Floor(D: Double): Int64; overload;
110+ * Palauttaa luvun D kokonaisosan (vähentää lukua yhdellä jos luku on pienempi kuin nolla). Niin sanottu lattiafunktio.
98111
99112## Muunnos rutiinit
100113
101-- function FloatToFraction(Value, Precision: Double): TFraction;
102- - Palauttaa Value:n likiarvon murtolukuna, esim. FloatTofraction(0.5,0.01) palauttaa 1/2 (puolikkaan)
103- - Precision määrittää murtoluvun hyväksyttävän arvon. Hyväksyttävänä arvona pidetään arvoa joka on Abs(Result) - Abs(Value) \<= Precision.
104- - Precision määrittämiä suurusluokkia on 15.
105- - FloatToFraction on tosiasiassa funktiomuuttuja joka on alustettu MF_FloatTofraction() funktiolla. Voit liittää sen tilalle jonkun muun funktion jos haluat.
106-- function TryFloatToFraction(Value, Precision: Double; out F: TFraction; AcceptPrecisionError: Boolean): Boolean;
107- - Palautettava murtoluku F riippuu annetusta AcceptPrecisionError arvosta:
108- - Jos AcceptPrecisionError on True niin funktio palauttaa True:n jos likiarvo löydettiin
109- - Jos AcceptPrecisionError on False niin funktio palauttaa True:n jos likiarvo löydettiin ja Abs(Abs(Result)-Abs(Value)) \<= Precision
110- - Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n
111-- function FloatToFractionDef(Value, Precision: Double; Def: TFraction; AcceptPrecisionError: Boolean): TFraction;
112- - Palauttaa Value:n likiarvon murtolukuna jos TryFloatToFraction(Value, Precision, F, AcceptPrecisionError: Boolean) onnistui, muuten palauttaa Def:n
113-- function StrToFraction(const S: String): TFraction;
114- - Palauttaa murtoluvun joka on merkkijonossa S, nostaa EConvertError poikkeuksen jos muunnos ei onnistu.
115-- function TryStrToFraction(const S: String; out F: TFraction): Boolean;
116- - Palauttaa True:n jos merkkijono S voidaan muuntaa murtoluvuksi F, muuten palauttaa False:n.
117- - Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n.
118-- function StrToFractionDef(const S: String; Def: TFraction): TFraction;
119- - Palauttaa merkkijonon murtolukuna jos muunnos onnistuu, muuten palauttaa Def:n.
114+ * function FloatToFraction(Value, Precision: Double): TFraction;
115+ * Palauttaa Value:n likiarvon murtolukuna, esim. FloatTofraction(0.5,0.01) palauttaa 1/2 (puolikkaan)
116+ * Precision määrittää murtoluvun hyväksyttävän arvon. Hyväksyttävänä arvona pidetään arvoa joka on Abs(Result) - Abs(Value) <= Precision.
117+ * Precision määrittämiä suurusluokkia on 15.
118+ * FloatToFraction on tosiasiassa funktiomuuttuja joka on alustettu MF_FloatTofraction() funktiolla. Voit liittää sen tilalle jonkun muun funktion jos haluat.
119+ * function TryFloatToFraction(Value, Precision: Double; out F: TFraction; AcceptPrecisionError: Boolean): Boolean;
120+ * Palautettava murtoluku F riippuu annetusta AcceptPrecisionError arvosta:
121+ * Jos AcceptPrecisionError on True niin funktio palauttaa True:n jos likiarvo löydettiin
122+ * Jos AcceptPrecisionError on False niin funktio palauttaa True:n jos likiarvo löydettiin ja Abs(Abs(Result)-Abs(Value)) <= Precision
123+ * Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n
124+ * function FloatToFractionDef(Value, Precision: Double; Def: TFraction; AcceptPrecisionError: Boolean): TFraction;
125+ * Palauttaa Value:n likiarvon murtolukuna jos TryFloatToFraction(Value, Precision, F, AcceptPrecisionError: Boolean) onnistui, muuten palauttaa Def:n
126+ * function StrToFraction(const S: String): TFraction;
127+ * Palauttaa murtoluvun joka on merkkijonossa S, nostaa EConvertError poikkeuksen jos muunnos ei onnistu.
128+ * function TryStrToFraction(const S: String; out F: TFraction): Boolean;
129+ * Palauttaa True:n jos merkkijono S voidaan muuntaa murtoluvuksi F, muuten palauttaa False:n.
130+ * Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n.
131+ * function StrToFractionDef(const S: String; Def: TFraction): TFraction;
132+ * Palauttaa merkkijonon murtolukuna jos muunnos onnistuu, muuten palauttaa Def:n.
120133
121134## Esimerkkiohjelma
122-
123-``` pascal
124-
135+```
125136program example;
126-
127-{$mode objfpc}{$H+}
128-{$apptype console}
129-
130-uses
131- Classes, sysutils, fractions, math;
132-
133-var
134- F1, F2: TFraction;
135- D, Prec: Double;
136- i: Integer;
137-begin
138- F1 := Fraction(1,1,3); // 1 1/3
139- F2 := Fraction(4,3); // 4/3
140- writeln('F1.ToString = ',F1.ToString); // '4/3'
141- writeln('F1.Resolve = ',F1.Resolve); // '1 1/3'
142- writeln('F1.ToFloat = ',F1.ToFloat:16:16); // 1.3333333333333333
143- writeln('F2.ToString = ',F2.ToString); // '4/3'
144- writeln('(F1 = F2) = ',F1=F2); //True
145-
146- F1 := Fraction(1,2);
147- F2 := Fraction(1,3);
148- writeln(F1.ToString,' * ',F2.ToString,' = ',(F1*F2).Resolve); // '1/6'
149- writeln(F1.ToString,' / ',F2.ToString,' = ',(F1/F2).Resolve); // '1 1/2'
150- writeln(F1.ToString,' + ',F2.ToString,' = ',(F1+F2).Resolve); // '5/6'
151- writeln(F1.ToString,' - ',F2.ToString,' = ',(F1-F2).Resolve); // '1/6'
152- writeln(F1.ToString,' ** 2 = ',(F1**2).Resolve); // '1/6'
153-
154- D := 0.25;
155- F1 := FloatToFraction(D, 0.000001);
156- writeln('FloatTofraction(0.25) -> ',F1.ToString); // '1/4'
157- writeln;
158- writeln('Approximations of Pi:');
159- writeln(' [Pi = ',Pi:16:16,']');
160- Prec := 1.0;
161- for i := 1 to 10 do
162- begin
163- Prec := Prec / 10;
164- F2 := FloatTofraction(Pi, Prec);
165- writeln('FloatTofraction(Pi,',Prec:10:10,') = ',Format('%-13s',[F2.Resolve]),' [',F2.ToFloat:16:16,']');
166- end;
167-end.
137+
138+ {$mode objfpc}{$H+}
139+ {$apptype console}
140+
141+ uses
142+ Classes, sysutils, fractions, math;
143+
144+ var
145+ F1, F2: TFraction;
146+ D, Prec: Double;
147+ i: Integer;
148+ begin
149+ F1 := Fraction(1,1,3); // 1 1/3
150+ F2 := Fraction(4,3); // 4/3
151+ writeln('F1.ToString = ',F1.ToString); // '4/3'
152+ writeln('F1.Resolve = ',F1.Resolve); // '1 1/3'
153+ writeln('F1.ToFloat = ',F1.ToFloat:16:16); // 1.3333333333333333
154+ writeln('F2.ToString = ',F2.ToString); // '4/3'
155+ writeln('(F1 = F2) = ',F1=F2); //True
156+
157+ F1 := Fraction(1,2);
158+ F2 := Fraction(1,3);
159+ writeln(F1.ToString,' * ',F2.ToString,' = ',(F1*F2).Resolve); // '1/6'
160+ writeln(F1.ToString,' / ',F2.ToString,' = ',(F1/F2).Resolve); // '1 1/2'
161+ writeln(F1.ToString,' + ',F2.ToString,' = ',(F1+F2).Resolve); // '5/6'
162+ writeln(F1.ToString,' - ',F2.ToString,' = ',(F1-F2).Resolve); // '1/6'
163+ writeln(F1.ToString,' ** 2 = ',(F1**2).Resolve); // '1/6'
164+
165+ D := 0.25;
166+ F1 := FloatToFraction(D, 0.000001);
167+ writeln('FloatTofraction(0.25) -> ',F1.ToString); // '1/4'
168+ writeln;
169+ writeln('Approximations of Pi:');
170+ writeln(' [Pi = ',Pi:16:16,']');
171+ Prec := 1.0;
172+ for i := 1 to 10 do
173+ begin
174+ Prec := Prec / 10;
175+ F2 := FloatTofraction(Pi, Prec);
176+ writeln('FloatTofraction(Pi,',Prec:10:10,') = ',Format('%-13s',[F2.Resolve]),' [',F2.ToFloat:16:16,']');
177+ end;
178+ end.
168179```
169180
170-Ohjelma tulostaa:
171-
172- F1.ToString = 4/3
181+Ohjelma tulostaa:
182+```
183+F1.ToString = 4/3
173184 F1.Resolve = 1 1/3
174185 F1.ToFloat = 1.3333333333333333
175186 F2.ToString = 4/3
176187 (F1 = F2) = TRUE
177188 1/2 * 1/3 = 1/6
178189 1/2 / 1/3 = 1 1/2
179190 1/2 + 1/3 = 5/6
180191 1/2 - 1/3 = 1/6
181192 1/2 ** 2 = 1/4
182193 FloatTofraction(0.25) -> 1/4
183-
194+
184195 Approximations of Pi:
185196 [Pi = 3.1415926535897932]
186197 FloatTofraction(Pi,0.1000000000) = 3 1/7 [3.1428571428571428]
187198 FloatTofraction(Pi,0.0100000000) = 3 1/7 [3.1428571428571428]
188199 FloatTofraction(Pi,0.0010000000) = 3 16/113 [3.1415929203539825]
189200 FloatTofraction(Pi,0.0001000000) = 3 16/113 [3.1415929203539825]
190201 FloatTofraction(Pi,0.0000100000) = 3 16/113 [3.1415929203539825]
191202 FloatTofraction(Pi,0.0000010000) = 3 16/113 [3.1415929203539825]
192203 FloatTofraction(Pi,0.0000001000) = 3 4703/33215 [3.1415926539214212]
193204 FloatTofraction(Pi,0.0000000100) = 3 4703/33215 [3.1415926539214212]
194205 FloatTofraction(Pi,0.0000000010) = 3 4703/33215 [3.1415926539214212]
195206 FloatTofraction(Pi,0.0000000001) = 3 14093/99532 [3.1415926536189365]
207+```
196208
197209---
198-*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).*
210+*From the Free Pascal wiki, page "Fractions/fi", as the Internet Archive kept it on 2022-07-04. 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