Помощь - Поиск - Пользователи - Календарь
Полная версия: 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) *

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

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