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.