:: MVP ::
|
|
:: RSS ::
|
|
|
Как вычислить гипотенузу?
// Способ первый
function Hypotenuse(a, b: Double): Double;
begin
Result := Sqrt(a*a + b*b);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Hypotenuse(3, 4).ToString);
end;
// Способ второй
uses
Math;
function Hypotenuse(a, b: Double): Double;
var
_min, _max, r: Double;
begin
_min := Min(a, b);
_max := Max(a, b);
r := _min / _max;
Result := _max * Sqrt(1 + r*r);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Hypotenuse(3, 4).ToString);
end;
|
Как получить дробную часть числа?
// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
const
x = 2.13;
begin
ShowMessage(FloatToStr(x - Trunc(x)));
end;
// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
const
x = 2.13;
begin
ShowMessage(FloatToStr(Frac(x)));
end;
|
Как получить остаток от деления без использования оператора mod?
//uses
// Math;
function ModEx(a, b: Integer): Integer;
begin
Result := a - Trunc(a/b) * b; // a mod b
// Некоторые языки, вроде Python, вычисляют
// остаток через округление до ближайшего
// меньшего, что эквивалентно формуле:
// Result := a - Floor(a/b) * b
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ModEx(-8, 5).ToString);
end;
|
Как получить количество значащих двоичных разрядов в целом числе?
function DigitCount(x: SmallInt): Word;
var
i: Extended;
begin
Result := 0;
i := x;
if i < 0 then
i := Power(2, 8 * SizeOf(x)) + x;
while i >= 1 do
begin
Inc(Result);
i := Trunc(i) div 2;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(DigitCount(15).ToString); // 4 (SmallInt) - 1111
ShowMessage(DigitCount(-15).ToString); // 16 (SmallInt) - 1111 1111 1111 0001
end;
|
Как перемножить 2 положительных целых числа используя операцию сдвига?
// 1. Для начала положим результат равным нулю.
// 2. Пробегаемся по разрядам A.
// 3. Если в разряде 0, ничего не делаем.
// 4. Если в разряде 1, сдвигаем B на соответствующее число разрядов и прибавляем к результату.
function ShearMultiplication(a, b: SmallInt; Digit: Byte): LongInt;
var
i: Integer;
begin
Result := 0;
for i := 0 to Digit-1 do
if a and (1 shl i) <> 0 then
Result := Result + (b shl i);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ShearMultiplication(2, 3, 3).ToString);
end;
|
Как преобразовать Integer в HEX?
// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToHex(123654));
end;
// Способ второй
function ToHex(Num: UInt64): string;
const
Hex: string = '0123456789ABCDEF';
begin
if Num = 0 then
Result := '0'
else
while Num > 0 do
begin
Result := Hex[(Num and $F) + 1] + Result;
Num := Num shr 4;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(ToHex(123654));
end;
|
|