Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 629

Раздел: C++
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Изучаю С++, ветвления.
Программа является решением задачи (не важно какой).
Выполняется 1-е условие, независимо от введенных данных.

Например: y=2009, m=2, d=2.
Должен вывести 26, выводит 29 (опять срабатывает 1-е условие, хотя должно сработать 3-е).

Приложение:
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int y,m,d,c;
  6. cin>>y>>m>>d;
  7. c=y%4;
  8. if(m=1)cout<<31-d;
  9. else
  10. if((m=2)&&(c=0))cout<<29-d;
  11. else
  12. if((m=2)&&(c>0))cout<<28-d;
  13. else
  14. if(m=3)cout<<31-d;
  15. else
  16. if(m=4)cout<<30-d;
  17. else
  18. if(m=5)cout<<31-d;
  19. else
  20. if(m=6)cout<<30-d;
  21. else
  22. if(m=7)cout<<31-d;
  23. else
  24. if(m=8)cout<<31-d;
  25. else
  26. if(m=9)cout<<30-d;
  27. else
  28. if(m=10)cout<<31-d;
  29. else
  30. if(m=11)cout<<30-d;
  31. else
  32. if(m=12)cout<<31-d;
  33. return 0;
  34. }


Примечание #1 (1 октября 2010, 22:52):
Заданные условия не работают.
В чем дело?
Помогите пожалуйста!

prog-mer Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: prog-mer (статус: Посетитель)
Вопрос отправлен: 1 октября 2010, 22:49
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, prog-mer!
посмотрите на мою версию кода и найдите отличия

#include <iostream>
using namespace std;
int main()
{
  int y,m,d,c;
  cin>>y>>m>>d;
  c=y%4;
  if(m==1)cout<<31-d;
  else if((m==2)&&(c==0))cout<<29-d;
  else if((m==2)&&(c>0))cout<<28-d;
  else if(m==3)cout<<31-d;
  else if(m==4)cout<<30-d;
  else if(m==5)cout<<31-d;
  else if(m==6)cout<<30-d;
  else if(m==7)cout<<31-d;
  else if(m==8)cout<<31-d;
  else if(m==9)cout<<30-d;
  else if(m==10)cout<<31-d;
  else if(m==11)cout<<30-d;
  else if(m==12)cout<<31-d;
  else cout << "Ops!";
  return 0;
}
прочитайте ещё раз разницу между == и =

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 1 октября 2010, 23:43
Оценка за ответ: 5

Комментарий к оценке: Спасибо! Я тупанул, забыл, что на С++ = знак присваивания, а не равно, как на Pascal!

Ответ #2. Отвечает эксперт: min@y™

Ветвления изучаешь, говоришь?
Посмотри на мою версию кода и найди совпадения. :))

int main()
{
  int y, m, d;
  cin >> y >> m >> d;
 
  if ((m > 0) && (m < 13))
    switch (m)
    {
      case 4: case 6: case 9: case 11:
        cout << 30 - d;
      break;
 
      case 2:
        if (y % 4) cout << 28 - d;
        else       cout << 29 - d;
      break;
 
      default: cout << 31 - d;
    }
  else cout << "Ops!";
 
  return 0;
}

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 2 октября 2010, 09:33


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 2 октября 2010, 19:24; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 2 октября 2010, 17:29 [#1]:

а кто после default двоеточие поставит? Вердикт - не скомпилируется:)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 2 октября 2010, 19:24 [#2]:

Цитата (Вадим К):

а кто после default двоеточие поставит? Вердикт - не скомпилируется:)


УЯ! Ошибся! Расстрелять меня!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:38
Выполнено за 0.03 сек.