Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ case of + DayOfTheWeek

Автор: compiler 3.03.2007 23: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 23:16

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

Автор: compiler 3.03.2007 23:18

Цитата(volvo @ 3.03.2007 18:16) *

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

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

Автор: Bokul 3.03.2007 23: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 23:19

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

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

а как с типами?

Автор: volvo 3.03.2007 23: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 23:24

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

...?

благодарю. это мне и надо было...

Автор: TarasBer 3.03.2007 23: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 23:50

if (DOTW >= 1) and (DOTW <= 7) then begin
то есть, возможны и другие варианты? blink.gif Тогда пример в студию, КОГДА DOTW не будет попадать в интервал 1 .. 7 ...

Автор: TarasBer 3.03.2007 23:57

Это я перестраховался... Если убрать иф, бегин и енд, то код только выиграет, сократившись ещё на 2 строчки.

Автор: compiler 4.03.2007 0:29

Цитата(TarasBer @ 3.03.2007 18:44) *

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

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

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

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


Автор: TarasBer 4.03.2007 0:32

DOTW > 2 - это выражение булевского типа. Оно занимает один байт. Причём этот байт равен 1, если выражение верно и 0 если нет. Это обычная ретипизация, ничего особенного.

Автор: compiler 4.03.2007 0:46

Цитата(TarasBer @ 3.03.2007 19:32) *

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

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

Автор: TarasBer 4.03.2007 1:01

Цитата(compiler @ 3.03.2007 20:46) *

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

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

Автор: compiler 4.03.2007 1:03

Цитата(TarasBer @ 3.03.2007 20:01) *

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

благодарю...