Консультация № 191193
27.06.2017, 16:03
0.00 руб.
0 24 1
Здравствуйте! У меня возникли сложности с таким вопросом:
даны переменные a, b и с.
Необходимо присвоить переменной с
значение переменной a, если переменная a отрицательна и переменная b положительна,
в противном случае значение переменной b.
Я написала следующий вариант:
if (a<0&&b>0) с=a;
else с = b;
Правильно?
Но спорим еще про такой вариант проверки:
if (b>0)
if (a<0 ) с=a;
else с = b;
К какому условию в данном случае относится else?
Разве в данном случае не вложенный if ?
Я читаю это так - если b>0 и если a<0 , то присвоить с=a.
Если b<0, то с = b.
Здесь else, мне кажется, распространяется только на первый if ?
Рассудите, пожалуйста!

Обсуждение

давно
Посетитель
7438
7205
27.06.2017, 16:58
общий
27.06.2017, 17:26
Адресаты:
if (a<0&&b>0) с=a;
else с = b;
Правильно?
Правильно
Но спорим еще про такой вариант проверки:
Чтобы не было вопросов, полезно писать скобки.
Написанный вариант соответствует:
Код:
if (b>0)
{
if (a<0 )
{
с=a;
}
else
{
с = b;
}
}

Так будет понятнее?
Конструкция, вообще говоря, не соответствует первому варианту
Если b будет <= 0, то c останется неопределенным!

Все же отвечу на вопросы:
К какому условию в данном случае относится else?
ко второму, if (a<0)
Разве в данном случае не вложенный if ?
вложенный-то вложенный, только работает не так
Я читаю это так - если b>0 и если a<0 , то присвоить с=a.
В данном случае, да
Если b<0, то с = b.
Не-а :)
Здесь else, мне кажется, распространяется только на первый if ?
Как уже сказал, else относится ко второму if
Правильно будет так:
Код:
if (b>0)
{
if (a<0 )
{
с=a;
}
else
{
с = b;
}
}
else
{
с = b;
}
Или так:
Код:
if (b>0)
if (a<0 )
с=a;
else
с = b;
else
с = b;
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
27.06.2017, 17:11
общий
Адресаты:
Вот Вам ребус:
Код:
if(???)aaaa
if(???)bbbb
if(???)cccc
else dddd
else eeee



Цитата: Лысков Игорь Витальевич
Чтобы не было вопросов, полезно писать скобки
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
27.06.2017, 17:16
общий
Адресаты:
Между прочим, код ошибочен
Последнее else eeee ни к чему не относится , а почему, пусть автор вопроса ответит
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 17:32
общий
Адресаты:
Можно еще так записать:
Код:
c = (a<0&&b>0) ? a : b;
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 17:53
общий
Адресаты:
Интереснее записать вот так:
Код:
if(???)
if(???)
if(???)cccc
else dddd
else eeee
Расставьте скобочки...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 17:54
общий
Адресаты:
Последнее задание, насчет скобочек - Вам
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401172
78
27.06.2017, 18:01
общий
27.06.2017, 18:02
Цитата: Лысков Игорь Витальевич
Чтобы не было вопросов, полезно писать скобки.[q=7438]

В том-то и дело, что оппонент настаивает, что видел такой вариант без скобок, потому я и думала, что пропустила какое-то особое правило.

Цитата: Лысков Игорь Витальевич
Как уже сказал, else относится ко второму if[q=7438]

Спасибо, сейчас буду знать, раз не все расставляют фигурные скобки - то явно пригодится.

Цитата: Лысков Игорь Витальевич
Конструкция, вообще говоря, не соответствует первому варианту
Если b будет <= 0, то c останется неопределенным![q=7438]

Да! Получается все равно не верно. Я сначала подумала, что если пишут без фигурных скобок, то последнее else чудесным образом закрывает оба if , я ведь еще новичок, думала вдруг какие-то тонкости есть. Но вижу, что нет.

Цитата: Лысков Игорь Витальевич
c = (a<0&&b>0) ? a : b;

Оооо! Тернарный оператор обожаю, как я про него не подумала

Цитата: Лысков Игорь Витальевич
Между прочим, код ошибочен
Последнее else eeee ни к чему не относится , а почему, пусть автор вопроса ответит

Сейчас буду думать, с наскоку не скажу к сожалению, без фигурных скобок еще как-то, но без точки с запятой....вообще не понимаю
Но я не сдаюсь, не подсказывайте!



давно
Посетитель
7438
7205
27.06.2017, 18:21
общий
Адресаты:
но без точки с запятой....вообще не понимаю
Считайте, что точка с запятой есть Под буковками aaa, bbb, ... понимаются любой оператор с точкой с запятой в конце...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401172
78
27.06.2017, 18:32
общий
Цитата: Лысков Игорь Витальевич
if(???)
if(???)
if(???)cccc
else dddd
else eeee


