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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
28.10.2012, 11:41     Определение дня недели по введенной дате #1
Доброго времени суток! Программу я составил, вводишь день,месяц и год, и день недели она выдаёт. Но вот только почему-то на один день вперёд. Не могу понять, в чем ошибка.

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 этим
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2012, 11:41     Определение дня недели по введенной дате
Посмотрите здесь:

Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели C++
Алгоритм вычисления дня недели по дате C++
C++ вычисление дня недели по дате
Составить программу, которая по номеру введенного дня недели вводит название дня. C++
Написать программу, которая по номеру дня недели (целому числу от 1 до 7) выдает в качестве результата название дня недели C++
Выведите номер дня недели для данного дня года C++
Определение дня недели по дате C++
Расчет дня недели по дате, исправьте ошибки C++
C++ Определить номер дня недели для заданного номера дня года
C++ Определить номер дня недели для заданного дня года
C++ Составьте программу, печатающую по номеру дня недели (число от 1 до 7) название этого дня
Определение дня недели по дате C++

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

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

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

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