Помощь - Поиск - Пользователи - Календарь
Полная версия: проверка условия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rash
var
a,b,c,d : integer;
begin
a:=1 ; b:=2 ; c:=3 ; d:=4;
if a>b then
if c<d then
if c<0 then
c:=0
else
a:=b; {a равно 1}

Вопрос: почему 'а равно 1' а например не 2 и почему условие 'if a>b then' проверяется в 'a:=b;'
volvo
Rash, ты чего добиться-то хочешь? Вот, посмотри, как этот же код выглядит при соблюдении правил форматирования исходников. Так намного проще понять, где именно проблема:
var
a, b, c, d: integer;
begin
a:=1 ; b:=2 ; c:=3 ; d:=4;
if a>b then
if c<d then

if c<0 then c:=0
else a:=b; {a равно 1}

{ если c >= d, то придем сюда }
{ если a <= b то придем сюда }
end.

То есть, в твоем случае A < B, и компилятор просто заканчивает проверку, не производя никаких действий... Не забывай, что Else ВСЕГДА относится к последнему открытому If (изменить этот порядок можно только с помощью Begin ... End)
Rash
Просто хочу понять логику компилятора.
Разве после строчки
if a>b then {false}
компилятор не переходит к следующему условию?
if c<d then
и потом к
if c<d then

просто когда я нибираю этот код в паскале и приписывю строчку writeln(a)
то в зависимости от знака в строке if a>b then значение исходного А будет зависеть от этого знака
если a<b то а=1 ; a>b то a=2 ; следовательно после присвоения a:=b проверяется условие if a>b then???
или a:=b не выполняется вообще?.. wacko.gif
volvo
Цитата(Rash @ 31.01.2006 13:19)

Разве после строчки
if a>b then {false}
компилятор не переходит к следующему условию?
if c<d then
и потом к
if c<d then

smile.gif Нет, не переходит... Как только компилятор встречает False - он тут же переходит на Else этой же ветки If, или на оператор, следующий ЗА текущей веткой, если Else отсутствует...

Цитата(Rash @ 31.01.2006 13:19)
или a:=b не выполняется вообще?
В твоем коде с теми исходными данными, которые ты дал - не выполняется... После первой же неудачи (A > B вернуло False) компилятор выходит на конец программы...
Rash
Тоесть когда условие if a>b then возвращается false ,программа сразу завершается . Часть else относится к if c<0 , а условие if c<0 не рассматривается в силу того, что первое условие if a>b then false rolleyes.gif
Rash
volvo good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.