![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Rash |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
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 |
![]()
Сообщение
#2
|
Гость ![]() |
Rash, ты чего добиться-то хочешь? Вот, посмотри, как этот же код выглядит при соблюдении правил форматирования исходников. Так намного проще понять, где именно проблема:
var То есть, в твоем случае A < B, и компилятор просто заканчивает проверку, не производя никаких действий... Не забывай, что Else ВСЕГДА относится к последнему открытому If (изменить этот порядок можно только с помощью Begin ... End) |
Rash |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Просто хочу понять логику компилятора.
Разве после строчки 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 не выполняется вообще?.. ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(Rash @ 31.01.2006 13:19) Разве после строчки if a>b then {false} компилятор не переходит к следующему условию? if c<d then и потом к if c<d then ![]() Цитата(Rash @ 31.01.2006 13:19) или a:=b не выполняется вообще? В твоем коде с теми исходными данными, которые ты дал - не выполняется... После первой же неудачи (A > B вернуло False) компилятор выходит на конец программы... |
Rash |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Тоесть когда условие if a>b then возвращается false ,программа сразу завершается . Часть else относится к if c<0 , а условие if c<0 не рассматривается в силу того, что первое условие if a>b then false
![]() |
Rash |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
volvo
![]() |
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 11:18 |