Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2010-09-30 21:13:37 ЛС | профиль | цитата
Скажите, можно ли ограничить Memory, чтобы запоминаемые значения не выходили за установленные пределы Min/Max.
Например чтобы в рамках типа Integer, значения ниже нуля не запоминались.
В делфи нет способов, кроме установки в коде дополнительного IF ?
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2010-09-30 22:00:00 ЛС | профиль | цитата

Add(Memory,1140107,392,147)
{
}
Add(Math,9312059,343,147)
{
OpType=39
link(onResult,1140107:doValue,[])
}
карма: 26
1
Голосовали:login
Разработчик
Ответов: 26324
Рейтинг: 2147
#3: 2010-09-30 22:08:39 ЛС | профиль | цитата
login писал(а):
В делфи нет способов, кроме установки в коде дополнительного IF ?




procedure THIMath._work_doOperation39;{max}
var
op1:real;
begin
op1 := ReadReal(_Data,_data_Op1,_prop_Op1);
Res := ReadReal(_Data,_data_Op2,_prop_Op2);
_Err:=false;
if op1>Res then Res:=op1;
if _prop_ResultType = 0 then
_hi_OnEvent(_event_onResult,integer(Round(Res)))
else _hi_OnEvent(_event_onResult,Res);
end;

Аж целых два if-a

Так что, Dilma, твой пример не удовлетворяет условию поставленной задачи
карма: 22

1
Голосовали:login
Ответов: 1429
Рейтинг: 50
#4: 2010-09-30 22:11:43 ЛС | профиль | цитата
nesco, да, тоесть как я понял нет такого, это некорректный вопрос у меня.
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#5: 2010-09-30 22:16:03 ЛС | профиль | цитата
login писал(а):
это некорректный вопрос у меня

А какого ты тут мозги паришь
В любом случае, чтобы что-то ограничить, надо это что-то с чем-то сравнить. Неужели, это так сложно понять
карма: 22

0
Ответов: 1429
Рейтинг: 50
#6: 2010-09-30 22:18:57 ЛС | профиль | цитата
Надо было убедится, перед тем как наставить кучу ограничителей и потерять на этом кучу ресурсов. "За спрос не бьют в нос"
Еще в примере Dilma, скорость вдвое выше простого элемента IF

code_20848.txt
карма: 0

0
файлы: 1code_20848.txt [1.2KB] [120]
Разработчик
Ответов: 26324
Рейтинг: 2147
#7: 2010-09-30 22:21:40 ЛС | профиль | цитата
login писал(а):
скорость вдвое выше простого элемента IF

Да ты код if-a посмотри сначала, а потом сделай выводы, сам поймешь почему он так медленно работает. Самы быстрый из этих элементов условий -- элемент Case
карма: 22

0
Ответов: 1376
Рейтинг: 198
#8: 2010-09-30 22:21:44 ЛС | профиль | цитата
login писал(а):
Например чтобы в рамках типа Integer, значения ниже нуля не запоминались

Сделай для себя IC Memory из компонента Memory, в этой IC и ограничь внутренние переменные типом DWord
карма: 1

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#9: 2010-09-30 22:23:41 ЛС | профиль | цитата
foksov писал(а):
и ограничь внутренние переменные типом DWord

Очень интересно -- "как"
карма: 22

0
Ответов: 1429
Рейтинг: 50
#10: 2010-09-30 22:26:43 ЛС | профиль | цитата
nesco, всеравно маx побыстрее:
code_20849.txt

foksov, спасибо!, хоть я не сильно шарю в IC типах (это слабое место у меня), щас буду пробовать.
карма: 0

0
файлы: 1code_20849.txt [1.2KB] [128]
Ответов: 1376
Рейтинг: 198
#11: 2010-09-30 22:28:06 ЛС | профиль | цитата
При получении приводить к типу DWord, при выдаче опять возращать к Integer, придётся
карма: 1

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#12: 2010-09-30 22:30:18 ЛС | профиль | цитата
foksov, а вот теперь ответь мне вразумительно, чем Integer отличается от Cardinal (он же -- Dword)
карма: 22

0
Ответов: 1429
Рейтинг: 50
#13: 2010-09-30 22:33:58 ЛС | профиль | цитата
Коллеги, вразумите, ну вот например байт помнит от 0 до 255 значений (если я не ошибаюсь), можно ето как-то использовать?
Такого диапазона мне хватит для задачи.
карма: 0

0
Ответов: 1376
Рейтинг: 198
#14: 2010-09-30 22:46:45 ЛС | профиль | цитата
Delphi Help писал(а):
Integer -2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit

Минусом отличается
------------ Дoбавленo в 22.46:
foksov писал(а):
можно ето как-то использовать?

Конечно можно, 255=8 бит, а это 8 булевых флагов
карма: 1

0
Ответов: 1429
Рейтинг: 50
#15: 2010-09-30 22:52:02 ЛС | профиль | цитата
foksov, спасибо, похоже это то, что мне надо.
А где-то можно почитать как конвертировать из одного типа в другой в IC, ато у меня постоянно выскакивают ошибки вида:
"Incompatible types: 'integer' and 'Byte' и другие.. , и я никак не научусь переводить одни типы в другие.

карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)