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

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

28.10.2012, 11:41. Показов 3188. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2012, 11:41
Ответы с готовыми решениями:

Определение дня недели по дате
Помогите исправить, неправильно находит день недели. int date_day::true_day() const { ...

Определение дня недели по дате
Помогите найти ошибку. Работает, но не корректно. Определяет не тот день. #include&lt;stdio.h&gt;...

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

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

5
1 / 1 / 0
Регистрация: 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
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 10
28.10.2012, 12:04 3
33 rest=(days-1)%7; так замени
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
28.10.2012, 12:11  [ТС] 4
Спасибо всем, прогорамма работает корректно,но вопрос,почему минус один?
0
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 10
28.10.2012, 12:37 5
если ты начнешь с 1801 года, -1 не понадобится, например

P.S. почему - не знаю. =)
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
28.10.2012, 13:58  [ТС] 6
Ну в принципе, главное - чтобы работало, а "-1",кажется, нужна ,т.к. мы считаем уже,что день 1-ый прошёл 1800 года уже прошел,всем спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2012, 13:58

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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


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

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

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