{$IFDEF DEBUG}
{$ENDIF}
docwiki.embarcadero.com/RADStudio/Tokyo/en/Conditi... ~H~otkey
.@user
var // ну или const
masMask: array[1..3, 1..3] of string = (
( '11', '12', '13' ), ( '21', '22', '23' ), ( '31', '32', '33' )
);
type TSomeTable = array[1..3, 1..3] of string;
const masStart: TSomeTable = …;
var masMask : TSomeTable;
masMask := masStart;
months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec);
— это не массив! Это перечисляемый тип. Кстати, из-за правил пересечения идентификаторов очень не советую писать типы и перечисляемые константы без венгерской записи, к тому же название months сбивает с толку. Лучше будет TMonth = (monJan, monFeb, …);
. IfThen(Odd(n), -1, 1)
x2 := Sqr(x);
...
yNew := -yOld * x2 / ((n - 1) * n);
TForm1 = class(TForm)
...
private
MyLabel,MyLabel2:TLabel; // тут они занулятся автоматически, да и фэншуйнее
...
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
...
MyLabel2.Caption:='3';
Invalidate; // Запросить перерисовку
end;
procedure TForm1.FormPaint(Sender: TObject); // Событие OnPaint
begin
if MyLabel <> nil then
with Canvas do begin
Pen.Color:=clRed;
MoveTo(MyLabel.left,MyLabel.top+(MyLabel.Font.Size+MyLabel.Font.Size div 2) div 2);
LineTo(MyLabel2.left,MyLabel2.top+(MyLabel2.Font.Size+MyLabel2.Font.Size div 2) div 2);
end;
end;
MyLabel := TLabel.Create(Form1);
MyLabel.Parent := Form1;
Лучше использовать Self, а не Form1.Form1: TForm1;
p,c,z,j:integer;
Если бы эти переменные были нужны, лучше было бы их внести в Form1. Если бы…function rez(p:integer): integer;
begin
c:=p+20;
end;
Мы тут, очевидно, рассчитываем габариты наших надписей. А нельзя это сделать без побочных эффектов?q := X1 / X2;
if abs(q - Round(q)) < 1e-5 then ...
type
TRatio = record
Num, Den : integer;
end;
var
X1 : integer = 100;
X2 : integer = 20;
if X1 mod X2 = 0 then ...
type
TDecFloat = record
mantissa : uint64; // например, от 1e17 до 1e18
order : integer;
sign : boolean;
end;
function NormalizeEol(const s : string) : string;
begin
Result := StringReplace(s, #13#10, #10, [rfReplaceAll]);
Result := StringReplace(Result, #13, #10, [rfReplaceAll]);
Result := StringReplace(Result, #10, #13#10, [rfReplaceAll]);
end;
uses
соответствующую форму» из интерфейса в implementation. Такие циклические обращения разрешены.Form3.Create(self);
Form3 := TForm3.Create(self);
type
TCell = class
public
info: TReki;
next, previous: TCell;
end;
TList = TCell;
TPosition = TCell;
Cell cell
, а в Паскале cell : Cell
нельзя, он регистронезависимый. Общепринято, что тип начинается на T, указатель — на P. Иногда добавляют другие префиксы (event — Ev, dynamic array —Da), но типы без префикса — плохой тон. enum {
DOUBLE_MANTISSA_BITS = 52,
DOUBLE_MIN_EXPONENT = -1022,
DOUBLE_EXPONENT_BIAS = 1023,
};
#define UC8x(X,Y,Z,T) (static_cast<uint64_t>(0x##X##Y##Z##T##ULL))
#define DOUBLE_MANTISSA_MASK UC8x(000f, ffff, ffff, ffff)
#define DOUBLE_EXPONENT_MASK UC8x(7ff0, 0000, 0000, 0000)
#define DOUBLE_EXPONENT_MASK_HI UC4x(7ff0, 0000)
#define DOUBLE_IMPLICIT_BIT (DOUBLE_MANTISSA_MASK + 1)
union DoubleInt {
double asDouble;
uint64_t asInt;
struct {
uint32_t lo, hi;
} asIntel;
....
}
int DoubleInt::exponent() const
{
return static_cast<int>((
static_cast<int64_t>(asInt & DOUBLE_EXPONENT_MASK) >>
(DOUBLE_MANTISSA_BITS)) - DOUBLE_EXPONENT_BIAS);
}
uint64_t DoubleInt::unsafeMantissa() const
{
int ex = exponent();
uint64_t bits = asInt & DOUBLE_MANTISSA_MASK;
return (ex == DOUBLE_MIN_EXPONENT - 1)
? bits << 1
: bits | DOUBLE_IMPLICIT_BIT;
}
bool DoubleInt::isPreciseInteger() const
{
// функцию isFinite() намеренно упустил, ибо она есть «в коробке» Delphi.
// А вот в Си++ есть не во всех реализациях…
return isFinite()
&& (asDouble == 0.0 ||
DOUBLE_MANTISSA_BITS - numberOfTrailingZeros(unsafeMantissa()) <= exponent());
}
int math::numberOfTrailingZeros(uint64_t i)
{
uint32_t x, y;
if (i == 0u) return 64;
int n = 63;
y = static_cast<uint32_t>(i);
if (y != 0) { n = n -32; x = y; } else x = (int)(i >> 32);
y = x << 16; if (y != 0) { n = n -16; x = y; }
y = x << 8; if (y != 0) { n = n - 8; x = y; }
y = x << 4; if (y != 0) { n = n - 4; x = y; }
y = x << 2; if (y != 0) { n = n - 2; x = y; }
return n - ((x << 1) >> 31);
}
bool math::isPreciseInteger(double x)
{
DoubleInt di;
di.asDouble = x;
return di.isPreciseInteger();
}