0 / 0 / 0
Регистрация: 17.10.2019
Сообщений: 3
1

Каждый последний четверг месяца в библиотеке санитарный день

29.10.2019, 22:42. Показов 3685. Ответов 9
Метки си (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток,есть задача:
Каждый последний четверг месяца в библиотеке санитарный день,вывести на экран даты всех санитарных дней от заданной даты до конца года.Мучаюсь уже достаточно долго но не сильно выходит,можете исправить или подсказать верный путь решения? Заранее спасмбо большое

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 <locale.h>
#include <windows.h>
int main()
{
    setlocale(LC_ALL, "Russian");
    int dm[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int d[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int g, i, n, m;
    scanf("%d %d", &g);
 
    if (g % 4 == 0 && g % 100 != 0 || g % 400 == 0)
    {
        dm[2] = 29;
    }
 
    for (i =1; i < 13; i++)
    {
    n = ((dm[i] + 31 * i/ 12 + g + g / 4 - g / 100 + g / 400) % 7);
    
    if(n==4)
    d[i]=dm[i];
    
    else if(n>4)
    {
        while(n>4)
        {
            n--;
            dm[i]-=1;
        }
        d[i]=dm[i];
    }
    else if(n<4)
        {
        while(n<4)
        {
            n++;
            dm[i]+=1;
        }
        d[i]=dm[i];
        }
    
    printf("%d день \n", d[i]);
    printf("%d месяц \n", i);
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2019, 22:42
Ответы с готовыми решениями:

Задача: В библиотеке последний четверг каждого месяца - санитарный день
В библиотеке последний четверг каждого месяца - санитарный день. Дано число, обозначающее номер...

Дата следующего дня, последний день месяца и сколько дней осталось до конца месяца
написать программу которая вычисляет дату следующего дня определяет последний день месяца и сколько...

Последний день месяца
Привет всем! Не оходо писать сложную функцию определения последнего дня месяца, может есть...

DATE_ADD и последний день месяца
Есть столбец в бд с датой в datetime, надо прибавить к нему некоторое количество месяцев. Использую...

9
из племени тумба-юбма
2435 / 1764 / 411
Регистрация: 29.11.2015
Сообщений: 8,573
Записей в блоге: 15
30.10.2019, 00:06 2
Интересный расчет. Получается вы берете не какой то реальный год, а тупо присвоили четверг, дате 4 января?
0
0 / 0 / 0
Регистрация: 17.10.2019
Сообщений: 3
30.10.2019, 06:32  [ТС] 3
Нет,4 это если верить формуле вечного календаря четверг,я прогоняю через календарь послежний день месяца,проверяю не четверг ли,и в зависимости от результата действую дальше
0
из племени тумба-юбма
2435 / 1764 / 411
Регистрация: 29.11.2015
Сообщений: 8,573
Записей в блоге: 15
30.10.2019, 14:30 4
Lolibomj, предлагаю по началу не парится с календарем, а решить задачу чисто математически. К календарю потом можно всегда прикрутить расчет. Поэтому дни месяца приравняйте к дню года, так будет проще. Соответственно массив дней и месяцев должен будет выглядеть так:
DM[12] = {31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365} - месяцы это номера ячеек массива, а дни это сами значения в ячейках.
0
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
30.10.2019, 21:33 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
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
 
uint8_t dayOfWeek(uint16_t year, uint8_t month, uint8_t day) {
    static const uint16_t month_table[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
    if (month < 3) --year;
    return (year + year / 4 - year / 100 + year / 400 + month_table[month - 1] + day) % 7;
}
 
bool isLeap(uint16_t year) {
    return !(year % 4) ? !(year % 100) ? !(year % 400) ? true : false : true : false;
}
 
int main(void)
{
    uint8_t day;
    uint8_t month;
    uint16_t year;
 
    printf("dd mm yyyy:  ");
    if (scanf("%hhu%hhu%hu", &day, &month, &year) != 3) return 1;
 
    const uint8_t nDays[] = { 31, 28 + isLeap(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
    for (uint8_t i = month; i <= 12; ++i) {
        uint8_t result = nDays[i - 1] - (dayOfWeek(year, i, nDays[i - 1]) + 3) % 7;
        if (i == month && result < day) continue;
        printf("%hhu.%hhu.%hu\n", result, i, year);
    }
 
    return 0;
}
1
из племени тумба-юбма
2435 / 1764 / 411
Регистрация: 29.11.2015
Сообщений: 8,573
Записей в блоге: 15
30.10.2019, 22:09 6
nalbe666, протестил программу, как то не то:
Кликните здесь для просмотра всего текста
dd mm yyyy: 05
05
2019
30.5.2019
27.6.2019
25.7.2019
29.8.2019
26.9.2019
31.10.2019
28.11.2019
26.12.2019

--------------------------------
Process exited after 26 seconds with return value 0
Для продолжения нажмите любую клавишу . . .
0
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
30.10.2019, 22:14 7
Наведите конкретики, что именно не то?
0
из племени тумба-юбма
2435 / 1764 / 411
Регистрация: 29.11.2015
Сообщений: 8,573
Записей в блоге: 15
30.10.2019, 22:33 8
совсем не понял что делает программа, ввел дату, высветились какие то другие даты, что они значат - не понятно
0
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
30.10.2019, 22:37 9
мама Стифлера, вы серьёзно?) Вывод согласно условию задачи. Для дат с лидирующим нулём можно немного поправить printf.
C
1
printf("%02hhu.%02hhu.%hu\n", result, i, year);
0
из племени тумба-юбма
2435 / 1764 / 411
Регистрация: 29.11.2015
Сообщений: 8,573
Записей в блоге: 15
31.10.2019, 01:48 10
Цитата Сообщение от nalbe666 Посмотреть сообщение
вы серьёзно?) Вывод согласно условию задачи
Прошу прощения, сам не так задание понял - понял, что нужны все четверги от заданной даты. Все отлично у вас получилось.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2019, 01:48
Помогаю со студенческими работами здесь

Последний день текущего месяца
Доброго времени суток форумчане. Подскажите каким образом можно узнать методами vba, является ли...

Как получить последний день месяца
Получаю первый день предыдущего месяца таким образом: echo date(&quot;1.m.Y&quot;, strtotime('-1 month'));...

Как получить последний день месяца?
Пытаюсь задать диапазон типа BETWEEN AND , а как этот самый последний день достать - не пойму.

Определить последний день текущего месяца
Есть задание : Определить, сколько часов и минут осталось до конца текущего месяца. Вот что я...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru