Форум программистов, компьютерный форум CyberForum.ru

С++. switch. вводится чило Т - порядковый день в году. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Dragon.007
 Аватар для Dragon.007
3 / 3 / 0
Регистрация: 06.04.2012
Сообщений: 29
07.04.2012, 19:36     С++. switch. вводится чило Т - порядковый день в году. #1
определить номер месяца M и дня недели D соответствующих T.
знаю как решить используя оператор if.:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
if (T<0 || T>365) cout("\nВы ввели недопустимое значение!");
 if (T>0 && T<=31) M=1;
 if (T>31 && T<=59) M=2;
 if (T>59 && T<=90) M=3;
 if (T>90 && T<=120) M=4;
 if (T>121 && T<=151) M=5;
 if (T>151 && T<=181) M=6;
 if (T>181 && T<=212) M=7;
 if (T>212 && T<=243) M=8;
 if (T>243 && T<=273) M=9;
 if (T>273 && T<=304) M=10;
 if (T>304 && T<=334) M=11;
 if (T>334 && T<=366) M=12;
а используя switch ? возможно ли указать диапазон, например:
C++ (Qt)
1
2
switch (t)
case (от 1 до 31) m=1
??
(от 1 до 31) можно ли вообще как то записать? просто отрывочек пожалуйста напишите. помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2012, 19:36     С++. switch. вводится чило Т - порядковый день в году.
Посмотрите здесь:

C++ Число на которое приходится день учителя в году n
Установить порядковый номер дня в году по вводимому числу и месяцу (Переписать со структурой) C++
C++ Вводится k-й день невисокосного года - определить, является ли этот день рабочим.
C++ Дата вводится строкой нужно извлечь день месяц и год в int переменные
C++ считая что год не высокосный и известен день, на который приходится 1 января, подсчитать количество понедельников в году приходящихся на 13-е число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
07.04.2012, 19:47     С++. switch. вводится чило Т - порядковый день в году. #2
Нет, в switch так делать нельзя. В вашем случае лучше думаю написать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if ( T < 0 || T > 365 )
      cout << ( "\nВы ввели недопустимое значение!" );
   else if ( T > 334 )
      M = 12;
   else if ( T > 304 )
      M = 11;
   else if ( T > 273 )
      M = 10;
   else if ( T > 243 )
      M = 9;
   else if ( T > 212 )
      M = 7;
   else if ( T > 181 )
      M = 6;
   else if ( T > 151 )
      M = 5;
   else if ( T > 121 )
      M = 4;
   else if ( T > 90 )
      M = 3;
   else if ( T > 59 )
      M = 2;
   else
      M = 1;
Так как возможен ранний выход из ветвления. У вас же проверяются все варианты, даже если уже верный найден.
Dragon.007
 Аватар для Dragon.007
3 / 3 / 0
Регистрация: 06.04.2012
Сообщений: 29
07.04.2012, 19:49  [ТС]     С++. switch. вводится чило Т - порядковый день в году. #3
Цитата Сообщение от Toshkarik Посмотреть сообщение
Нет, в switch так делать нельзя.
спасибо за код. учту.. но задача по информатике как раз используя switch.. ошибка преподавателя?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
07.04.2012, 19:56     С++. switch. вводится чило Т - порядковый день в году. #4
Цитата Сообщение от Dragon.007 Посмотреть сообщение
ошибка преподавателя
Вполне возможно, так как выражение справа от оператора case должно быть константой.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
07.04.2012, 20:22     С++. switch. вводится чило Т - порядковый день в году. #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 switch (a)
{
case 1 ... 10:
// code
break;
 
case 11 ... 50:
// code
break;
 
case 800:
// code
break;
 
default:
// code
break;
}
Но это вроде не на всех компиляторах будет работать.

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <cstdio>
int main()
{
 int T,M;
 printf("Enter day: ");
 scanf("%d",&T);
 switch (T)
 {
  case 1 ... 31: M=1; break;
  case 32 ... 59: M=2; break;
  case 60 ... 90: M=3; break;
  case 91 ... 120: M=4; break;
  case 121 ... 151: M=5; break;
  case 152 ... 181: M=6; break;
  case 182 ... 212: M=7; break;
  case 213 ... 243: M=8; break;
  case 244 ... 273: M=9; break;
  case 274 ... 304: M=10; break;
  case 305 ... 334: M=11; break;
  case 335 ... 366: M=12; break;
  default: M=0; break;
 }
 printf("Month %d",M);
 getchar();
 return 0;
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
07.04.2012, 20:24     С++. switch. вводится чило Т - порядковый день в году. #6
Nekto, это расширение которое не входит в стандарт, поэтому, да, работать будет не на всех компиляторах
Dragon.007
 Аватар для Dragon.007
3 / 3 / 0
Регистрация: 06.04.2012
Сообщений: 29
07.04.2012, 20:48  [ТС]     С++. switch. вводится чило Т - порядковый день в году. #7
Цитата Сообщение от Toshkarik Посмотреть сообщение
это расширение которое не входит в стандарт,
а вот вопрос: как подключить такое расширение?)
у меня Turbo C++ если что... просто пока о расширениях я ничего не знаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2012, 21:00     С++. switch. вводится чило Т - порядковый день в году.
Еще ссылки по теме:

День недели, switch C++
C++ Вводится номер месяца М и дня Д. Определить день недели с датой М и Д
Программа, которая бы позволяла по заданному году и порядковому номеру дня в году определять день недели C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
07.04.2012, 21:00     С++. switch. вводится чило Т - порядковый день в году. #8
Dragon.007, это зависит от компилятора, у каждого свои "дополнения". Какие именно есть у вашего, должно быть написано в документации к нему.
Yandex
Объявления
07.04.2012, 21:00     С++. switch. вводится чило Т - порядковый день в году.
Ответ Создать тему
Опции темы

Текущее время: 21:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru