IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> проверка условия
Rash
сообщение 31.01.2006 13:51
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Роман

Репутация: -  0  +


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;'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
volvo
сообщение 31.01.2006 14:06
Сообщение #2


Гость






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
сообщение 31.01.2006 14:19
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Роман

Репутация: -  0  +


Просто хочу понять логику компилятора.
Разве после строчки
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.01.2006 14:25
Сообщение #4


Гость






Цитата(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
сообщение 31.01.2006 14:44
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Роман

Репутация: -  0  +


Тоесть когда условие if a>b then возвращается false ,программа сразу завершается . Часть else относится к if c<0 , а условие if c<0 не рассматривается в силу того, что первое условие if a>b then false rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rash
сообщение 31.01.2006 14:59
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Роман

Репутация: -  0  +


volvo good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.06.2025 11:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"