Помощь - Поиск - Пользователи - Календарь
Полная версия: case of + DayOfTheWeek
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
compiler
есть урывок <<прблемного>> кода...
case DayOfTheWeek(Now) of
'1' : begin lgr:= 0; pgr:=7; end
'2' : lgr:=-1; pgr:=6;
'3' : lgr:=-3; pgr:=5;
'4' : lgr:=-4; pgr:=4;
'5' : lgr:=-5; pgr:=3;
'6' : lgr:=-6; pgr:=2;
'7' : lgr:=-7; pgr:=1;
end;

наверное надо раставить блоки... но все равно не работает...
заранее благодарен.

P.S. может case ищё эти типы не обрабатывает...
volvo
DayOfTheWeek возвращает Integer, а не Char ...
compiler
Цитата(volvo @ 3.03.2007 18:16) *

DayOfTheWeek возвращает Integer, а не Char ...

а где выход?
может надо както приабразовывать(неявное преобразование), а как?
Bokul
Цитата
наверное надо раставить блоки... но все равно не работает...

Конечно же повсюду поставить begin и end

case DayOfTheWeek(Now) of
'1' : begin lgr:= 0; pgr:=7; end;
'2' : begin lgr:=-1; pgr:=6; end;
'3' : begin lgr:=-3; pgr:=5; end;
'4' : begin lgr:=-4; pgr:=4; end;
'5' : begin lgr:=-5; pgr:=3; end;
'6' : begin lgr:=-6; pgr:=2; end;
'7' : begin lgr:=-7; pgr:=1; end;
end;



compiler
Цитата(Bokul @ 3.03.2007 18:18) *

Конечно же повсюду поставить begin и end

а как с типами?
volvo
Цитата
а где выход?


case DayOfTheWeek(Now) of
1 : begin lgr:= 0; pgr:=7; end;
2 : begin lgr:=-1; pgr:=6; end;
3 : begin lgr:=-3; pgr:=5; end;
4 : begin lgr:=-4; pgr:=4; end;
5 : begin lgr:=-5; pgr:=3; end;
6 : begin lgr:=-6; pgr:=2; end;
7 : begin lgr:=-7; pgr:=1; end;
end;

?
compiler
Цитата(volvo @ 3.03.2007 18:20) *

...?

благодарю. это мне и надо было...
TarasBer
Мне не совсем понятно, зачем здесь кейс. В данном конкретном случае можно обойтись

DOTW := DayOfTheWeek(Now)
if (DOTW >= 1) and (DOTW <= 7) then begin
Lgr := 1 - DOTW - byte(DOTW > 2);
Pgr := 8 - DOTW;
end;

.
volvo
if (DOTW >= 1) and (DOTW <= 7) then begin
то есть, возможны и другие варианты? blink.gif Тогда пример в студию, КОГДА DOTW не будет попадать в интервал 1 .. 7 ...
TarasBer
Это я перестраховался... Если убрать иф, бегин и енд, то код только выиграет, сократившись ещё на 2 строчки.
compiler
Цитата(TarasBer @ 3.03.2007 18:44) *

Мне не совсем понятно, зачем здесь кейс. В данном конкретном случае можно обойтись

у меня были подобные строчки...
lgr := 1 - DayOfTheWeek(Now);
pgr := lgr + 7;

но позже возникла необходимость вставлять в действия еще операторы(в примере они не приведины, для краткости...) + читабельность, сейчас необходимость пропала (или еще нет:) ),вобщем в разработке оба варианта...

P.S. что делает строчка
- byte(DOTW > 2)

TarasBer
DOTW > 2 - это выражение булевского типа. Оно занимает один байт. Причём этот байт равен 1, если выражение верно и 0 если нет. Это обычная ретипизация, ничего особенного.
compiler
Цитата(TarasBer @ 3.03.2007 19:32) *

ничего особенного

а зачем оно...
TarasBer
Цитата(compiler @ 3.03.2007 20:46) *

а зачем оно...

А затем, чтобы вместо вычитания из числа булевской переменной (что запрещено синтаксисом), вычитать из числа число, полученное из булевской переменной.
compiler
Цитата(TarasBer @ 3.03.2007 20:01) *

А затем, чтобы вместо вычитания из числа булевской переменной (что запрещено синтаксисом), вычитать из числа число, полученное из булевской переменной.

благодарю...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.