Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 14

Написать календарь, чтобы он совпадал с реальным календарем

24.02.2014, 20:26. Показов 3477. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача стоит написать календарь, чтобы он совпадал с реальным календарем (учитывая высокосный год).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.02.2014, 20:26
Ответы с готовыми решениями:

Разместить картинку так, чтобы курсор совпадал с ее центром
Здравствуйте! Вот есть картинка: Image targetIMG = Properties.Resources.target; Я ее размещаю по клику мышки на форму: ...

Найти все годы в данном столетии, календарь которых будет совпадать с календарем заданного года
Есть такое свойство календаря. Он повторяется каждые 28 лет. Это объясняется тем, что в году 52 недели и один день, если бы не было...

DataGridView Как сделать, чтобы в двух разных таблицах совпадал индекс?
Привет всем, подскажите как сделать , чтобы в двух разных таблицах совпадал индекс? Например я выбираю в во второй таблице третью строку, а...

14
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 5
24.02.2014, 21:02
Нарыл старую программу, делал упражнение из книги Дейтела, вроде работает
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Calendar 2011 - 2039
 
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
 
int main(int argc, char* argv[])
{
    int year, month = 0, day = 0, monthDay, stMonthDay, leapDayPlus = 0, counter;
    int monthLimit[12] = {30, 27, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30};
    bool leapYear = false;
 
    while(1)
    {
        printf("Enter year 2011 - 2039: 20");
        scanf("%d",&year);  
        if( year >= 11 && year <= 39 )
            break;
        else
            printf("\nError! For correct work year must be in interval [2011;2039]\n");
    }
    if( (year - 12) % 4 == 0)
    {
        leapYear = true;
        printf("Leap-year\n");
        monthLimit[1] = 28;
    }
    
    for(counter = 0; counter <= year - 11; counter++) 
    {
        if((counter - 2) % 4 == 0)
            leapDayPlus += 1;       // Each leap-year increase this var. by 1, while counter moving from (0) to (year-11)
    }
    stMonthDay = (counter + 4 + leapDayPlus) % 7;   // "stMonthDay" - first day of year in the calendar with taking into account leap-years.
    for(month = 0; month <= 11; month++)
    {
        printf("\n---------------------------------------------------\n");
        switch(month)
        {
        case 0:
            printf("January");
            break;
        case 1:
            printf("Febrary");
            break;
        case 2:
            printf("March");
            break;
        case 3:
            printf("April");
            break;
        case 4:
            printf("May");
            break;
        case 5:
            printf("June");
            break;
        case 6:
            printf("July");
            break;
        case 7:
            printf("August");
            break;
        case 8:
            printf("September");
            break;
        case 9:
            printf("October");
            break;
        case 10:
            printf("November");
            break;
        case 11:
            printf("December");
            break;
        }
        printf("\n");
        printf("Mo\tTu\tWe\tTh\tFr\tSa\tSu\n");
        day = 0;
        while(day < stMonthDay)
            {
                printf("\t");
                day++;
            }
        counter = 0;
        for(day = 0; day <= monthLimit[month]; day++)
        {
            if(((day + stMonthDay) % 7 == 0) && day != 0)
            {
                printf("\n");
                printf("%d\t", day + 1);
                counter = 0;
            }
            else
            {
                printf("%d\t", day + 1);
                counter++;
            }
        }
        if(counter < 6)
            stMonthDay = counter + 1;
        else
            stMonthDay = 0;
        
    }       
 
    getchar();
    getchar();
    return 0;
}
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 14
24.02.2014, 21:08  [ТС]
А вот такой вопрос, если выдать запрос на дату не в промежутке 2011-2039 года, что оно выдаст?
Если поставить условие, что мне нужно любой год найти, будь то 1690 или 2178? как быть?)
0
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 5
24.02.2014, 21:40
У меня, в записной книжке(!) была схема универсального календаря, но там было написано, что она работает на каком-то интервале, уже не помню, вроде около 100 лет. По ней я пробовал сделать, но не получилось, тогда я сделал счетчик дней от текущего 11 года вверх. Идея в том, что порядок дней недели и количества дней в месяце не нарушается никогда (кроме февряля). Теоретически можно точно так же двигаться вниз.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.02.2014, 22:00
Цитата Сообщение от Semen94 Посмотреть сообщение
будь-то 1690 или 2178
Пролептический григорианский календарь
0
Учусь
 Аватар для Humster13
7 / 7 / 5
Регистрация: 16.02.2014
Сообщений: 47
24.02.2014, 23:19
Цитата Сообщение от dazzer Посмотреть сообщение
Нарыл старую программу, делал упражнение из книги Дейтела, вроде работает
Она у Вас не совсем на С++, скорее на Си.. Ниже см. на языке С++, но она написана в KDE, могут возникнуть вопросы по русскому шрифту и паузой в консоле.

Кликните здесь для просмотра всего текста
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Calendar 2011 - 2039
 
//#include "stdafx.h" // - не для KDE
#include <iostream>
#include "math.h"
 
using namespace std;
 
int main(int argc, char* argv[])
{
    int year, month = 0, day = 0, monthDay, stMonthDay, leapDayPlus = 0, counter;
    int monthLimit[12] = {30, 27, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30};
    bool leapYear = false;
    
 
    while(1)
    {
        cout << ("Введите год 2011 - 2039: 20");
        cin >> year;  
        if( year >= 11 && year <= 39 )
            break;
        else
            cout << ("\nОшибка! Для правильной работы год необходимо указать из интервала [2011;2039]\n");
    }
    if( (year - 12) % 4 == 0)
    {
        leapYear = true;
        cout << ("\nВИСОКОСНЫЙ ГОД\n");
        monthLimit[1] = 28;
    }
    
    for(counter = 0; counter <= year - 11; counter++) 
    {
        if((counter - 2) % 4 == 0)
            leapDayPlus += 1;       // Each leap-year increase this var. by 1, while counter moving from (0) to (year-11)
    }
    stMonthDay = (counter + 4 + leapDayPlus) % 7;   // "stMonthDay" - first day of year in the calendar with taking into account leap-years.
    for(month = 0; month <= 11; month++)
    {
        cout << ("\n---------------------------------------------------\n");
        switch(month)
        {
        case 0:
            cout << ("Январь");
            break;
        case 1:
            cout << ("Февраль");
            break;
        case 2:
            cout << ("Март");
            break;
        case 3:
            cout << ("Апрель");
            break;
        case 4:
            cout << ("Май");
            break;
        case 5:
            cout << ("Июнь");
            break;
        case 6:
            cout << ("Июль");
            break;
        case 7:
            cout << ("Август");
            break;
        case 8:
            cout << ("Сентябрь");
            break;
        case 9:
            cout << ("Октябрь");
            break;
        case 10:
            cout << ("Ноябрь");
            break;
        case 11:
            cout << ("Декабрь");
            break;
        }
        cout << "\n";
        cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс\n";
        day = 0;
        while(day < stMonthDay)
            {
                cout << (" \t");
                day++;
            }
        counter = 0;
        for(day = 0; day <= monthLimit[month]; day++)
        {
            if(((day + stMonthDay) % 7 == 0) && day != 0)
            {
                cout << ("\n");
                cout << day + 1 << "\t";
                counter = 0;
            }
            else
            {
                cout << day + 1 << "\t";
                counter++;
            }
        }
        if(counter < 6)
            stMonthDay = counter + 1;
        else
            stMonthDay = 0;
        
    }       
 
    
    return 0;
}


Код рабочий ...



Можно взять за основу, чтоб с нуля не писать.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2014, 00:35
Консоль. Столетие вычисляет неправильно. И, вообще, DOS. Как пример интерфейса :-)
Миниатюры
Написать календарь, чтобы он совпадал с реальным календарем  
Вложения
Тип файла: 7z days.com.7z (11.4 Кб, 14 просмотров)
0
Учусь
 Аватар для Humster13
7 / 7 / 5
Регистрация: 16.02.2014
Сообщений: 47
25.02.2014, 00:44
А исходный код где? Мы тут вроде программить пытаемся.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.02.2014, 01:10
Ну, у меня есть какие-то собственные исходники и календарных расчетов и консольной псевдографики, но тоже достаточно древние. Если есть интерес к консоли (класс-обертка для WinAPI), то выложу, а календарные расчеты несложно сделать по формуле Целлера (Zeller's congruence).
1
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 14
25.02.2014, 01:13  [ТС]
Humster13, Дописал код, чтобы без ошибок запустилась - все нормально. Жаль что только интервал такой маленький)
0
Учусь
 Аватар для Humster13
7 / 7 / 5
Регистрация: 16.02.2014
Сообщений: 47
25.02.2014, 01:22
Цитата Сообщение от Semen94 Посмотреть сообщение
... Жаль что только интервал такой маленький
С интервалом разберемся. Если не срочно, то потихоньку что-нить напишем.

Добавлено через 3 минуты
Цитата Сообщение от gazlan Посмотреть сообщение
по формуле Целлера (Zeller's congruence).
Спасибо за ссылку, пригодится.
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 14
25.02.2014, 02:02  [ТС]
Не срочно, спасибо, сам еще покумекаю чего нибудь.
0
0 / 0 / 0
Регистрация: 13.03.2017
Сообщений: 7
15.03.2017, 14:55
Поясните пожалуйста роль переменной counter в коде.

Добавлено через 10 минут
Humster13, поясните пожалуйста роль переменной counter в коде.
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
15.03.2017, 14:58
YurkaBoyko, Вы серьезно?.. 3 года прошло с начала темы.
0
0 / 0 / 0
Регистрация: 13.03.2017
Сообщений: 7
15.03.2017, 15:01
Nishen, Да, помогите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2017, 15:01
Помогаю со студенческими работами здесь

Сделать так чтобы это стало реальным
работаю с бутстропом (bootstrap) какие то встроенные стили (div class=&quot;row&quot; style=&quot;width: 0px; left: 501.5px;) мешают нормально...

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

Как сделать чтобы уровень змейки и уровень яблока совпадал?
Здравствуйте. Как сделать чтобы уровень змейки и уровень яблока совпадал?

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

Написать программу, которая вычисляет оптимальный вес девушки, сравнивает его с реальным
На с++ в консольном Нужно решить задачу на любой цикл(цикл с постусловием,цикл с пердусловием,цикл с параметром) Написать программу,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru