Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несколько значений [D6, XP]


Sonic90 ©   (2007-06-25 22:20:00) 

Подскажите пожалуйста как сделать чтобы если допустим переменная I равна Значению1 или Значению2 тогда выполнить определлённое действие(чтобы не писать два раза if I=... then)?


zorik   (2007-06-26 10:26:00) [1]

case x of
 1..10, 25: ShowMessage('1-10,25')
 else ShowMessage('else');
end;


Однокамушкин   (2007-06-26 08:52:00) [2]


> Германн ©   (26.06.07 02:01) [12]

Тем не менее, множества с Integer'ом действительно плохо сочетаются, можно получить трудноуловимые ошибки...

var
 X: Integer;
begin
 X := 65535;
 if X in [65530, 65535] then
   ShowMessage('Yes');
end;


Это вообще не откомпилируется - Constant expression violates subrange bounds...

var
 X, A, B: Integer;
begin
 X := 65635;
 A := 1;
 B := 65535;
 {$R-}
 // По умолчанию эта опция отключена
 if X in [A, B] then
   ShowMessage('Yes');
end;


А это откомпилируется, но условие будет считаться невыполненным, т.к. из-за ограниченности размера множества значение B, выходящее за рамки диапазона, будет проигнорировано, и проверка будет эквивалентна if X in [1]... Правда, если включить $R+, будет ошибка времени исполнения...

Так что когда речь идёт об Integer - только if (X = A) or (X = B) then, а множества - это только для Byte...


Кщд   (2007-06-26 08:28:00) [3]


> если же логическая, то тогда тоже можно через нормальную
> дезьюнктивную форму...

а почему не КНФ, интересно?)
а где ссылка на теорему вычислимости на моделях?))


Германн   (2007-06-26 02:01:00) [4]


> Плохиш ©   (25.06.07 23:05) [8]
>
>
> > Правильный Вася   (25.06.07 22:55) [7]
> >
> > >  А там скобочки точно круглые?
> >
> > нет, квадратные
> > это SQL влез
>
> Так ещё стоит уточнить, что только для ординарных типов,
>  Integer к коим не относиться...
>

Это, простите как? Неужели у меня "палёная" справка?
Ordinal types include integer, character, Boolean, enumerated, and subrange types.
:)


Sonic90   (2007-06-26 00:52:00) [5]

Всем спасибо,уже сам разобрался.


Malik   (2007-06-25 23:24:00) [6]

Просто хотелось поучаствовать:)))
можно исследовать список возможных значений на какую-либо математическую закономерность (если они числа) и пишеш одно условие....
если же логическая, то тогда тоже можно через нормальную дезьюнктивную форму...


Anatoly Podgoretsky   (2007-06-25 23:10:00) [7]

> Sonic90  (25.06.2007 22:20:00)  [0]

Или по английски OR


Плохиш   (2007-06-25 23:05:00) [8]


> Правильный Вася   (25.06.07 22:55) [7]
>
> >  А там скобочки точно круглые?
>
> нет, квадратные
> это SQL влез

Так ещё стоит уточнить, что только для ординарных типов, Integer к коим не относиться...


Правильный Вася   (2007-06-25 22:55:00) [9]


>  А там скобочки точно круглые?

нет, квадратные
это SQL влез ;)


Kolan   (2007-06-25 22:52:00) [10]

> if i in( 1, 2, 3 ) then

О я не знал… Как-то странно выглядит… А там скобочки точно круглые?


Правильный Вася   (2007-06-25 22:42:00) [11]

if i in( 1, 2, 3 ) then


Плохиш   (2007-06-25 22:39:00) [12]


> чтобы не писать два раза if I=... then)?

прочитай про or


Johnmen   (2007-06-25 22:39:00) [13]

А где тут два раза if?


Kolan   (2007-06-25 22:38:00) [14]

> чтобы не писать два раза if I=… then

case


Kostafey   (2007-06-25 22:33:00) [15]

Можно использовать множества.


Наверх

Титульная страница Поиск, карта сайта Написать письмо