![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
оператор case [D6, WinXP]
PIF © (2005-06-30 13:45:00)Здравствуйте! Скажите пожалуйста как правильно записать следующий код:
case volum of
0.025: error_V:=0.1;
0.05: error_V:=0.1;
0.1: error_V:=0.2;
0.2: error_V:=0.2;
0.25: error_V:=0.2;
0.5: error_V:=0.3;
1: error_V:=0.6;
else error_v:=0;
end;
Выдает ошибку:
[Error] Unit1.pas(569): Ordinal type required
[Error] Unit1.pas(570): Incompatible types: 'Integer' and 'Extended'
Kolan (2005-06-30 14:04:00) [1]
> мне эту конструкцию в нескольких местах
Для этого есть функции.
ferr (2005-06-30 14:04:00) [2]case CaseDouble(vol,[0.025,0.05,0.1,0.2,0.25,0.5,0.1]) of
1: error_V:=0.1;
2: error_V:=0.1;
3: error_V:=0.2;
4: error_V:=0.2;
5: error_V:=0.2;
6: error_V:=0.3;
7: error_V:=0.6;
else error_v:=0;
end;
ferr (2005-06-30 13:56:00) [3]Для конкретного случая [4], иначе [5].
PIF (2005-06-30 13:54:00) [4]через if'ы очень громоздко получается, т.к. мне эту конструкцию в нескольких местах кода нужно применять, нельзя ли каким-нибудь другим способом
dolmat (2005-06-30 13:53:00) [5]case round(volum*1000) of ьщжет и выход?
Digitman (2005-06-30 13:52:00) [6]case Round(volum * 1000) of
25: error_V:=0.1;
50: error_V:=0.1;
100: error_V:=0.2;
200: error_V:=0.2;
250: error_V:=0.2;
500: error_V:=0.3;
1000: error_V:=0.6;
else error_v:=0;
end;
ferr (2005-06-30 13:52:00) [7]
function CaseDouble(const a:double;const d:array of double):integer;
var
i:integer;
begin
Result:=0;
for i:=Low(d) to High(d) do
if Abs(d[i]-a)<0.0000000001 then
begin
Result:=i+1;
break;
end;
end;
begin
writeln(CaseDouble(2.5,[1,2.5,3]));
readln;
begin...end (2005-06-30 13:51:00) [8]И ещё. Если volum -- это вещественное число (с плавающей запятой), то его (если оно не может быть представлено в виде конечной двоичной дроби) следует проверять на равенство вещественной константе с учётом возможной погрешности.
Просто Джо (2005-06-30 13:51:00) [9]Оператор case позволяет использовать только целочисленные и приводимые к ним значения. Придется переделать в if then else. Ну, это если "без извратов".
begin...end (2005-06-30 13:48:00) [10]Поскольку volum не является переменной порядкового типа, case надо заменить на if'ы.