unit UnitMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, TypInfo;
//Constants
Const
MAX_PLAYERS = 10;
type
{ TFormMain }
TFormMain = class(TForm)
ButtonStart: TButton;
Memo: TMemo;
procedure ButtonStartClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
FormMain: TFormMain;
GlobalInteger : integer; //A global Variable declaration
implementation
{$R *.lfm}
{ TFormMain }
procedure DuplicateProcedure(v:integer);
var LocalResult:integer; //Local variable
begin
v:=2*v; //Local variable scope !
LocalResult:=v;
FormMain.Memo.Lines.Add('The procedure tells : The local result is : '
+ inttostr(LocalResult));
end;
function DuplicateFunction(v:integer):integer; //response
var LocalResult:integer; //Local variable
begin
v:=2*v; //Local variable scope !
LocalResult:=v;
result := LocalResult;
end;
procedure DuplicateProcedureGlobalVariable();
begin
GlobalInteger:=2*GlobalInteger;;
FormMain.Memo.Lines.Add('The procedure tells : The local result is : '
+ inttostr(GlobalInteger));
end;
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//MAIN PROGRAM
procedure TFormMain.ButtonStartClick(Sender: TObject);
var LocalInteger : integer; //Local variables declarations
S1,S2 : string;
i : integer;
Players : array [1..9] of string; //Static array
UnlimitedPlayers : array of string; //Dynamic array
begin
//Comments////////////////////////////////////////////////////////////
//Comment single line
{
Comment
Multi line ...
}
//Constants///////////////////////////////////////////////////////////
//MAX_PLAYERS := 11; //THIS IS INCORRECT You can not assign a constant
//Variables///////////////////////////////////////////////////////////
//Inizialization (assigning variables)
LocalInteger := 0;
S1 := 'String 1';
S2 := 'String 2';
//Print integer
Memo.Lines.Add('Your local integer is : ' + inttostr(LocalInteger));
Memo.Lines.Add('Your constant value of max players is : '
+ inttostr(MAX_PLAYERS));
//Strings concatenation
Memo.Lines.Add(S1 + ' , ' + S2);
//If then else////////////////////////////////////////////////////////
Randomize;
i:=Random(100);
if i<30 then begin
Memo.Lines.Add('The number ' + inttostr(i) + ' is small');
end else if (i>=30) and (i<60) then begin
Memo.Lines.Add('The number ' + inttostr(i) + ' is medium');
end else begin
Memo.Lines.Add('The number ' + inttostr(i) + ' is big');
end;
//Loops///////////////////////////////////////////////////////////////
//For Loop
for i:=0 to 10 do begin
LocalInteger:=LocalInteger + 1;
end;
Memo.Lines.Add('Incremented with for. Your integer is now : '
+ inttostr(LocalInteger)); //Will be 11
for i:=10 downto 0 do begin
LocalInteger:=LocalInteger - 1;
end;
Memo.Lines.Add('Decremented with for. Your integer is now : '
+ inttostr(LocalInteger)); //Will be 0
//While loop
While i <= 10 do begin
LocalInteger:=LocalInteger + 1;
i := i + 1; // Increment the number
end;
Memo.Lines.Add('Incremented with while. Your integer is now : '
+ inttostr(LocalInteger)); //Will be 11
//Procedure & Function ///////////////////////////////////////////////
//This is a procedure call . (I do not get a response)
DuplicateProcedure(LocalInteger); //Will get 22 (11*2)
//This is a function call. (I do get a response)
Memo.Lines.Add('The function produced : '
+ inttostr(DuplicateFunction(LocalInteger))); //Will get 22 (11*2)
/////////////////////////////////////////////////////////////////////
//Scopes
//Local Scope: As you can see the v and LocalResult local variable
// which is located internally
// at the Duplicate Procedure/Function
// dies after the end of the procedure / Function.
DuplicateProcedure(LocalInteger); //Will get 22 (11*2)
Memo.Lines.Add('The function produced : '
+ inttostr(DuplicateFunction(LocalInteger)) ); //Will get 22 (11*2)
Memo.Lines.Add('The local scope demonstration : '
+ inttostr(LocalInteger)); //Will be 11
//Global Scope : As you can see in this case we do not pass a variable
// since it is a global variable
// The global variable changed internally
// from the Procedure/Function
// will keep its value and after
// the procedure/function execution.
GlobalInteger:=40;
DuplicateProcedureGlobalVariable(); //Will get 80
Memo.Lines.Add('The global scope demonstration : '
+ inttostr(GlobalInteger)); //80 will remain
//////////////////////////////////////////////////////////////////////
//arrays
//1) Fixed arrays
//a) Assign an array of players
for i:=1 to 9 do begin
Players[i]:='Player number' + inttostr(i);
end;
//b) Read array
Memo.Lines.Add(Players[2]);
//2)Dynamic arrays
//a) Assign a dynamic array
//Increase the array by one element
SetLength(UnlimitedPlayers, Length(UnlimitedPlayers)+1 );
//The first element at a dynamic array is at index 0
UnlimitedPlayers[0]:= 'First player';
//Increase the array by two elements
SetLength(UnlimitedPlayers, Length(UnlimitedPlayers)+2 );
UnlimitedPlayers[1]:= 'Second player';
UnlimitedPlayers[2]:= 'Third player';
//b) Read array
Memo.Lines.Add(UnlimitedPlayers[0]);
Memo.Lines.Add(UnlimitedPlayers[1]);
Memo.Lines.Add(UnlimitedPlayers[2]);
//c) Remove last element
SetLength(UnlimitedPlayers, Length(UnlimitedPlayers)-1 );
//d) Read array again
Memo.Lines.Add(UnlimitedPlayers[0]);
Memo.Lines.Add(UnlimitedPlayers[1]);
//Memo.Lines.Add(UnlimitedPlayers[2]); // this element is deleted
end;
end.
That's all for now.
In next article we'll complete the example of introduction.
Have fun!