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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.01.2013, 00:51   #1
kaktusad
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 17
Лампочка if then if then else

Имеем два оператора условия типа
if then if then else
Вопрос: к какому оператору условия будет относиться последнее Else? И как сделать чтобы Else относилось к первому условию, а во втором условии его не было? И наоборот?
kaktusad вне форума
Старый 29.01.2013, 00:53   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
к какому оператору условия будет относиться последнее Else?
Ко второму
Цитата:
И как сделать чтобы Else относилось к первому условию, а во втором условии его не было?
if then if then; else (НЕВЕРНО!)

Цитата:
И наоборот?
if then if then else

Последний раз редактировалось Вадим Мошев; 29.01.2013 в 01:04.
Вадим Мошев вне форума
Старый 29.01.2013, 01:01   #3
kaktusad
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение

if then if then; else
Почему тогда, если мы пишем обычное условие if then [что-то] else, мы перед else не ставим точку с запятой?
kaktusad вне форума
Старый 29.01.2013, 01:04   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Так, стоп, это я ошибся. Перед else точка с запятой действительно не ставится. Никогда.
Спасибо, что поправили

Цитата:
И как сделать чтобы Else относилось к первому условию, а во втором условии его не было?
if then begin if then end else

Ответ на последний вопрос, по-моему, неизменный: if then if then else

Последний раз редактировалось Вадим Мошев; 29.01.2013 в 01:08.
Вадим Мошев вне форума
Старый 29.01.2013, 01:09   #5
kaktusad
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
de///////////////
То есть нам необходимо один оператор брать в операторные скобки Бегин-Енд, и больше никак?
kaktusad вне форума
Старый 29.01.2013, 01:13   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
То есть нам необходимо один оператор брать в операторные скобки Бегин-Енд
Думаю, что да. Бывают, ИМХО, такие случаи.

Цитата:
и больше никак?
Не знаю, не задумывался.
Вадим Мошев вне форума
Старый 29.01.2013, 07:17   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Вадим прав: во-первых, перед else не ставится запяточие, во-вторых, обойтись без begin end... в принципе можно примерно так:

Код:
if ... then if ... then else else;
Если во внешнем условии в разделе else не планируется совершать никаких действий - можно туда зарядить пустой операторы (то бишь банально поставить одну точку с запятой). Имхо, подобные конструкции только усложняют код и делают его менее читабельным.

Единственная альтернатива - использование логических операторов типа and,or для объединения двух запросов типа if then, например:

Код:
if (a>1) and (a<5) then WriteLn(a) else WriteLn('Неверно');
равнозначно записи:

Код:
if a>1 then begin 
  if a<5 then WriteLn(a)
  else WriteLn('Неверно');
end
else WriteLn('Неверно');
Очевидно, что логические конструкции упрощают код и уменьшают количество писанины. НО! Не всегда целесообразно их использовать.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума
Старый 29.01.2013, 07:23   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от kaktusad Посмотреть сообщение
и больше никак?
Скобки нужны именно для того, чтобы изменить порядок, действующий по умолчанию.
Как Вы будете выполнять a*b+c, если нужно сначала произвести сложение?
Скобки - наиболее естественный и универсальный способ.
Можно, конечно, сделать a*c+a*c, но это все равно не совсем то же самое.
s-andriano вне форума
Старый 29.01.2013, 08:50   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano
Как Вы будете выполнять a*b+c, если нужно сначала произвести сложение? ...
Можно, конечно, сделать a*c+a*c, но это все равно не совсем то же самое.
согласен, совсем не то же самое!!
опечатка - подразумевалось, разумеется a*b+a*c


в остальном - согласен.


Цитата:
Сообщение от kaktusad
То есть нам необходимо один оператор брать в операторные скобки Бегин-Енд, и больше никак?
kaktusad, что же касается операторных скобок (begin ... end) - то назовите хотя бы ОДНУ причину, по которой Вас этот способ не устраивает?!
Наоборот, я иногда сознательно использую операторные скобки там, где они не нужны (один оператор в цикле или в ветке условного оператора), именно для того, чтобы повысить наглядность (читаемость) программы!
Serge_Bliznykov вне форума
Старый 30.01.2013, 02:50   #10
kaktusad
Пользователь
 
Регистрация: 16.11.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
согласен, совсем не то же самое!!
опечатка - подразумевалось, разумеется a*b+a*c


в остальном - согласен.


kaktusad, что же касается операторных скобок (begin ... end) - то назовите хотя бы ОДНУ причину, по которой Вас этот способ не устраивает?!
Наоборот, я иногда сознательно использую операторные скобки там, где они не нужны (один оператор в цикле или в ветке условного оператора), именно для того, чтобы повысить наглядность (читаемость) программы!
Не устраивало как раз таки скобки для одного оператора. Хотел узнать, есть ли более универсальный способ, так как это обычные условия... В сообщениях выше уже получил всю необходимую информацию.
kaktusad вне форума
Закрытая тема


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