Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Егор Ярыславски
0 / 0 / 1
Регистрация: 23.09.2012
Сообщений: 9
#1

Определение дня недели по введенной дате - C++

28.10.2012, 11:41. Просмотров 2192. Ответов 5
Метки нет (Все метки)

Доброго времени суток! Программу я составил, вводишь день,месяц и год, и день недели она выдаёт. Но вот только почему-то на один день вперёд. Не могу понять, в чем ошибка.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<stdio.h>
#include<conio.h>
int main()
{
 clrscr();
 int y,m,d;
 long days=0;
 int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 char week[7][4]={"mon","tue","wed","thu","fri","sat","sun"};
 int rest=0;
 printf("input days,month and year (dd.mm.yyyy)\n");
 do
 {
  scanf("\n%2d%2d%4d",&d,&m,&y);
  if ((d<=0)||(d>31)||(m<=0)||(m>12)||(y<0)) printf("\nyou input incorrect vallues");
 }
 while ((d<=0)||(d>31)||(m<=0)||(m>12)||(y<0));
 printf("\ninput date is %d.%d.%d",d,m,y);
 for(int i=1800;i<y;i++)
 {
  if((i%4==0) && ((i%100!=0)||(i%400==0))) days+=366;
  else days+=365;
 }
 printf("\n%ld",days);
 for (i=0;i<m-1;i++)
 {
  days+=month[i];
 }
 printf("\n%ld",days);
 if (((y%4==0)&&((y%100!=0)||(y%400==0)))&&(m>2)) days++;
 days+=d;
 printf("\n%ld",days);
 rest=days%7;
 switch (rest)
 {
  case 0: printf("this is %s",week[2]);break;
  case 1: printf("\nthis is %s",week[3]);break;
  case 2: printf("\nthis is %s",week[4]);break;
  case 3: printf("\nthis is %s",week[5]);break;
  case 4: printf("\nthis is %s",week[6]);break;
  case 5: printf("\nthis is %s",week[0]);break;
  case 6: printf("\nthis is %s",week[1]);break;
 }
 printf("\n%d",rest);
 getch();
 return 1;
}
П.с. для проверки количества дней сайтом этим http://whoyougle.ru/time/counter этим
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2012, 11:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определение дня недели по введенной дате (C++):

Определение дня недели по дате
Помогите исправить, неправильно находит день недели. int...

Определение дня недели по дате
Помогите найти ошибку. Работает, но не корректно. Определяет не тот день. ...

Вычисление дня недели по дате
здравствуйте. как можно вычислить день недели по дате? слышала про формулу...

Алгоритм вычисления дня недели по дате
Посдкажите алгоритм вычисления дня недели по дате( день, месяц, год). int a =...

Расчет дня недели по дате, исправьте ошибки
Программа должна считать день недели по дате, использую по заданию какую то...

Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели
Написать программу, которая запрашивает у пользователя номер дня недели, затем...

5
Rebel123
1 / 1 / 2
Регистрация: 06.05.2012
Сообщений: 12
28.10.2012, 12:03 #2
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <conio.h>
int main() 
{
 int y,m,d;
 long days=-1;
 int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 char week[7][4]={"mon","tue","wed","thu","fri","sat","sun"};
 int rest=0;
 printf("input days,month and year (dd.mm.yyyy)\n");
 do
 {
  scanf("\n%2d%2d%4d",&d,&m,&y);
  if ((d<=0)||(d>31)||(m<=0)||(m>12)||(y<0)) printf("\nyou input incorrect vallues");
 }
 while ((d<=0)||(d>31)||(m<=0)||(m>12)||(y<0));
 printf("\ninput date is %d.%d.%d",d,m,y);
 for(int i=1800;i<y;i++)
 {
  if((i%4==0) && ((i%100!=0)||(i%400==0))) days+=366;
  else days+=365;
 }
 printf("\n%ld",days);
 for (int i=0;i<m-1;i++)
 {
  days+=month[i];
 }
 printf("\n%ld",days);
 if (((y%4==0)&&((y%100!=0)||(y%400==0)))&&(m>2)) days++;
 days+=d;
 printf("\n%ld",days);
 rest=days%7;
 switch (rest)
 {
  case 0: printf("this is %s",week[2]);break;
  case 1: printf("\nthis is %s",week[3]);break;
  case 2: printf("\nthis is %s",week[4]);break;
  case 3: printf("\nthis is %s",week[5]);break;
  case 4: printf("\nthis is %s",week[6]);break;
  case 5: printf("\nthis is %s",week[0]);break;
  case 6: printf("\nthis is %s",week[1]);break;
 }
 printf("\n%d",rest);
 getch();
 return 1;
}
long days = -1

P.S. clrscr(); - ругался мой компилятор на этот код, причем conio.h. подключен. Я его убрал, хотите, добавьте вновь.
1
comeTrue
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 10
28.10.2012, 12:04 #3
33 rest=(days-1)%7; так замени
0
Егор Ярыславски
0 / 0 / 1
Регистрация: 23.09.2012
Сообщений: 9
28.10.2012, 12:11  [ТС] #4
Спасибо всем, прогорамма работает корректно,но вопрос,почему минус один?
0
comeTrue
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 10
28.10.2012, 12:37 #5
если ты начнешь с 1801 года, -1 не понадобится, например

P.S. почему - не знаю. =)
0
Егор Ярыславски
0 / 0 / 1
Регистрация: 23.09.2012
Сообщений: 9
28.10.2012, 13:58  [ТС] #6
Ну в принципе, главное - чтобы работало, а "-1",кажется, нужна ,т.к. мы считаем уже,что день 1-ый прошёл 1800 года уже прошел,всем спасибо!
0
28.10.2012, 13:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 13:58
Привет! Вот еще темы с решениями:

Написать программу, которая по номеру дня недели (целому числу от 1 до 7) выдает в качестве результата название дня недели
!!!!!

Определить номер дня недели для заданного номера дня года
а как это примерно будет на C++ ?

Выведите номер дня недели для данного дня года
Помогите,пожалуйста...Среда Free Pascal Дан порядковый номер дня года...

Определить номер дня недели для заданного дня года
Дни недели пронумерованы следующим образом: 0 — воскресенье, 1 — понедельник, 2...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru