23.09.2017, 10:28 [+3 UTC]
в нашей команде: 2 127 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
21.09.2017, 12:28

Последний вопрос:
23.09.2017, 07:32

Последний ответ:
23.09.2017, 08:43

Последняя рассылка:
22.09.2017, 21:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
18.01.2017, 21:59 »
svrvsvrv
Спасибо за консультацию! [вопрос № 190436, ответ № 274555]
19.09.2010, 12:13 »
Anjali
Спасибо за подробные разъяснения! [вопрос № 179956, ответ № 263099]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 239
solowey
Статус: 6-й класс
Рейтинг: 82
Хватов Сергей
Статус: Академик
Рейтинг: 71

Перейти к консультации №:
 

Консультация онлайн # 191193
Раздел: • С / С++
Автор вопроса: pNod (1-й класс)
Отправлена: 27.06.2017, 16:03
Поступило ответов: 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 ?
Рассудите, пожалуйста! smile

Состояние: Консультация закрыта

Ответ # 275130 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, 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;


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 27.06.2017, 19:14

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 191193

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

 +1 
 
= общий = | 27.06.2017, 16:58 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
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;

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 27.06.2017, 17:26

Зенченко Константин Николаевич
Модератор

ID: 31795

# 2

 +1 
 
= общий = | 27.06.2017, 17:11 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

Вот Вам ребус:

if(???)aaaa
  if(???)bbbb
    if(???)cccc
      else dddd
        else eeee


smile
© Цитата: Лысков Игорь Витальевич
Чтобы не было вопросов, полезно писать скобки

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 3

 +1 
 
= общий = | 27.06.2017, 17:16 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Зенченко Константин Николаевич:

Между прочим, код ошибочен smile
Последнее else eeee ни к чему не относится smile , а почему, пусть автор вопроса ответит smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 4

 +1 
 
= общий = | 27.06.2017, 17:32 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

Можно еще так записать:

c = (a<0&&b>0) ? a : b;

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 5

 +1 
 
= общий = | 27.06.2017, 17:53 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Зенченко Константин Николаевич:

Интереснее записать вот так:

if(???)
  if(???)
    if(???)cccc
      else dddd
        else eeee
Расставьте скобочки...

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 6

 +1 
 
= общий = | 27.06.2017, 17:54 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

Последнее задание, насчет скобочек - Вам smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

pNod
1-й класс

ID: 401172

# 7

= общий = | 27.06.2017, 18:01 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Чтобы не было вопросов, полезно писать скобки.[q=Лысков Игорь Витальевич]

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

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

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

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

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

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

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

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

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



• Отредактировал: pNod (1-й класс)
• Дата редактирования: 27.06.2017, 18:02

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 8

= общий = | 27.06.2017, 18:21 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

© Цитата:
но без точки с запятой....вообще не понимаю
Считайте, что точка с запятой есть smile Под буковками aaa, bbb, ... понимаются любой оператор с точкой с запятой в конце...

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

pNod
1-й класс

ID: 401172

# 9

= общий = | 27.06.2017, 18:32 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
if(???)
if(???)
if(???)cccc
else dddd
else eeee


Так если для трех условий только одно действие, то и вариант ИНАЧЕ один. smile
Рассуждаю - если три условия выполнены, напечатать "ДА", если не выполнены, напечатать "НЕТ". Либо условия выполнены, либо нет, третьего не дано.
Если неправильно, то не говорите почему, буду дальше думать! smile

Зенченко Константин Николаевич
Модератор

ID: 31795

# 10

= общий = | 27.06.2017, 18:32 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

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

smile Я в блокноте на скорую руку кодил. Сорри.
Сильно вникать не стал.
smile

pNod
1-й класс

ID: 401172

# 11

= общий = | 27.06.2017, 18:35 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

if(???)
{ if(???)
{ if(???) {cccc};
else {dddd};

}
}

это лишнее - else eeee smile

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 12

= общий = | 27.06.2017, 18:40 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

© Цитата:
Если неправильно
Неправильно.
Расставьте скобки, будет понятнее. Кстати, покажите, как расставите...

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 13

= общий = | 27.06.2017, 18:41 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

В моем варианте else eeee - нелишнее.
Лишнее - в варианте Константина Николаевича

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 14

= общий = | 27.06.2017, 18:52 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

Ну что там? Я скоро буду далеко от компа. У нас есть 10 минут.

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

pNod
1-й класс

ID: 401172

# 15

= общий = | 27.06.2017, 18:57 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: pNod
if(???)
if(???)
if(???)cccc
else dddd
else eeee


Расставляю:
if(???)
{     if(???)
       {
                if(???)
               {
                       cccc;
                }
               else
               {
                      dddd;
               }    
       }
       else 
       {
              eeee;
       }
}

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 27.06.2017, 19:00

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 16

 +3 
 
= общий = | 27.06.2017, 18:58 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

Даю расстановку скобок:

if(A)
{
  if(B)
  {
    if(C)
      cccc
    else 
      dddd
  }
  else 
    eeee
}

Можно вот так сказать:
Если A, то (если B, то (если C, то сссс, иначе dddd), иначе eeee), иначе НИЧЕГО

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 17

= общий = | 27.06.2017, 19:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

© Цитата:
Расставляю:
Правильно! Только почему бы не оформлять тегами code? (кнопочка {a})

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 27.06.2017, 19:01

pNod
1-й класс

ID: 401172

# 18

 +1 
 
= общий = | 27.06.2017, 19:01 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Можно вот так сказать:
Если A, то (если B, то (если C, то сссс, иначе dddd), иначе eeee), иначе НИЧЕГО


Да, так понятнее, когда одна операция допускается ведь без фигурных скобок smile
Пришлось рисовать блок-схему с развилками, чтоб не запутаться. Так и увидела, что у первого условия или так, или НИЧЕГО.

pNod
1-й класс

ID: 401172

# 19

 +1 
 
= общий = | 27.06.2017, 19:03 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Правильно! Только почему бы не оформлять тегами code?


smile
Хорошо (про оформление)!

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 20

 +2 
 
= общий = | 27.06.2017, 19:05 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

© Цитата:
Пришлось рисовать блок-схему с развилками, чтоб не запутаться. Так и увидела, что у первого условия или так, или НИЧЕГО
Ну и славно! Урок прошел с пользой! Удачи в освоении Си! Если что, Вы знаете, где спросить smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

pNod
1-й класс

ID: 401172

# 21

= общий = | 27.06.2017, 19:06 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Как работает понятно?

вставлять код между тегами , используя кнопку {a} smile

pNod
1-й класс

ID: 401172

# 22

= общий = | 27.06.2017, 19:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Лысков Игорь Витальевич
Ну и славно! Урок прошел с пользой! Удачи в освоении Си! Если что, Вы знаете, где спросить


Огромное человеческое спасибо! smile

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 23

= общий = | 27.06.2017, 19:10 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
pNod:

© Цитата:
вставлять код между тегами
Именно так, вставлять код между тегами smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15659 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн