const chrset = ['0'..'9',#08,'$'];
function IntRoot(N : dword; var rem : word) : word;
//return integer square root of N and remainder rem
var d,root,sub : dword;
begin
 d := $40000000;
 root := 0;
 repeat
  sub := root or d;
  if sub <= N then
   begin
    N := N - sub;
    root := (root shr 1) or d;
   end else root := root shr 1;
  d := d shr 2;
 until d = 0;
 result := root;
 rem := N;
end;

procedure TForm1.GoBtnClick(Sender: TObject);
var N,root : dword;
    rem : word;
begin
 if length(numberEdit.Text) = 0 then numberEdit.Text := '0';
 N := strtoInt(numberEdit.Text);
 root := IntRoot(N,rem);
 rootLabel.Caption := inttostr(root);
 remainderlabel.Caption := inttostr(rem);
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if key in chrset then
  begin
   if (key = '$') and (length(numberEdit.Text) > 0) then key := #0;
  end
  else key := #0;
end;

end.