Delphi (Delphi 2005) で他の定数に基づいた const を定義しようとしていますが、Delphi はそれが定数式ではないことに不満を持っています。これは私のコードがどのように見えるかです:
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = trunc(sqrt(Xpoints*Ypoints));
var
myArray : array[1..ArraySize] of integer;
ArraySize = Xpoints*Ypoints を実行できますが、sqrt が問題を引き起こします。アイデアは、定数 Xpoints と Ypoints によって配列のサイズを変更したいということです。私はこのようなことができます:
program myProgram;
const
sqrtXpoints = 4.472135956;
sqrtYpoints = 5.47722557506;
Xpoints = trunc(sqrtXpoints*sqrtXpoints);
Ypoints = trunc(sqrtYpoints*sqrtYpoints);
ArraySize = trunc(sqrtXpoints*sqrtYpoints);
var
myArray : array[1..ArraySize] of integer;
切り捨ての平方根の値を少し過大評価するように注意してください。sqrtXpoints または sqrtYpoints を変更すると、すべてが正しく更新されますが、このアプローチはとても... ばかげているようです。
一時的な修正として、次のように定数を自分で評価できます。
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = 24;
var
myArray : array[1..ArraySize] of integer;
しかし、X 点または Y 点を変更すると ArraySize が自動的に更新されないため、これは好きではありません。
コンパイラは、上記の例のようなものや、次のようなさらに単純なもののために、コンパイル時に別の定数の数学関数として定義された定数を評価する方法を知っている必要があるようです:
const
pi = 4.0*arctan(1.0);
しかし、私はそれを受け入れることができません。助言がありますか?よろしくお願いします。