Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.06.2011, 09:37
Молоток Молоток вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 4
Репутация: 10
По умолчанию синтаксис CASE

Привет специалисты программирования. Для оптимизации нижеследующего кода необходимо перевести в case, но у меня не получается (нехватает знания). Если у кого найдется желание, дайте немного знания новичку. Спасибо всем, кто заглянул.

Код:
if w1='1' then
     begin
      wNach:=0;
      wKon:=6;
     end;
    if w1='2' then
     begin
      wNach:=1;
      wKon:=5;
     end;
    if w1='3' then
     begin
      wNach:=2;
      wKon:=4;
     end;
    if w1='4' then
     begin
      wNach:=3;
      wKon:=3;
     end;
    if w1='5' then
     begin
      wNach:=4;
      wKon:=2;
     end;
    if w1='6' then
     begin
      wNach:=5;
      wKon:=1;
     end;
    if w1='7' then
     begin
      wNach:=6;
      wKon:=0;
     end;
Ответить с цитированием
  #2  
Старый 02.06.2011, 09:43
Молоток Молоток вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 4
Репутация: 10
По умолчанию

сделал вот так, но выдает ошибку oridinal type required
Код:
case w1 of
     1: begin wNach:=0; wKon:=6; end;
     2: begin wNach:=1; wKon:=5; end;
     3: begin wNach:=2; wKon:=4; end;
     4: begin wNach:=3; wKon:=3; end;
     5: begin wNach:=4; wKon:=2; end;
     6: begin wNach:=5; wKon:=1; end;
     7: begin wNach:=6; wKon:=0; end
     else showmessage('Ошибка');
    end;
Ответить с цитированием
  #3  
Старый 02.06.2011, 10:18
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

case со строками не работает.
Код:
var
  Value: Integer;

if TryStrToInt(w1, Value) then
case Value of
  1: begin wNach:=0; wKon:=6; end;
  2: begin wNach:=1; wKon:=5; end;
  3: begin wNach:=2; wKon:=4; end;
  4: begin wNach:=3; wKon:=3; end;
  5: begin wNach:=4; wKon:=2; end;
  6: begin wNach:=5; wKon:=1; end;
  7: begin wNach:=6; wKon:=0; end
else
  ShowMessage('Ошибка');
end;

Последний раз редактировалось ryderx34, 02.06.2011 в 10:33.
Ответить с цитированием
  #4  
Старый 02.06.2011, 10:38
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от Молоток
необходимо перевести в case
Это довольно частая ошибка новичков - предлагать странные решения. "Искусство ради искусства"? Вы хотите наверняка упростить код, а для этого надо проанализировать алгоритм. Во-первых, как вы и хотите, case поможет:
Код:
  case StrToInt(w1) of
    1:
    begin
      wNach:=0;
      wKon:=6;
    end;
    2:
...
  end;
Но анализ кода говорит нам, что можно обойтись одной формулой, без case:
Код:
wNach:= StrToInt(w1) - 1;
wKon:= 7 - StrToInt(w1);
Если w1 может принимать другие значения, то это можно проверить перед формулами.
Ответить с цитированием
  #5  
Старый 02.06.2011, 11:20
Молоток Молоток вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 4
Репутация: 10
По умолчанию

Но анализ кода говорит нам, что можно обойтись одной формулой, без case:
Код:
wNach:= StrToInt(w1) - 1;
wKon:= 7 - StrToInt(w1);
Если w1 может принимать другие значения, то это можно проверить перед формулами.[/quote]

Спасибо за быстрый ответ .
Ответить с цитированием
  #6  
Старый 02.06.2011, 11:29
Молоток Молоток вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 4
Репутация: 10
По умолчанию

Уважаемые гуру. Есть задачка, которую несколько дней не могу решить. Видно такие задачки Вам ничего не стоят, помогите у кого будет желание.
Имеется DateTimePicker, дата которого равняется системной дате. Есть таблица с полей Дата_Фикс. При нажатии на кнопку в Grid-е должно выводится только те строки таблицы, которые входят в эту неделю, то есть NachNed-DateTimePicker.date и KonNed+DateTimePicker.date

Последний раз редактировалось Молоток, 02.06.2011 в 15:23.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter