Sign in Join
Wiki copytemporary

Fractions/fi: what changed

Revision 1 to 2. 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
1010`svn `[`https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions`](https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/fractions)
1111
1212Tai voit vain katsella sitä viewcv:n avulla
1313
1414[[`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/)
1515
1616## Ominaisuudet
1717
1818### TFraction tyyppi
1919
2020TFraction on niin sanottu "advanced record": eli [[Record/fi|tietue]] laajennettuna [[Method|metodeilla]] ja [[Property|ominaisuuksilla (Property)]] .
2121
2222#### TFraction ominaisuudet
2323
2424- property Numerator: Int64;
2525 - Asettaa ja hakee murtoluvun osoittajan (jaettavan).
2626- property Denominator: Int64;
2727 - Asettaa ja hakee murtoluvun nimittäjän (jakajan).
2828 - Jos jakajaa yritetään laittaa nollaksi (0) niin nostaa EZeroDivide poikkeuksen.
2929
3030#### TFraction metodit
3131
3232- procedure Normalize;
3333 - Supistaa murtoluvut jakamalla osoittajan ja nimittäjän [[Greatest common divisor/fi|suurimmalla yhteisellä tekijällä]], esim. murtoluvusta 10/5 tulee 2/1.
3434- function ToString: String;
3535 - Palauttaa merkkijonoesityksen murtoluvusta (supistusta ei tehdä), esim. kun osoittaja on 10 ja nimittäjä on 5 niin funktio palauttaa '10/5'.
3636- function Resolve: String;
37- - Palauttaa merkkijonoesityksen murtoluvusta <b>supistamisen jälkeen </b>, esim. kun osoittaja on 4 ja nimittäjä on 3 niin funktio palauttaa '1 1/3'.
37+ - Palauttaa merkkijonoesityksen murtoluvusta supistamisen jälkeen , esim. kun osoittaja on 4 ja nimittäjä on 3 niin funktio palauttaa '1 1/3'.
3838- function ToFloat: Double;
3939 - Palauttaa liukuluku esityksen murtoluvusta, esim kun Numerator (osoittaja) = 1 ja Denominator (nimittäjä) = 3 niin funktio palauttaa 0.3333333333333
4040
4141### Murtolukujen tekeminen
4242
4343- function Fraction(ANumerator, ADenominator: Int64): TFraction;
4444 - Luo murtoluvun osoittaja/nimittäjä, esim. Fraction(1,2) tekee murtoluvun 1/2 (puoli).
4545- function Fraction(AIntPart, ANumerator, ADenominator: Int64): TFraction;
4646 - Luo murtoluvun, esim. Fraction(1,1,2) antaa murtoluvun 1 1/2 (yksi ja puoli).
4747
4848### Tuetut laskut
4949
5050#### Operaattorit (Overloaded operators)
5151
5252- = (yhtäsuuri)
5353
5454- \< (pienempi kuin)
5555
5656- \> (suurempi kuin)
5757
5858- \<= (pienempi tai yhtäsuuri kuin)
5959
6060- \>= (suurempi tai yhtäsuuri kuin)
6161
6262-
6363 = (saa arvokseen): Tämä sallii kokonaisluvun ( Int64 ) tai merkkijonon arvon antamisen muuttujalle
6464
6565- \+ (lisää)
6666
6767- \- (vähennä)
6868
6969- * (kertominen): overloaded for fractions and Int64
7070
7171- / (jakolasku): overloaded for fractions and Int64
7272
7373- ** (potenssiin korotus): only allowed for Integers (on right hand side)
7474
7575#### Matemaattiset funktiot
7676
7777- function Min(a, b: TFraction): TFraction; inline; overload;
7878 - Palauttaa a:n jos a \<= b muuten palauttaa b:n.
7979- function Max(a, b: TFraction): TFraction; inline; overload;
8080 - palauttaa a:n jos a \>= b muuten palauttaa b:n.
8181- function InRange(const AValue, AMin, AMax: TFraction): Boolean; inline; overload;
8282 - Palauttaa true:n jos AValue \>= AMin ja AValue \<= AMax muuten palauttaa false:n
8383- function EnsureRange(const AValue, AMin, AMax: TFraction): TFraction; inline; overload;
8484 - Palauttaa AMin:n jos AValue \< AMin muuten palauttaa AMax vain jos AValue \> AMax muussa tapauksessa palauttaa AValue:n
8585- function Sign(const AValue: TFraction): TValueSign; inline; overload;
8686 - Palauttaa NegativeValue:n jos AValue \< 0 muuten palauttaa PositiveValue:n jos AValue \> 0 muussa tapauksessa palauttaa AZeroValue:n
8787- function IsZero(const AValue: TFraction): Boolean; overload;
8888 - Palauttaa true:n jos AValue on nolla (0) muuten palauttaa false:n.
8989- function Abs(const AValue: TFraction): TFraction; overload;
9090 - Palauttaa AValue jos AValue \>= 0 muuten palauttaa -1*AValue.
9191
9292### Yleiskäyttöiset funktiot
9393
9494- function GreatestCommonDivisor(a, b: Int64): Int64;
9595 - Palauttaa lukujen a ja b [[Greatest common divisor/fi|suurimman yhteisen tekijän]].
9696- function Floor(D: Double): Int64; overload;
9797 - Palauttaa luvun D kokonaisosan (vähentää lukua yhdellä jos luku on pienempi kuin nolla). Niin sanottu lattiafunktio.
9898
9999## Muunnos rutiinit
100100
101101- function FloatToFraction(Value, Precision: Double): TFraction;
102102 - Palauttaa Value:n likiarvon murtolukuna, esim. FloatTofraction(0.5,0.01) palauttaa 1/2 (puolikkaan)
103103 - Precision määrittää murtoluvun hyväksyttävän arvon. Hyväksyttävänä arvona pidetään arvoa joka on Abs(Result) - Abs(Value) \<= Precision.
104104 - Precision määrittämiä suurusluokkia on 15.
105105 - FloatToFraction on tosiasiassa funktiomuuttuja joka on alustettu MF_FloatTofraction() funktiolla. Voit liittää sen tilalle jonkun muun funktion jos haluat.
106106- function TryFloatToFraction(Value, Precision: Double; out F: TFraction; AcceptPrecisionError: Boolean): Boolean;
107107 - Palautettava murtoluku F riippuu annetusta AcceptPrecisionError arvosta:
108108 - Jos AcceptPrecisionError on True niin funktio palauttaa True:n jos likiarvo löydettiin
109109 - Jos AcceptPrecisionError on False niin funktio palauttaa True:n jos likiarvo löydettiin ja Abs(Abs(Result)-Abs(Value)) \<= Precision
110110 - Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n
111111- function FloatToFractionDef(Value, Precision: Double; Def: TFraction; AcceptPrecisionError: Boolean): TFraction;
112112 - Palauttaa Value:n likiarvon murtolukuna jos TryFloatToFraction(Value, Precision, F, AcceptPrecisionError: Boolean) onnistui, muuten palauttaa Def:n
113113- function StrToFraction(const S: String): TFraction;
114114 - Palauttaa murtoluvun joka on merkkijonossa S, nostaa EConvertError poikkeuksen jos muunnos ei onnistu.
115115- function TryStrToFraction(const S: String; out F: TFraction): Boolean;
116116 - Palauttaa True:n jos merkkijono S voidaan muuntaa murtoluvuksi F, muuten palauttaa False:n.
117117 - Palautettava murtoluku F on hyväsyttävissä ainoastaan silloin kun funktion palauttaa True:n.
118118- function StrToFractionDef(const S: String; Def: TFraction): TFraction;
119119 - Palauttaa merkkijonon murtolukuna jos muunnos onnistuu, muuten palauttaa Def:n.
120120
121121## Esimerkkiohjelma
122122
123123``` pascal
124124
125125program example;
126126
127127{$mode objfpc}{$H+}
128128{$apptype console}
129129
130130uses
131131 Classes, sysutils, fractions, math;
132132
133133var
134134 F1, F2: TFraction;
135135 D, Prec: Double;
136136 i: Integer;
137137begin
138138 F1 := Fraction(1,1,3); // 1 1/3
139139 F2 := Fraction(4,3); // 4/3
140140 writeln('F1.ToString = ',F1.ToString); // '4/3'
141141 writeln('F1.Resolve = ',F1.Resolve); // '1 1/3'
142142 writeln('F1.ToFloat = ',F1.ToFloat:16:16); // 1.3333333333333333
143143 writeln('F2.ToString = ',F2.ToString); // '4/3'
144144 writeln('(F1 = F2) = ',F1=F2); //True
145145
146146 F1 := Fraction(1,2);
147147 F2 := Fraction(1,3);
148148 writeln(F1.ToString,' * ',F2.ToString,' = ',(F1*F2).Resolve); // '1/6'
149149 writeln(F1.ToString,' / ',F2.ToString,' = ',(F1/F2).Resolve); // '1 1/2'
150150 writeln(F1.ToString,' + ',F2.ToString,' = ',(F1+F2).Resolve); // '5/6'
151151 writeln(F1.ToString,' - ',F2.ToString,' = ',(F1-F2).Resolve); // '1/6'
152152 writeln(F1.ToString,' ** 2 = ',(F1**2).Resolve); // '1/6'
153153
154154 D := 0.25;
155155 F1 := FloatToFraction(D, 0.000001);
156156 writeln('FloatTofraction(0.25) -> ',F1.ToString); // '1/4'
157157 writeln;
158158 writeln('Approximations of Pi:');
159159 writeln(' [Pi = ',Pi:16:16,']');
160160 Prec := 1.0;
161161 for i := 1 to 10 do
162162 begin
163163 Prec := Prec / 10;
164164 F2 := FloatTofraction(Pi, Prec);
165165 writeln('FloatTofraction(Pi,',Prec:10:10,') = ',Format('%-13s',[F2.Resolve]),' [',F2.ToFloat:16:16,']');
166166 end;
167167end.
168168```
169169
170170Ohjelma tulostaa:
171171
172172 F1.ToString = 4/3
173173 F1.Resolve = 1 1/3
174174 F1.ToFloat = 1.3333333333333333
175175 F2.ToString = 4/3
176176 (F1 = F2) = TRUE
177177 1/2 * 1/3 = 1/6
178178 1/2 / 1/3 = 1 1/2
179179 1/2 + 1/3 = 5/6
180180 1/2 - 1/3 = 1/6
181181 1/2 ** 2 = 1/4
182182 FloatTofraction(0.25) -> 1/4
183183
184184 Approximations of Pi:
185185 [Pi = 3.1415926535897932]
186186 FloatTofraction(Pi,0.1000000000) = 3 1/7 [3.1428571428571428]
187187 FloatTofraction(Pi,0.0100000000) = 3 1/7 [3.1428571428571428]
188188 FloatTofraction(Pi,0.0010000000) = 3 16/113 [3.1415929203539825]
189189 FloatTofraction(Pi,0.0001000000) = 3 16/113 [3.1415929203539825]
190190 FloatTofraction(Pi,0.0000100000) = 3 16/113 [3.1415929203539825]
191191 FloatTofraction(Pi,0.0000010000) = 3 16/113 [3.1415929203539825]
192192 FloatTofraction(Pi,0.0000001000) = 3 4703/33215 [3.1415926539214212]
193193 FloatTofraction(Pi,0.0000000100) = 3 4703/33215 [3.1415926539214212]
194194 FloatTofraction(Pi,0.0000000010) = 3 4703/33215 [3.1415926539214212]
195195 FloatTofraction(Pi,0.0000000001) = 3 14093/99532 [3.1415926536189365]
196196
197197---
198198*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