Académique Documents
Professionnel Documents
Culture Documents
L A Z A R U S,
O X Y G E N E,
S M A R T M O B I L E,
A N D
P A S C AL
R E L A T E D
L A N G U A G E S
A N D R O I D,
I O S,
M A C,
W I N D O W S
&
L I N U X
E
S T U D
G
U
A
G
& L I N U X
I
E
O,
S
CONTENTS
ARTICLES
FROM THE EDITOR PAGE 4
GENERICS EXPLAINED / PART 1 PAGE 5
BY DETLEF OVERBEEK
TURBO COCOA FOR DELPHI AND ANDROID PAGE 9
BY VSEVOLOD LEONOV
TMS FNC USER INTERFACE CONTROLS,
A SET OF FRAMEWORK NEUTRAL CONTROLS, PAGE 15
INTRODUCTION
WHO!? ME!?
BY BRUNO FIERENSW
HUMOR BY KIM MADSEN PAGE 23
SOFTDRAW PAGE 24
BY DAVID DIRKSE
HOW TO BUILD AN APP IN XML WITH FIREMONKEY PAGE 27
INCLUDED STYLE SHEETOVERVIEW
BY DETLEF OVERBEEK
HOW TO DEAL WITH BIG NUMBERS PAGE 36
BY MAX KLEINER
FNC
FRAMEWORK NEUTRAL COMPONENTS
maXbox
Advertisers
BARNSTEN 14
COMPONENTS 4 DEVELOPERS 40
COMPUTER MATH AND GAMES 26
TURBO COCOA 13
Stephen Ball
http://delphiaball.co.uk
@DelphiABall
Dmitry Boyarintsev
dmitry.living @ gmail.com
Marco Cant
www.marcocantu.com
marco.cantu @ gmail.com
David Dirkse
www.davdata.nl
E-mail: David @ davdata.nl
Benno Evers
b.evers
@ everscustomtechnology.nl
Bruno Fierens
www.tmssoftware.com
bruno.fierens @ tmssoftware.com
Primo Gabrijeli
www.primoz @ gabrijelcic.org
Fikret Hasovic
fhasovic @ yahoo.com
Cary Jensen
www.jensendatasystems.com
http://caryjensen.blogspot.nl
Peter Johnson
http://delphidabbler.com
delphidabbler@gmail.com
John Kuiper
john_kuiper @ kpnmail.nl
Wagner R. Landgraf
wagner @ tmssoftware.com
KimMadsen
Madsen
Kim
www.component4developers
kbm
@ components4developers.com
Andrea Magni
www.andreamagni.eu
andrea.magni @ gmail.com
www.andreamagni.eu/wp
Boian Mitov
mitov @ mitov.com
Jeremy North
Heiko Rompel
info@rompelsoft.de
Rik Smit
rik @ blaisepascal.eu
www.romplesoft.de
Bob Swart
www.eBob42.com
Bob @ eBob42.com
B.J. Rao
contact@intricad.com
Daniele Teti
www.danieleteti.it
d.teti @ bittime.it
Anton Vogelaar
ajv @ vogelaar-electronics.com
Siegfried Zuhr
siegfried @ zuhr.nl
Max Kleiner
www.softwareschule.ch
max @ kleiner.com
jeremy.north @ gmail.com
Editor - in - chief
Detlef D. Overbeek, Netherlands Tel.: +31 (0)30 890.66.44 / Mobile: +31 (0)6 21.23.62.68
News and Press Releases email only to editor@blaisepascal.eu
Editors
Peter Bijlsma, W. (Wim) van Ingen Schenau, Rik Smit,
Correctors
Howard Page-Clark, James D. Duff
Trademarks
All trademarks used are acknowledged as the property of their respective owners.
Caveat Whilst we endeavour to ensure that what is published in the magazine is correct, we cannot accept responsibility for any errors or omissions.
If you notice something which may be incorrect, please contact the Editor and we will publish a correction where relevant.
Subscriptions ( 2013 prices )
1: Printed version: subscription 80.-- Incl. VAT 6 % (including code, programs and printed magazine,
10 issues per year excluding postage).
2: Electronic - non printed subscription 50.-- Incl. VAT 21% (including code, programs and download magazine)
Subscriptions can be taken out online at www.blaisepascal.eu or by written order, or by sending an email to office@blaisepascal.eu
Subscriptions can start at any date. All issues published in the calendar year of the subscription will be sent as well.
Subscriptions run 365 days. Subscriptions will not be prolonged without notice. Receipt of payment will be sent by email.
Subscriptions can be paid by sending the payment to:
ABN AMRO Bank Account no. 44 19 60 863 or by credit card: Paypal
Name: Pro Pascal Foundation-Foundation for Supporting the Pascal Programming Language (Stichting Ondersteuning Programeertaal Pascal)
IBAN: NL82 ABNA 0441960863 BIC ABNANL2A VAT no.: 81 42 54 147 (Stichting Programmeertaal Pascal)
Subscription department Edelstenenbaan 21 / 3402 XA IJsselstein, The Netherlands / Tel.: + 31 (0) 30 890.66.44 / Mobile: + 31 (0) 6 21.23.62.68
office@blaisepascal.eu
Copyright notice
All material published in Blaise Pascal is copyright SOPP Stichting Ondersteuning Programeertaal Pascal unless otherwise noted and may
not be copied, distributed or republished without written permission. Authors agree that code associated with their articles will be made
available to subscribers after publication by placing it on the website of the PGG for download, and that articles and code will be placed on
distributable data storage media. Use of program listings by subscribers for research and study purposes is allowed, but not for commercial
purposes. Commercial use of program listings and code is prohibited without the written permission of the author.
PAGE 1 / 4
type
List<Item> = class
...
end;
BY DETLEF OVERBEEK
starter
Lisp
ADA**
type
List<Item> = class
...
end;
TYPE ARGUMENT
Generic types are created by declaring of typearguments.
In Delphi, you can use whatever type as a type
argument except the following:
a static array,
they are called static because their size is static,
and because they use static memory.
a short string ,
is a counted-array of (ANSII) characters, up to
255 characters in the string. The first byte of this
array stands for the length of the string.
Since this was the most important string type in
Delphi 1 (16 bit Delphi), it now is only used as
the ShortString because of backwardcompatibility.
a record type
which contains a field of a derived (recursive)
type like one or more of these types.
type
TWatDanOok<T> = class
FData: T;
end;
var
F: TWatDanOok<Integer>;
// 'Integer' is het type argument van TwatDanOok<T>
begin
...
end.
type
List<Item> = class
...
end;
On 32-bit platforms,
a variant is stored as a 16-byte record.
On 64-bit platforms,
a variant is stored as a 24-byte record.
A variant record consists of a type code and a
value, or a pointer to a value, of the type
specified by the type code. All variants are
initialized on creation to the special value
Unassigned. The special value Null indicates
unknown or missing data.
The standard function VarType returns a
variant's type code.
The varTypeMask constant is a bit mask
used to extract the code from VarType's return
value, so that, for example,
VarType(V) and varTypeMask = varDouble
returns True
if V contains a Double or an array of Double .
(The mask simply hides the first bit, which indicates
whether the variant holds an array.)
The TVarData record type defined in the
System unit can be used to typecast variants and
gain access to their internal representation.
In the coming issues we will go on to explore the
Generic Class , the use of it by creating a number
of programs that show in detail how to handle it
and show the advantages of a not so new trend
of using Generics - but slowly its becoming clear
how great this NEW class is....
type
List<Item> = class
...
end;
USING GENERICS
CPU
MEMORY
COMPILER
USING VARIANT
USING GENERICS
Compiles
PROGRAM
PROGRAM
Creates Generics
Program Starts
Program starts
Uses Strings
is already created
Uses Integer
is already created
Uses Array
is already created
Program stops
Compiler clears
Generics
LATER
Program stops
COMPILES FAST
Compiles
expert
Delphi
INTRODUCTION
Previously, we've considered how TurboCocoa - as
an additional tool for Delphi 10.1 Berlin - can be
used for creating true-native apps for iOS.
In addition, we've discussed why native controls and
native app architecture are important.
Now we'll show, how to make platform oriented
applications for Android with Delphi.
Delphi developers since XE2 have many options in
project types when developing applications from the
viewpoint of platforms. In the world of mobile app
development the choice is between multi-device
projects on the base of the same codebase,
including UI forms, and platform-specific projects
with the help of TurboCocoa and Delphi.
The mechanism of the last approach is simple:
one uses Android Studio as a native development
tool for designing UI, and then use the design only in
Delphi project with full power of modern Object
Pascal and non-visual components, including data
access ones, and any of business logic and
algorithmic code (See Figure 1).
Figure 4
10
TurboCocoa
11
SUMMARY:
TurboCocoa helps Delphi developers make true
native UX apps for different platforms Mac
OS/iOS/Android.
Development for Android in Delphi with
TurboCocoa calls for only design skills in Android
Studio, while Object Pascal remains an effective
programming language together with non-visual
components and any legacy code.
The resulting apps are fast, compact, and fully
meet expectations by customers, who value the
native UX.
http://turbococoa.com/
20% discount on
TURBO COCOA.
PRICING
- $149 for perpetual license
- $39 for annual renewal
- $99 yearly subscription
DISCOUNT COUPON #
BPM 48665
13
Registered users of any earlier version qualify for the upgrade price!
If you are currently using any earlier version of RAD Studio, Delphi, C++Builder
or Borland Developer Studio and are looking for the lowest cost to move for ward,
now is the time to upgrade.
Save up to 45% off the new user price
Update Subscription is now included with all licenses, so youll never miss an update again
Plus, you get access to the free bonus pack ebook and software downloads
How to qualify for the upgrade price of 10.1 Berlin and save up to 45%: P urchase 10.1 Berlin at the Upgrade price
through June 20, 2016. Even if the description says Upgrade from XE6 or later,
all earlier version users can upgrade during this special offer period .
Buy Delphi or C++Builder 10.1 Berlin Professional edition and receive a Mobile Add-on
Pack with Update Subscription FREE! Go mobile for less!
How to qualify for a free Mobile Add-on pack when you buy 10.1 Berlin: P urchase
the specially marked Delphi or C++Builder 10.1 Berlin Professional Named User license
with Mobile Add-on through June 20, 2016. Special price includes the full Delphi
or C++Builder Professional license, Mobile Add-on Pack and one year of Update Subscription.
FNC
FRAMEWORK NEUTRAL COMPONENTS
CONCEPT
tmssoftware.com
productivity software buiding blocks
15
FNC
FRAMEWORK NEUTRAL COMPONENTS
CONTROLS
In TMS FNC UI Pack v1.0 , there are already 29
controls included. On the tool palette this looks
like: VCL, FMX
16
tmssoftware.com
productivity software buiding blocks
FNC
FRAMEWORK NEUTRAL COMPONENTS
LCL
tmssoftware.com
productivity software buiding blocks
17
the
trial or full version of the component that
comes with several samples.
18
tmssoftware.com
productivity software buiding blocks
FNC
FRAMEWORK NEUTRAL COMPONENTS
FNC
FRAMEWORK NEUTRAL COMPONENTS
FNC
FRAMEWORK NEUTRAL COMPONENTS
var
grp: TTMSFNCPlannerGroup;
plIt: TTMSFNCPlannerItem;
i, d: integer;
begin
TMSFNCPlanner1.OrientationMode := pomHorizontal;
TMSFNCPlanner1.Mode := pmDayPeriod;
TMSFNCPlanner1.Positions.Count := 9;
TMSFNCPlanner1.Groups.Clear;
grp := TMSFNCPlanner1.Groups.Add;
grp.StartPosition := 0;
grp.EndPosition
:= 2;
grp.Text
:= 'Small';
grp := TMSFNCPlanner1.Groups.Add;
grp.StartPosition := 3;
grp.EndPosition
:= 5;
grp.Text := 'Medium';
grp := TMSFNCPlanner1.Groups.Add;
grp.StartPosition := 6;
grp.EndPosition
:= 8;
grp.Text
:= 'Large';
TMSFNCPlanner1.Resources.Clear;
for i
:= 0 to 8 do
begin
TMSFNCPlanner1.Resources.Add;
TMSFNCPlanner1.Resources.Items[i].Text := 'Car '+inttostr(i + 1);
end;
TMSFNCPlanner1.TimeLineAppearance.LeftSize
:= 35;
TMSFNCPlanner1.TimeLineAppearance.LeftFont.Size := 10;
TMSFNCPlanner1.TimeLineAppearance.LeftFont.Style := [fsBold];
TMSFNCPlanner1.ModeSettings.StartTime := EncodeDate(2016,5,1);
TMSFNCPlanner1.ModeSettings.EndTime
:= EncodeDate(2016,6,1);
TMSFNCPlanner1.TimeLine.DisplayUnitSize
:= 35;
TMSFNCPlanner1.TimeLine.DisplayUnitFormat := 'd/m';
for i := 0 to 10 do
begin
d := random(20);
plIt := TMSFNCPlanner1.Items.Add;
plIt.StartTime := EncodeDate(2016,5,1) + d;
plIt.EndTime
:= EncodeDate(2016,5,1) + d + 1 + random(5);
plIt.Resource := Random(9);
plIt.Text
:= 'Rental';
plIt.Color
:= gcYellowgreen;
end;
end;
tmssoftware.com
productivity software buiding blocks
19
FNC
FRAMEWORK NEUTRAL COMPONENTS
begin
TMSFNCRichEditor1.AddText('Dear Mr. NAME');
TMSFNCRichEditor1.AddLineBreak;
TMSFNCRichEditor1.AddText('CC: EMAIL');
TMSFNCRichEditor1.SelStart := 9;
TMSFNCRichEditor1.SelLength := 4;
TMSFNCRichEditor1.SetSelectionMergeField('NAME');
TMSFNCRichEditor1.SelStart := 21;
TMSFNCRichEditor1.SelLength := 5;
TMSFNCRichEditor1.SetSelectionMergeField('EMAIL');
end;
TTMSFNCRichEditorFormatToolbar.
RichEditor. Also add a
TTMSFNCRichEditorHTMLIO and
TTMSFNCRichEditorRTFIO non-visual
and
TTMSFNCRichEditorRTFIO.RichEditor.
20
tmssoftware.com
productivity software buiding blocks
FNC
FRAMEWORK NEUTRAL COMPONENTS
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.Add('NAME=Elon Musk');
sl.Add('EMAIL=elon@tesla.com');
TMSFNCRichEditor1.Merge(sl);
finally
sl.Free;
end;
TMSFNCRichEditorRTFIO1.Save('e:\tms\merge.rtf');
TMSFNCRichEditor1.UnMerge;
end;
var
tn,cn: TTMSFNCTreeViewNode;
begin
TMSFNCTreeView1.BeginUpdate;
TMSFNCTreeView1.Columns.Clear;
TMSFNCTreeView1.Nodes.Clear;
TMSFNCTreeView1.Columns.Add.Text := 'Country';
TMSFNCTreeView1.Columns.Add.Text := 'Capital';
tn := TMSFNCTreeView1.AddNode(nil);
tn.Text[0] := 'Europe';
cn := TMSFNCTreeView1.AddNode(tn);
cn.Text[0] := 'Germany';
cn.Text[1] := 'Berlin';
cn := TMSFNCTreeView1.AddNode(tn);
cn.Text[0] := 'France';
cn.Text[1] := 'Paris';
cn := TMSFNCTreeView1.AddNode(tn);
cn.Text[0] := 'United Kingdom';
cn.Text[1] := 'London';
tn := TMSFNCTreeView1.AddNode(nil);
tn.Text[0] := 'Asia';
cn := TMSFNCTreeView1.AddNode(tn);
cn.Text[0] := 'Japan';
cn.Text[1] := 'Tokyo';
cn := TMSFNCTreeView1.AddNode(tn);
cn.Text[0] := 'China';
cn.Text[1] := 'Peking';
TMSFNCTreeView1.EndUpdate;
end;
tmssoftware.com
productivity software buiding blocks
21
FNC
FRAMEWORK NEUTRAL COMPONENTS
procedure TForm1.TMSFNCTreeView1GetNodeText(
Sender: Tobject;
Anode: TTMSFNCTreeViewVirtualNode;
AColumn: Integer;
string property.
AMode: TTMSFNCTreeViewNodeTextMode;
In a next step, we'll use the TTMSFNCTreeView in
var AText: string);
virtual mode and insert 1 million nodes! Columns
begin
are not virtual, so this must be initialized and to
if ANode.Level = 0 then AText :=
keep it simple, this will be initialized to one
'Root node '+inttostr(ANode.Index)
column:
else
begin
if ANode.Level = 1 then AText :=
TMSFNCTreeView1.Columns.Clear;
'Child node '+inttostr(ANode.Index)
TMSFNCTreeView1.Columns.Add;
else
TMSFNCTreeView1.Columns[0].Text := 'Large treeview';
if ANode.Level = 2 then AText :=
end;
'Subchild node '+inttostr(ANode.Index);
end;
To use the TTMSFNCTreeView in virtual
22
tmssoftware.com
productivity software buiding blocks
project that can be used from VCL, FMX and LCL that you
can obtain from
http://www.tmssoftware.com/site/
blog.asp?post=335
We're eager to learn how your experience is going and to
hear your feedback, comments and further wishes and
needs in this direction.
About the author Bruno Fierens
Studied civil electronic engineering at university of
Ghent, Belgium (1987-1992) and started a career as R&D
digital hardware engineer. Besides the fascination for
electronics, Bruno Fierens set the first steps in programming
with Turbo Pascal v3.0 and used all Borland Pascal & Delphi
versions since that time. In 1996, he founded TMS software
for the activity of application and component development
with Delphi. TMS software became Borland Technology
Partner in 1998, developed Delphi Informant award-winning
grid & scheduling components and now has an international
team of software developers working on a large portfolio of
components. Bruno Fierens is from 2012 Embarcadero MVP
and frequent speaker at Delphi conferences world-wide.
He does and oversees VCL, IntraWeb, .NET and FireMonkey
component development
Kim Madsen
Would be nice if it
also solved
this problem
Kim Madsen
23
expert
Delphi
INTRODUCTION
This article describes the drawing of soft lines and
ellipses.
Soft means that the pen does not follow pixels but
smoothes over pixels. As a result, the lines do not
have steps.
24
Example:
Qpixel(.. , ..);
ELLIPSES
procedure SoftEllipse(x1,y1,x2,y2 :
SmallInt);
25
HOWARD PAGE-CLARK
SPECIAL OFFER:
RKSE
DI
D
I
AV
/Co
irkse
vidD
u/Da
at
cal.e
ales
pres laisepas
.b
w
w
w
es.htm
Gam
ath_
terM
mpu
;
dure
proce
var
9 do
begin := 1 to
for i
n
i
g
e
b
INCLUDING:
53 projects and code fully explained.
The Delphi 3 Delphi Berlin source code
is available together with full explanation.
Most of the projects can be done with
FPC and or Lazarus as well.
For a preview go to:
http://www.blaisepascal.eu/
david_dirkse/
UK_Book_Department_DavData.html
PDF file - excellent readable on your
tablet. Printable.
end;
end;
TH &
A
M
UTER PASCAL
P
M
CO
IN
S
E
M
GA
POCKET EDITION
Also printed in full color.
A fully indexed PDF file is included.
30,00
On tablet
http://www.blaisepascal.eu/david_dirkse/UK_Book_Department_DavData.html
26
expert
Delphi
FireMonkey
In this article some of the possibilities
that are available with xml are explained. The article will
start by giving a short introduction into what XML is and
how it can be used in Delphi. In this article we want to
show how XML works, by creating a very simple
application made in FMX (Embarcadero) showing some
specialties about FMX and explaining some of it, so you
will be able to build an extension of this program
yourself and later on port it to your own Smart Mobile.
27
28
strict private
FPerson: TPerson;
NR.: 2
The procedure Fill is used to get the information The button btnLoadEditsClick is used for to load the
from 'pvPersonNode' and saved in the FPerson
information from FPerson string variables UserID,
string variables userID Firstname and Lastname. firstName and lastName to the edits.
procedure TFormMyFirstApp.Fill(pvPersonNode: IXMLNode);
NR.: 6
var lvItemNodes: IXMLNodeList;
begin
lvItemNodes
FPerson.userID
FPerson.Firstname
FPerson.Lastname
end;
:= pvPersonNode.ChildNodes;
:= TFormMyFirstApp.GetNodeText(lvItemNodes, 'userID'
);
:= TFormMyFirstApp.GetNodeText(lvItemNodes, 'firstName');
:= TFormMyFirstApp.GetNodeText(lvItemNodes, 'lastName' );
procedure
In the FormCreate procedure we create an
TFormMyFirstApp.btnLoadEditsClick(Sender: TObject);
FPerson object using the variable declared in
begin
the strict private section. Next we create
edtUserID.text := Fperson.UserID;
the IXMLDocument named XML which is located in
edtfirstName.text := Fperson.firstName;
the FPerson object. With the LoadFromFile
edtlastName.text := Fperson.lastName;
procedure we fill the IXMLDocument. Next we
NR.: 7
end
;
set the node to lvPersonNodes. You can set a
node at different levels. You can set the node to the
root by referring to the DocumentElement.
The button ReloadXml calls the procedure
In this case we go 1 node deeper and go straight
ReloadXml. ReloadXml is a separate procedure
for the childnodes - because the information we
which is also called in the FormCreate.
want to retrieve is stored at that level.
procedure TFormMyFirstApp.FormCreate(Sender: TObject);
NR.: 8
var lvPersonIndex: Integer; lvPersonNodes: IXMLNodeList;
begin
FPerson := TPerson.Create;
FPerson.XML := TXMLDocument.Create(nil);
FPerson.XML.LoadFromFile('c:\DelphiProjects\XML Article\friends.xml');
lvPersonNodes := FPerson.XML.DocumentElement.ChildNodes;
for lvPersonIndex := 0 to lvPersonNodes.Count - 1 do
begin
Fill(lvPersonNodes[lvPersonIndex]);
end;
Issue Nr ;4 2016 BLAISE PASCAL MAGAZINE
ReloadXml
end;
29
MEMO FIELD
btnLoadEditsClick
procedure TXmlApp.DoButtonLoadXml;
NR.:10
begin
Memo1.Text := ShowText(FPerson.XML.DocumentElement);
end;
Procedure TFormMyFirstApp.ClearEdits;
begin
edtUserID.text := '';
edtfirstName.text := '';
edtlastName.text := '';
NR.:11
end;
30
');
end;
31
BUILD AN APP IN XML WITH FIREMONKEY - INCLUDED STYLE SHEET OVERVIEW PAGE 6/9
Air_Style
Amakrits_Style
AquaGraphite_style
32
Blend_Style
BUILD AN APP IN XML WITH FIREMONKEY - INCLUDED STYLE SHEET OVERVIEW PAGE 7/9
GoldenGraphite_Style
Light_Style
MetropolisUIBlue_Style/
MetropolisUIBlack_Style/
MetropolisUIBlue_touch.Style
MetropolisUIBlack_touch_Style
Issue Nr 4 2016 BLAISE PASCAL MAGAZINE
33
BUILD AN APP IN XML WITH FIREMONKEY - INCLUDED STYLE SHEET OVERVIEW PAGE 8/9
MetropolisUIDark.Style/
MetropolisUIDark_touch_Style
MetropolisUIGreen_Style/
MetropolisUIGreen_touch_Style
RubyGraphite_style
Transparent_Style.png
34
BUILD AN APP IN XML WITH FIREMONKEY - INCLUDED STYLE SHEET OVERVIEW PAGE 9/9
Win10ModernBlue_Style
Win10ModernDark_Style
35
maXbox Starter 41
A BIG DECIMAL OR BIG INT INTERFACE
Today we step through numbers and infinity.
As you may know there's no simple solution to print,
calculate or store big numbers or decimals.
36
maXbox
or
maxcalcF('70!')
1.19785716699699E100
or even more
1.197857166996989179607278372168909873
6458938142546425857... 10^100
37
8542410589577088732296696591791458471
0138161386222147182917677810495360579
0662731836109375886562057769732224078
7369539815043322468151403276684789485 function BigDecimal(aone: float; atwo: integer): string;
2704687578755031097050417025182159123 begin
1581498325263250655809688846574990085
with TStDecimal.create do begin
9669714028055717222616721730816157657
try
7272999991338993244872051682800307067
//assignfromint(aone)
0499485838754788611631774723703891999
assignfromfloat(aone) //2
6958139536234769725670960895462872160
RaiseToPower(atwo) //23
2617326909732389848441307614286016432
result
:= asstring
3281696899530174488741933479651249141
finally
5546213966841046206162049080873850267
free
4650541288448161671070156327238251274
end
;
3281792004009389099676108083535339433
end;
5725524764503872061091991652109449193
9222603486211588501821307572510489932 end;
0094825429972785833085677027994289424
1606617524881072717128594007583728367
4910402380201480381659625620772921132
SysTools is hosted under Sourceforge:
4307343621431621697813033533870396651
http://www.sourceforge.net/
2798938013065335070551824759826900420
projects/tpsystools
1863795492471837910714543445430478178
The class TStDecimal is defined in the unit
7239952937171734656039024994397675239
StDecMth. It has the following
0512439014099231872228674262774255372
description: StDecMth declares and implements
4933304310551768256663623236667348978
4851223121246465215815916502622714756
TStDecimal. This is a fixed- point value with a
5034147013414617346249445763685652587
total of 38 significant digits of which 16 are to the
2971987877831270158832603817205011322
right
of the decimal point.
6371434556915439803996403854732786566
1366556882568704.2292943165706246
2026993558297850455952524136828406393
1428407486751810074659865765594581378
0192514534642025708505465055466519186
0004262625760818849535769666297091453
It is important to note that Infinity is not a real
7002071987397488841496932636449655414
number, it is an idea.
2960625942272943281855130658659637414
An idea of something without an end.
1177639546182930097371192049744072353
1587803915956018581696810199146742826
Infinity is not "getting larger", it is already fully
1271606169667518376174065032487760281
formed. Sometimes students or people
8378317677730431971470829242037195598
(including
me) say it "goes on and on" which
4142794539461134475921078967271031215
sounds
like
it is growing somehow. But infinity
1288626779198995387011439234510647066
1101764762310248123763791491889455422
does not do anything, it just is.
4081908148706733079384730490856632162
Writeln('')
5640799436867768527108759041690965302
Writeln('Big Lotto Combination 1600
2692727792891817098986146184008177018
of 5000!')
1767033389755570766416722785651840954
Writeln('')
3885689046572793127635154465381472711
Writeln(BinominalCoefficient(5000,
7240451212404891260149108022108352756
1600));
8260609161657527584296850614033467693
Writeln('')
4667568824407601228835743948301133856
Writeln('Same Lotto Comb 6 of 45!')
6729184892015764928314102429169028065
Writeln(BinominalCoefficient(45, 6));
2494545083790886477617437201261672363
-->8145060
7912448112789399431625831010771676068
Writeln('Same Lotto Comb 39 of 45!')
2781353130522059276715028909294777177
Writeln(BinominalCoefficient(45,
8545830155927642694762695926174086054
39)); -->8145060
2034506012289981568628167702061562869
9561954771340366063324712132695944068
OK, 1/3 is a finite number (it is not infinite).
4119059465666117348540308246233404699
But written as a decimal number the digit 3
2360387210154102113393219475674943157
repeats forever (we say "0.3 repeating"):
388839887567715636613
0.333333333333333333333... (etc.)
38
TMyBigInt = class
private
Len: Integer;
Value: AnsiString;
Plato
procedure Trim;
procedure Shift(k: Integer);
procedure MultiplyAtom(Multiplier1:
TMyBigInt; Multiplier2: Integer);
Feedback @ max@kleiner.com
public
Literature:
constructor Create(iValue: Integer = 0);
Kleiner et al., Patterns konkret, 2003,
procedure Add(Addend1, Addend2: TMyBigInt);
Software & Support
procedure Multiply(Multiplier1, Multiplier2:
http://www.softwareschule.ch/download/
TMyBigInt); overload;
codesign_2015.pdf
procedure
Multiply(Multiplier1: TMyBigInt;
http://www.softwareschule.ch/
Multiplier2
: Integer); overload;
download/XXL_BigInt_Tutorial.pdf
unction
ToString
: string;
http://www.mathsisfun.com/numbers/
procedure
CopyFrom
(mbCopy: TMyBigInt);
infinity.html
https://github.com/maxkleiner/maXbox3/ end;
maXbox
releases
39
COMPONENTS
DEVELOPERS
EESB, SOA,MoM, EAI TOOLS FOR INTELLIGENT SOLUTIONS. kbmMW IS THE PREMIERE N-TIER PRODUCT FOR DELPHI /
C++BUILDER BDS DEVELOPMENT FRAMEWORK FOR WIN 32 / 64, .NET AND LINUX WITH CLIENTS RESIDING ON WIN32 / 64,
.NET, LINUX, UNIX MAINFRAMES, MINIS, EMBEDDED DEVICES, SMART PHONES AND TABLETS.