Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Задача стоит написать календарь, чтобы он совпадал с реальным календарем (учитывая высокосный год).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 20:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать календарь, чтобы он совпадал с реальным календарем (C++):

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

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

Нужно написать календарь на С++ - C++
Помогите написать календарь на c++ ,кому не трудно помогите а то я начинающий в С++ а программку надо сдать!! ((

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

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

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

14
dazzer
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 5
24.02.2014, 21:02 #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
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
Semen94
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 14
24.02.2014, 21:08  [ТС] #3
А вот такой вопрос, если выдать запрос на дату не в промежутке 2011-2039 года, что оно выдаст?
Если поставить условие, что мне нужно любой год найти, будь то 1690 или 2178? как быть?)
0
dazzer
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 5
24.02.2014, 21:40 #4
У меня, в записной книжке(!) была схема универсального календаря, но там было написано, что она работает на каком-то интервале, уже не помню, вроде около 100 лет. По ней я пробовал сделать, но не получилось, тогда я сделал счетчик дней от текущего 11 года вверх. Идея в том, что порядок дней недели и количества дней в месяце не нарушается никогда (кроме февряля). Теоретически можно точно так же двигаться вниз.
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
24.02.2014, 22:00 #5
Цитата Сообщение от Semen94 Посмотреть сообщение
будь-то 1690 или 2178
Пролептический григорианский календарь
0
Humster13
3 / 3 / 1
Регистрация: 16.02.2014
Сообщений: 27
24.02.2014, 23:19 #6
Цитата Сообщение от 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
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
25.02.2014, 00:35 #7
Консоль. Столетие вычисляет неправильно. И, вообще, DOS. Как пример интерфейса :-)
0
Миниатюры
Написать календарь, чтобы он совпадал с реальным календарем  
Вложения
Тип файла: 7z days.com.7z (11.4 Кб, 11 просмотров)
Humster13
3 / 3 / 1
Регистрация: 16.02.2014
Сообщений: 27
25.02.2014, 00:44 #8
А исходный код где? Мы тут вроде программить пытаемся.
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
25.02.2014, 01:10 #9
Ну, у меня есть какие-то собственные исходники и календарных расчетов и консольной псевдографики, но тоже достаточно древние. Если есть интерес к консоли (класс-обертка для WinAPI), то выложу, а календарные расчеты несложно сделать по формуле Целлера (Zeller's congruence).
1
Semen94
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 14
25.02.2014, 01:13  [ТС] #10
Humster13, Дописал код, чтобы без ошибок запустилась - все нормально. Жаль что только интервал такой маленький)
0
Humster13
3 / 3 / 1
Регистрация: 16.02.2014
Сообщений: 27
25.02.2014, 01:22 #11
Цитата Сообщение от Semen94 Посмотреть сообщение
... Жаль что только интервал такой маленький
С интервалом разберемся. Если не срочно, то потихоньку что-нить напишем.

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

Добавлено через 10 минут
Humster13, поясните пожалуйста роль переменной counter в коде.
0
Nishen
397 / 236 / 79
Регистрация: 26.02.2015
Сообщений: 1,075
Завершенные тесты: 2
15.03.2017, 14:58 #14
YurkaBoyko, Вы серьезно?.. 3 года прошло с начала темы.
0
YurkaBoyko
0 / 0 / 0
Регистрация: 13.03.2017
Сообщений: 7
15.03.2017, 15:01 #15
Nishen, Да, помогите пожалуйста.
0
15.03.2017, 15:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2017, 15:01
Привет! Вот еще темы с ответами:

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

Написать программу, которая вычисляет оптимальный вес пользователя, сравнивает его с реальным и выдает рекомендацию - Pascal
Помогите вот с этим заранее благодарен! 1 задание)Написать программу, которая вычисляет оптимальный вес пользователя, сравнивает его с...

Написать календарь - Delphi
помогите пожалуйста!!! нужно составить календарь

написать календарь - Visual C++
Hi всем! Нужно вывести на экран календарь месяца, :wall:помогите! написать календарь на Visual с++, например, календарь января 2009г. Сенк...


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

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

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