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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
seriy_21
0 / 0 / 0
Регистрация: 24.10.2011
Сообщений: 6
#1

Для указанного года распечатать все числа, попадающие на воскресенье - C++

14.09.2012, 22:13. Просмотров 792. Ответов 7
Метки нет (Все метки)

Написать программу, которая бы для указанного года распечатывала все числа, попадающие на воскресенье.
С клавиатуры ввести год.
Принять во внимание, что в современном (григорианском) календаре каждый год, номер которого делится на 4, является високосным, за исключением тех номеров, которые делятся на 100, но не делятся на 400.
Это правило формально действует с 325 года.
До 325 года формально високосными годами надо считать все годы,
номера которых делятся на 4.


дело в том что я не могу разобраться как высчитать эти числа воскресений? может существует какая нибудь закономерность? или в программе есть функция которая это делает? подскажите от чего исходить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2012, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для указанного года распечатать все числа, попадающие на воскресенье (C++):

Вывести все числа данного файла, попадающие в заданный интервал - C++
Создать файл состоящий из n целых чисел. Вывести на экран все числа данного файла, попадающие в заданный интервал.

День учителя ежегодно отмечается в первое воскресенье октября. Дано натуральное число n, означающее номер года - C++
День учителя ежегодно отмечается в первое воскресенье октября. Дано натуральное число n, означающее номер года. Определить число, на...

Распечатать все числа от 1 до N, у которых остатки от деления на число Z не превышают числа M - C++
Распечатать все числа от 1 до N, у которых остатки от деления на число Z не превышают числа M. #include <iostream> using namespace std;...

Распечатать все числа от 1 до N, у которых остатки от деления на число Z не превышают числа M. - C++
1. Распечатать все числа от 1 до N, у которых остатки от деления на число Z не превышают числа M. Помогите написать((

Распечатать все числа от 1 до N - C++
Привет всем, помощь нужна, помогите написать. 1. Распечатать все числа от 1 до N, у которых первая и вторая цифра справа равны числу...

Записать в целочисленный массив все числа из указанного файла (std::getline, работа с файлами) - C++
Имеется текстовый файл, к примеру с таким содержимым Из него в целочисленный массив нужно записать все числа. Собственно код: int i...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
14.09.2012, 22:59 #2
Цитата Сообщение от seriy_21 Посмотреть сообщение
может существует какая нибудь закономерность?
задача перебором решается.
seriy_21
0 / 0 / 0
Регистрация: 24.10.2011
Сообщений: 6
14.09.2012, 23:13  [ТС] #3
в смысле? по подробнее объясни???
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.09.2012, 23:23 #4
У вас уже есть функция, которая определяет весокосный ли год?
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
14.09.2012, 23:50 #5
Нужно вывести все воскресенья - с какого дня недели начинается год. Затем перебирать все дни и смотреть, какие - воскресенье. Если память меня не подводит, то календарь повторяется каждые 28 лет.
seriy_21
0 / 0 / 0
Регистрация: 24.10.2011
Сообщений: 6
15.09.2012, 10:29  [ТС] #6
а как вот именно сделать алгоритм этот, как вывести числа воскресенья? с высокосным годом я разберусь, а как мне вывести по месяцам эти числа?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2012, 10:51 #7
1. Высчитываем dominical letter для года — это день первого воскресенья в году. (табличка для полного четырёхсотлетнего цикла календаря)
2. После этого в цикле:
2.1. Выводим на экран дату.
2.2. +7 к дню
2.3. Если вылетели за пределы месяца, то отнимаем число дней в месяце и +1 к месяцу.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2012, 16:11 #8
Вот функция, в которую нужно передать флаг високосности года и номер первого дня года (первый номер - понедельник). Наверное, можно сделать более рационально, но, по крайней мере, работает. Нужно дополнить программу функциями вычисления високосности года (с возвращением bool) и номера первого дня года.
Код
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <string>
#include <iomanip>
using namespace std;
 
void getSunday(char *arr[], bool flag, int first);
 
int main()
{
setlocale(0, "");
 
char *arr[12] = {"январь",   "февраль", "март",   "апрель", 
                 "май",      "июнь",    "июль",   "август", 
                 "сентябрь", "октябрь", "ноябрь", "декабрь"};
 
bool flag; // флаг високосного года
int first; // номер первого дня в году (воскресенье = 7)
 
cout << "Введите номер первого дня года (понедельник = 1) : ";
cin >> first; 
cout << "Если год високосный, введите 1, если нет - 0 : ";
cin >> flag;
 
getSunday(arr, flag, first);
 
cout << endl;
system("pause");
return 0;
}
 
void getSunday(char *arr[], bool flag, int first)
{
  
  int febr; // число дней февраля
 
  if (flag == true) febr = 29;
  else febr = 28; 
 
  int month = 31; 
  
  int i; // число первого воскресенья в году
  if (first != 7) i = 8 - first;
  else i = 1;
  
  cout << "Воскресенье :" << endl;
  cout << arr[0] << endl;
  for (int j = 0, m = 1; j < 12; i += 7)
  {
      cout << setw(3) << i << " ";
 
      if ((i + 7 ) > month) 
      {
          if (j == 11) break;
          i = (i + 7) - month;
          m++;
          if (m < 9) // до сентября
          {
          if (m == 2) month = febr; // если февраль
          else if (m % 2)month = 31;
               else if (m == 8) month = 31; // если август
                    else month = 30;
          }
          else if (m % 2)month = 30; // с сентября
               else month = 31;
          j++;
          if (j < 12) cout << endl << arr[j] << endl;
          cout << setw(3) << i << " ";
       }
   }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 16:11
Привет! Вот еще темы с ответами:

Найти и распечатать все совершенные числа в заданном интервале - C++
Чтсло равное сумме всех своих делителей,включая единицу,называется совершенным. Найти и распечатать все совершенные числа в интервале от...

Распечатать все числа от 1 до N, у которых нет двухзначных делителей - C++
Привет программистам!! Я тут написал код, но почему он не выводит только те которые нужно, а все числа от 1 до N. Хотелось бы узнать...

Распечатать все простые сдвоенные числа меньшие заданного - C++
Здравствуйте! Помогите написать программу Если p и q - простые числа и q = p+2, то они называются простыми сдвоенными числами или...

Распечатать все числа от 1 до N, у которых нет двузначных делителей - C++
Помогите найти ошибку. Он выводит все числа от 1 до Н, а не те которые нужны. #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2012, 16:11
Ответ Создать тему
Опции темы

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