Friday, December 5, 2014

Playing (again) with 'Home Made' Vector in Delphi

Here it is. I create a vector as new type, which is in itself is three dimension array.

Then I declared u as vector with three dimension;
u (h,i,j)

where h = 0, 1, 2  as physical component (eg: height, velocity, momentum)
i , j = 0, 1, 2, ..., n as row n column


So if we read u[0,1,1], it means height value at coordinate (1,1); u[1,1,1] is the velocity value; [2,1,1] is the momentum value at the same coordinate.


Trying some of properties of it. I found out that we can initialize all component of vector-u with this one line code

u:=fu(h[i,j],i,j);

so the component u(h,i,j) will filled. Notice that the function has vector (or in this case array) return value.



The code below show how I fill the value of component u(0, i, j)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
const n=3;
type vector=array[0..2,0..n,0..n]of real;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    function fu(a:real;i,j:integer):vector;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation{$R *.dfm}

function tform1.fu(a:real;i,j:integer):vector;
begin
  fu[0,i,j]:=a;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
h:array[0..n,0..n]of real;
u:vector;
begin
  for i:=0 to n do begin
    for j:=0 to n do begin
       h[i,j]:=1;
       u:=fu(h[i,j],i,j);
    end;
  end;
  memo1.Text:='';
  memo1.Lines.Append('h[1,1]='+floattostr(h[1,1]));
  memo1.Lines.Append('u[0,1,1]='+floattostr(u[0,1,1]));
  memo1.Lines.Append('u[0,2,1]='+floattostr(u[0,2,1]));
end;

end.

:)