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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2012, 22:29   #1
Emperator12
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 13
По умолчанию конструкция if else

Код:
if checkbox1.Checked = true then begin
work:= true;
doChek1(log,pass, work, forum1);
end else if checkbox1.Checked = false then  begin
work:= false;
doChek1(log,pass, work, forum1);
Код:
if work = true and checkbox5.checked = false then begin
   showmessage('Записать в файл без тегов');
   end else if work = true and checkbox5.checked = true then begin
   showmessage('Записать в файл с тегами');
   end else if work = false and checkbox5.checked  = false then begin
   showmessage('Ничего не делать');
   end;
ДАЖЕ Когда оба чек боксы не отмечены, пишет, что мол записать в файл с тегами. Почему ? где ошибка ?
Emperator12 вне форума Ответить с цитированием
Старый 25.09.2012, 22:51   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Попробуйте расставить скобки в логических выражениях, по-моему "and" старше "=".
(Профит http://informatics.mccme.ru/moodle/m...&chapterid=255)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 25.09.2012 в 22:53.
BDA на форуме Ответить с цитированием
Старый 25.09.2012, 23:04   #3
Emperator12
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Попробуйте расставить скобки в логических выражениях, по-моему "and" старше "=".
(Профит http://informatics.mccme.ru/moodle/m...&chapterid=255)
Чтоо ? "=" - оператор присвоения. "and" - логический оператор.
Как "and" может быть старше "=" ?
Emperator12 вне форума Ответить с цитированием
Старый 25.09.2012, 23:05   #4
Emperator12
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 13
По умолчанию

Скобки ( ) помогли, кстати.
Emperator12 вне форума Ответить с цитированием
Старый 25.09.2012, 23:07   #5
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Причем тут присвоение.
= - это операция отношения
И как видно по ссылке, операция and имеет приоритет перед =, а значит и выполняется сначала and
Voody вне форума Ответить с цитированием
Старый 25.09.2012, 23:08   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

надо логические выражения обязательно брать в скобки
вот так:
Код:
if (work = true) and (checkbox5.checked = false) then begin
   end else if (work = true) and (checkbox5.checked = true) then begin
   showmessage('Записать в файл с тегами');
   end else if (work = false) and (checkbox5.checked  = false) then begin ...
в данном случае вы имеет дело с логическими переменными, поэтому можно записывать прямо так:
Код:
if work and Not checkbox5.checked then begin
   showmessage('Записать в файл без тегов');
   end 
   else if work and checkbox5.checked then begin
   showmessage('Записать в файл с тегами');
   end 
   else if Not work and Not checkbox5.checked then begin
   showmessage('Ничего не делать');
   end;

ну и ещё. обратите внимание, что, очевидно, один из вариантов в вашем примере вообще не обрабатывается (это когда work - false и checked - true)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2012, 23:18   #7
Emperator12
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение


ну и ещё. обратите внимание, что, очевидно, один из вариантов в вашем примере вообще не обрабатывается (это когда work - false и checked - true)
Такого варианта у меня не может быть. Ну то есть если work - false и checked - true, тогда ничего не нужно делать.
Всем спасибо.
Emperator12 вне форума Ответить с цитированием
Старый 26.09.2012, 08:19   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Ну то есть если work - false и checked - true, тогда ничего не нужно делать.
ну, судя по этому коду:
Цитата:
Код:
if Not work and Not checkbox5.checked then begin
   showmessage('Ничего не делать');
в случае, когда work - false и checked - false - тоже ничего не надо делать!
поэтому Ваш код легко вырождается в такой:
Код:
if work then begin
   if checkbox5.checked then
     showmessage('Записать в файл с тегами')
   else
     showmessage('Записать в файл без тегов');
end
else
    showmessage('Ничего не делать');
это и проще, и нагляднее и надёжнее. Рекомендую!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конструкция if else Emperator12 Общие вопросы Delphi 2 23.09.2012 11:36
Конструкция из if else в Delphi freeeeez Помощь студентам 4 03.02.2011 01:10
Конструкция if GBAXA Общие вопросы Delphi 5 04.08.2010 15:12
Конструкция try..except anGeee Общие вопросы Delphi 2 21.05.2009 11:34
Конструкция файла SunKnight Общие вопросы Delphi 4 23.04.2008 08:26