Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2008, 10:43   #1
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию Как экономично проверить булеву переменную?

Необходимо в зависимости от того, какой режим выбрал пользователь. Либо показывать графику на экране либо ничего не рисовать(что увеличивает скорости работы программы). Неужели, придется каждый раз проверять в месте где необходима графика: if x=true then рисуем. Получается тратится довольно много тактов. Или же сделать отдельную процедуру на выполнение алгоритма с выводом рисования. И отдельную процедуры для режима без вывода графики. Тогда получится, что процедурах будет содержаться почти один и тот же код, что тоже не желательно. Если какой-нибудь другой способ?
Иллидан вне форума Ответить с цитированием
Старый 14.10.2008, 10:50   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Можно и одной процедурой обойтись,
Код:
 procedure MyProc(gragika:boolean);
 begin
 end;
В теле процедуры опишите если grafika=true то рисуете
ну а при вызове процедуры подставляйте в параметры свой х
Код:
........
MyProc(x);
........
SERG1980 вне форума Ответить с цитированием
Старый 14.10.2008, 11:05   #3
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Ну да, но тогда придется проверять в теле процедуре каждый раз. А у меня там графика выводится раз 5 и в все разы в большом вложенном цикле.
Иллидан вне форума Ответить с цитированием
Старый 14.10.2008, 11:08   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

вы считаете что вызов процедуры и одна проверка булевой переменной более ресурсоемка чем большой вложенный цикл ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 14.10.2008, 11:24   #5
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
вы считаете что вызов процедуры и одна проверка булевой переменной более ресурсоемка чем большой вложенный цикл ?
Зачем, ну получается что-то типа такого
for i:=1 to 3100 do begin // основной цикл
....
for j:=1 to 32000 do begin //один из вложенных циклов
if условие выполняется then
if x=true then begin
canvas.textout(x,y,'text');
canvas.textout(x,y+15,'text');
end;
end;
...
end;
Иллидан вне форума Ответить с цитированием
Старый 14.10.2008, 11:55   #6
THandle
Новичок
Джуниор
 
Регистрация: 13.11.2007
Сообщений: 1
По умолчанию

Код:
procedure Draw(X: Boolean);
begin
  if not X then
    Exit;
  //Рисуем без всяких проверок
end;
Иллидан, не понятно зачем на каждой итерации цикла проверять равна ли переменная x =true. Достаточно один раз её проверить перед запуском цикла. Ведь она же не изменится.
THandle вне форума Ответить с цитированием
Старый 14.10.2008, 18:56   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
type
  Tmyproc = procedure (....);

  procedure Graf(....);
  procedure text(....);

var
  procdraw: TMyproc;

  if grag then procdraw:=graf else procdraw:=text;


  for j:=1 to......
  begin
     ......
     procdraw(.....);
     .......
  end;
От супермодера: юзай теги CODE
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось rpy3uH; 15.10.2008 в 09:09.
evg_m вне форума Ответить с цитированием
Старый 15.10.2008, 19:04   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Во первых внутри цикла каждый раз проверять не надо, как правильно заметили она не изменится, проверки лишние.

Во вторых проверка булевой переменной не идет ни в какое сравнение с процедурами вывода на экран, это капля в море, тут и говорить не о чем.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить строку? nikleb PHP 6 07.07.2008 22:04
Как обьявить переменную типа AnsiString глобально Kocapb Общие вопросы C/C++ 6 19.12.2007 05:05
Как записать и прочитать переменную моего типа из реестра? Никки Общие вопросы Delphi 2 09.12.2007 13:56
graph - Как в графическом режиме вывести переменную? nikleb Паскаль, Turbo Pascal, PascalABC.NET 4 12.04.2007 21:44
Как задать мнимую переменную AlexVI Общие вопросы Delphi 2 21.01.2007 03:00