Так если для трех условий только одно действие, то и вариант ИНАЧЕ один.
Рассуждаю - если три условия выполнены, напечатать "ДА", если не выполнены, напечатать "НЕТ". Либо условия выполнены, либо нет, третьего не дано.
Если неправильно, то не говорите почему, буду дальше думать!
давно
Старший Модератор
31795
6196
27.06.2017, 18:32
общий
Адресаты:
Цитата: Лысков Игорь Витальевич
Между прочим, код ошибочен

Я в блокноте на скорую руку кодил. Сорри.
Сильно вникать не стал.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401172
78
27.06.2017, 18:35
общий
if(???)
{ if(???)
{ if(???) {cccc};
else {dddd};

}
}

это лишнее - else eeee
давно
Посетитель
7438
7205
27.06.2017, 18:40
общий
Адресаты:
Если неправильно
Неправильно.
Расставьте скобки, будет понятнее. Кстати, покажите, как расставите...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 18:41
общий
Адресаты:
В моем варианте else eeee - нелишнее.
Лишнее - в варианте Константина Николаевича
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 18:52
общий
Адресаты:
Ну что там? Я скоро буду далеко от компа. У нас есть 10 минут.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401172
78
27.06.2017, 18:57
общий
27.06.2017, 19:00
Цитата: pNod
if(???)
if(???)
if(???)cccc
else dddd
else eeee


Расставляю:
Код:
if(???)
{ if(???)
{
if(???)
{
cccc;
}
else
{
dddd;
}
}
else
{
eeee;
}
}
давно
Посетитель
7438
7205
27.06.2017, 18:58
общий
Адресаты:
Даю расстановку скобок:
Код:
if(A)
{
if(B)
{
if(C)
cccc
else
dddd
}
else
eeee
}

Можно вот так сказать:
Если A, то (если B, то (если C, то сссс, иначе dddd), иначе eeee), иначе НИЧЕГО
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 19:00
общий
27.06.2017, 19:01
Адресаты:
Расставляю:
Правильно! Только почему бы не оформлять тегами code? (кнопочка {a})
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401172
78
27.06.2017, 19:01
общий
Цитата: Лысков Игорь Витальевич
Можно вот так сказать:
Если A, то (если B, то (если C, то сссс, иначе dddd), иначе eeee), иначе НИЧЕГО


Да, так понятнее, когда одна операция допускается ведь без фигурных скобок
Пришлось рисовать блок-схему с развилками, чтоб не запутаться. Так и увидела, что у первого условия или так, или НИЧЕГО.
давно
Посетитель
401172
78
27.06.2017, 19:03
общий
Цитата: Лысков Игорь Витальевич
Правильно! Только почему бы не оформлять тегами code?



Хорошо (про оформление)!
давно
Посетитель
7438
7205
27.06.2017, 19:05
общий
Адресаты:
Пришлось рисовать блок-схему с развилками, чтоб не запутаться. Так и увидела, что у первого условия или так, или НИЧЕГО
Ну и славно! Урок прошел с пользой! Удачи в освоении Си! Если что, Вы знаете, где спросить
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401172
78
27.06.2017, 19:06
общий
Цитата: Лысков Игорь Витальевич
Как работает понятно?

вставлять код между тегами
Код:
, используя кнопку {a}
давно
Посетитель
401172
78
27.06.2017, 19:07
общий
Цитата: Лысков Игорь Витальевич
Ну и славно! Урок прошел с пользой! Удачи в освоении Си! Если что, Вы знаете, где спросить


Огромное человеческое спасибо!
давно
Посетитель
7438
7205
27.06.2017, 19:10
общий
Адресаты:
вставлять код между тегами
Именно так, вставлять код между тегами
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
27.06.2017, 19:14
общий
это ответ
Здравствуйте, pNod!
if (a<0&&b>0) с=a;
else с = b;
Правильно?
Правильно
Но спорим еще про такой вариант проверки:
Чтобы не было вопросов, полезно писать скобки.
Написанный вариант соответствует:
Код:
if (b>0)
{
if (a<0 )
{
с=a;
}
else
{
с = b;
}
}

Так будет понятнее?
Конструкция, вообще говоря, не соответствует первому варианту
Если b будет <= 0, то c останется неопределенным!

Все же отвечу на вопросы:
К какому условию в данном случае относится else?
ко второму, if (a<0)
Разве в данном случае не вложенный if ?
вложенный-то вложенный, только работает не так
Я читаю это так - если b>0 и если a<0 , то присвоить с=a.
В данном случае, да
Если b<0, то с = b.
Не-а :)
Здесь else, мне кажется, распространяется только на первый if ?
Как уже сказал, else относится ко второму if
Правильно будет так:
Код:
if (b>0)
{
if (a<0 )
{
с=a;
}
else
{
с = b;
}
}
else
{
с = b;
}
Или так:
Код:
if (b>0)
if (a<0 )
с=a;
else
с = b;
else
с = b;
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа