unit _genFunctions;

interface

uses classes, sysutils;

function  numForm5(n: integer):string;
procedure genSeries(var gts: TStringList; idx, cnt: integer);
procedure genSeries0(var gts: TStringList; a: double; cnt: integer);
procedure genSeries1(var gts: TStringList; nlen, cnt: integer);
procedure genSeries2(var gts: TStringList; nlen, cnt: integer);

const
  numLength = 5;        // max. länge eines int-strings

implementation

// (ganze) zahlen-formatieren -> is nur damit's memo ' guten eindruch macht
function numForm5(n: integer): string;
begin
  result := format('%.5d', [n]);
end;

// (komma) zahlen-formatieren -> is nur damit's memo ' guten eindruch macht
function floForm5(n: double): string;
begin
  result := format('%.4f', [n]);
end;


procedure genSeries(var gts: TStringList; idx, cnt: integer);
begin
  case idx of
    0: genSeries0(gts, 3.7, cnt);
    1: genSeries1(gts, 2, cnt);
    2: genSeries1(gts, 3, cnt);
    3: genSeries2(gts, 2, cnt);
    4: genSeries2(gts, 3, cnt);
  end;
end;

// der gute alte feigenbaum..., wie gesagt
// bis lang noch mit statischem "a", auf 3 stellen genau
procedure genSeries0(var gts: TStringList; a: double; cnt: integer);
var
  i, nlen:  integer;
  x:  double;
  xi: integer;
  xs: string;
begin
  if (gts = nil) then gts := TStringList.Create;
  x    := 0.5;
  nlen := 3;
  for i := 0 to cnt-1 do begin
    x   := a * x * (1 - x);
    xi  := trunc(1000*x);
    xs  := numForm5(xi);
    if(length(xs)>nlen)
    then xs := copy(xs, length(xs)-nLen+1, nLen);
    xi := strtoint(xs);
    xs := numForm5(xi);
    gts.Add(xs);
  end;
end;

// tholo squares: uhhhhh :o)
// die letzten nlen-stellen von quadraten von 0 .. cnt-1
procedure genSeries1(var gts: TStringList; nlen, cnt: integer);
var
  i, p: integer;
  ps:   string;
begin
  if (gts = nil) then gts := TStringList.Create;
  for i:=0 to cnt-1 do begin
    p  := i * i;
    ps := numForm5(p);
    if(length(ps)>nlen)
    then ps := copy(ps, length(ps)-nLen+1, nLen);
    p  := strtoint(ps);
    ps := numForm5(p);
    gts.Add(ps);
  end;
end;

// tholo cubes: uhhhhh :o)
// die letzten nlen-stellen von kuben (zahlen hoch drei :) von 0 .. cnt-1
procedure genSeries2(var gts: TStringList; nlen, cnt: integer);
var
  i, p: integer;
  ps:   string;
begin
  if (gts = nil) then gts := TStringList.Create;
  for i:=0 to cnt-1 do begin
    p  := i * i * i;
    ps := numForm5(p);
    if(length(ps)>nlen)
    then ps := copy(ps, length(ps)-nLen+1, nLen);
    p  := strtoint(ps);
    ps := numForm5(p);
    gts.Add(ps);
  end;
end;


end.
