Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/57: Рейтинг темы: голосов - 57, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 2
1

Вычислить количество пятниц, приходящихся на 13-е числа 21 века

28.10.2013, 03:16. Показов 10579. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Поставлено следующее условие: вычислить количество пятниц, приходящихся на 13-е числа 21 века.
Как это программно реализовать?
Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2013, 03:16
Ответы с готовыми решениями:

Определить количество понедельников в году, приходящихся на 13-е числа
type число=1..31 месяц=(янв,фев,мар,апр,май,июн,июл,авг,сен,окт,ноя,дек); ...

Вычислить количество пятниц, приходящихся на 13-е числа столетия с номером n
Вычислить количество пятниц, приходящихся на 13-е числа столетия с номером n , где n - заданное...

Вычислить количество пятниц, приходящихся на 13-е число
. Вычислить количество пятниц, приходящихся на 13-е Числа столетия с номером n, где n -данное...

Определить количество пятниц в году, приходящихся на 13-е число
21. type число = 1..31; месяц = (янв,фев,мар,апр,май,июн,июл,авг,сен,окт,ноя,дек); деньнедели...

5
Модератор
9868 / 5236 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
28.10.2013, 05:04 2
Ну... В общем, просто, если подумать...
Pascal
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
program Friday13;
 
//первая "пятница 13" в 21 веке: 13.04.2001, от неё и пляшем
 
//число дней в следующем месяце
const pp: array [1..12] of byte = (28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31);
 
var m, y, n, k: integer;
 
begin
  n := 0; //счётчик дней
  k := 0; //пока нет пятниц 13
  m := 4; //начинаем от 04 месяца 2001 года
  for y := 2001 to 3000 do
    begin
      while m <= 12 do
        begin
          n := n mod 7;
          if n = 0 then k := k + 1; //если счётчик дней делится нацело на 7, то это одна из пятниц 13
          n := n + pp[m]; //прибавляем к счётчику число дней в следующем месяце
          if (m = 1) and (y mod 4 = 0) then n := n + 1; //если следующий месяц февраль и год високосный, добавляем ещё один день
          m := m + 1 //следующий месяц
        end;
      m := 1 //январь следующего года
    end;
  writeln('Count of "Friday 13" in 2001..3000: ', k);
  readln
end.
0
14 / 14 / 14
Регистрация: 05.10.2013
Сообщений: 141
28.10.2013, 09:21 3
Не думаю , что программа правильно написана , результат ( k) = 1715. Даже если каждый месяц с 2001 по 3000 год будет пятница 13-е , то это 1200 пятниц , откуда 1715 ?
0
Модератор
9868 / 5236 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
30.10.2013, 22:39 4
Dj Programmer, частично Вы правы. В программе есть две несущественные ошибки, я бы даже сказал, неточности, с вычислением следующего 13 числа. Вот исправленный код:
Pascal
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
program Friday13;
 
//первая "пятница 13" в 21 веке: 13.04.2001, от неё и пляшем
 
//число дней в текущем месяце
const pp: array [1..12] of byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 
var m, y, n, k: integer;
 
begin
  n := 0; //счётчик дней
  k := 0; //пока нет пятниц 13
  m := 4; //начинаем от 04 месяца 2001 года
  for y := 2001 to 3000 do //цикл по годам
    begin
      while m <= 12 do //цикл по месяцам
        begin
          n := n mod 7;
          if n = 0 then k := k + 1; //если счётчик дней делится нацело на 7, то это одна из пятниц 13
          n := n + pp[m]; //прибавляем к счётчику число дней в текущем месяце
          if (m = 2) and (y mod 4 = 0) then n := n + 1; //если текущий месяц февраль и год високосный, добавляем ещё один день
          m := m + 1 //следующий месяц
        end;
      m := 1 //январь следующего года
    end;
  writeln('Count of "Friday 13" in 2001..3000: ', k);
  readln
end.
Цитата Сообщение от Dj Programmer Посмотреть сообщение
Даже если каждый месяц с 2001 по 3000 год будет пятница 13-е , то это 1200 пятниц
Dj Programmer, этого никак не может этого быть. 12 * (3000 - 2001) = 11988.

Добавлено через 23 часа 31 минуту
Dj Programmer, я неумышленно ввёл Вас в заблуждение. 21 век кончается в 2100 году, а не в трёхтысячном. Это я что-то по невнимательности на тысячелетие замахнулся. Правильно будет
Pascal
1
for y := 2001 to 2100 do

Не по теме:

А ведь как я был уветен в себе!
Бу дет что вспом нить на свал ке...

2
1 / 1 / 0
Регистрация: 05.12.2015
Сообщений: 10
05.12.2015, 18:29 5
Cyborg Drone, Спасибо огромное за код! Не могли бы вы пояснить, пожалуйста, почему деление на 7 без остатка определяет именно пятницу 13? Код абсолютно верный, сверил с календарём.
0
Модератор
9868 / 5236 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
05.12.2015, 19:37 6
Потому что отсчёт в данной программе идёт от одной из пятниц 13-е, а именно: 13.04.2001. И считаем дни по модулю 7. Для 13.04.2001 счётчик дней по модулю 7 принимаем равным 0 (переменная n). Дни недели в программе нумеруются от 0 до 6: пятница, суббота, воскресенье, понедельник, вторник, среда и четверг соответственно.

Основной цикл:
1) Выясняем день недели: остаток от деления счётчика дней на 7. Если получается 0, то это - пятница 13.
2) Затем к полученному остатку прибавляется количество дней в текущем месяце, тем самым получаем количество дней до 13 числа следующего месяца плюс номер дня недели текущего месяца.
Повторяем до нужной даты.

Пояснение к пункту 2). Даже не пояснение, а так... Повторение. Складывая номер дня недели текущего месяца с количеством дней текущего месяца и выбрасывая целое количество семёрок из этого числа, получаем номер дня недели следующего месяца. Так же, как и при ручном подсчёте. К примеру, в текущем месяце 30 дней, и текущий день 13 числа этого месяца - понедельник (3). Считаем семёрками, что за день недели будет через 30 дней, то есть, 13 числа следующего месяца. Через 7+7+7 дней будет всё тот же понедельник, а ещё через 2 дня - среда (3+2=5). В программе считается точно так же, только без лишнего разжёвывания:
- Текущее 13 число - понедельник (3). Плюс 30 дней = 33.
- Выкидывается максимальное целое количество семёрок, чтобы остаток был меньше 7 (это и есть mod 7). 33 mod 7 = 5, значит, следующее 13 число - среда.
1
05.12.2015, 19:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 19:37
Помогаю со студенческими работами здесь

Найти количество пятниц с 1 января 2001 по 31 декабря 2010. И найти количество пятниц, 13
Если кто знает как решить помогите

Вычислить количество пятниц приходящих на 13 число заданного столетия
вычислить количество пятниц приходящих на 13 число заданного столетия реализовать программу надо...

Сколько пятниц и пятниц 13 в период с 1 января 2001 по 31 декабря 2020 ( включительно) ?
Я решил эту задачу, но не уверен в правильности кода. Не могли бы вы мне помочь ее проверить....

Определить количество вторников в году, приходящихся на 13-е число
Объявлены типы и переменные : TYPE ЧИСЛО = 1 .. 31; МЕСЯЦ= (ЯНВ, ФЕВ, МАР, АПР,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru