Форум «Всё о Паскале» _ Задачи _ case of + DayOfTheWeek
Автор: compiler 3.03.2007 19:05
есть урывок <<прблемного>> кода...
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 3.03.2007 19:16
DayOfTheWeek возвращает Integer, а не Char ...
Автор: compiler 3.03.2007 19:18
Цитата(volvo @ 3.03.2007 18:16)
DayOfTheWeek возвращает Integer, а не Char ...
а где выход? может надо както приабразовывать(неявное преобразование), а как?
Автор: Bokul 3.03.2007 19:18
Цитата
наверное надо раставить блоки... но все равно не работает...
Конечно же повсюду поставить 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 3.03.2007 19:19
Цитата(Bokul @ 3.03.2007 18:18)
Конечно же повсюду поставить begin и end
а как с типами?
Автор: volvo 3.03.2007 19:20
Цитата
а где выход?
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 3.03.2007 19:24
Цитата(volvo @ 3.03.2007 18:20)
...?
благодарю. это мне и надо было...
Автор: TarasBer 3.03.2007 19:44
Мне не совсем понятно, зачем здесь кейс. В данном конкретном случае можно обойтись
DOTW := DayOfTheWeek(Now) if (DOTW >= 1) and (DOTW <= 7) then begin Lgr := 1 - DOTW - byte(DOTW > 2); Pgr := 8 - DOTW; end;
.
Автор: volvo 3.03.2007 19:50
if (DOTW >= 1) and (DOTW <= 7) then begin
то есть, возможны и другие варианты? Тогда пример в студию, КОГДА DOTW не будет попадать в интервал 1 .. 7 ...
Автор: TarasBer 3.03.2007 19:57
Это я перестраховался... Если убрать иф, бегин и енд, то код только выиграет, сократившись ещё на 2 строчки.
Автор: compiler 3.03.2007 20:29
Цитата(TarasBer @ 3.03.2007 18:44)
Мне не совсем понятно, зачем здесь кейс. В данном конкретном случае можно обойтись
у меня были подобные строчки...
lgr := 1 - DayOfTheWeek(Now); pgr := lgr + 7;
но позже возникла необходимость вставлять в действия еще операторы(в примере они не приведины, для краткости...) + читабельность, сейчас необходимость пропала (или еще нет:) ),вобщем в разработке оба варианта...
P.S. что делает строчка
- byte(DOTW > 2)
Автор: TarasBer 3.03.2007 20:32
DOTW > 2 - это выражение булевского типа. Оно занимает один байт. Причём этот байт равен 1, если выражение верно и 0 если нет. Это обычная ретипизация, ничего особенного.
Автор: compiler 3.03.2007 20:46
Цитата(TarasBer @ 3.03.2007 19:32)
ничего особенного
а зачем оно...
Автор: TarasBer 3.03.2007 21:01
Цитата(compiler @ 3.03.2007 20:46)
а зачем оно...
А затем, чтобы вместо вычитания из числа булевской переменной (что запрещено синтаксисом), вычитать из числа число, полученное из булевской переменной.
Автор: compiler 3.03.2007 21:03
Цитата(TarasBer @ 3.03.2007 20:01)
А затем, чтобы вместо вычитания из числа булевской переменной (что запрещено синтаксисом), вычитать из числа число, полученное из булевской переменной.