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

Откомментируйте календарь - C++

Восстановить пароль Регистрация
 
11101010
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 35
27.04.2013, 19:40     Откомментируйте календарь #1
Объясните пожалуйста, почему в 18й строке вычитаем 2008? Ещё пожалуйста откомментируйте строки снизу, что календарь отрисовывают (где формулы), мол, почему эти числа и что там и как происходит. Нужно как-то подсветить праздники и выходные, как это можно сделать?
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
#include <iostream>
using namespace std;
 
int DaysPerMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int DayForw[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
char cMonths[] = "Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec";
int DaysPerYear = 365;
 
int main()
{
    cout << "Enter the month & the year for calendar (mm yyyy): ";
    int iMonth, iYear;
    int* Direction;
    cin >> iMonth >> iYear;
    cout << endl;
    int iCorrect, DaysDist;
 
    DaysDist = (iYear - 2008);
    Direction = &DayForw[0];
 
    iCorrect = (DaysDist)/4; // запоминаем количество високосных лет, для коррекции дней недели...
    if (DaysDist>0)
        iCorrect++;
    if ((DaysDist)%4 == 0) // если високосный год, то корректируем вспом. массивы...
    {
        if (DaysDist>0)
            iCorrect--;
        for (int i=2; i < 12; i++) // массив для коррекции по месяцу...
            DayForw[i]++;
        DaysPerMonth[1]++; // массив количеств дней в месяце...
    }
 
    DaysDist = DaysDist*365+iCorrect+Direction[iMonth-1];
    int DayOfMonth;
    if (DaysDist < 0)
        DayOfMonth= 7 - (5-DaysDist)%7;
    else
        DayOfMonth = (DaysDist+1)%7 + 1;
    cout << "\t    ************ " << cMonths+(iMonth-1)*4 << " " << iYear << " ************" << endl << endl;
    cout << "\tMon\tTue\tWed\tThu\tFri\tSat\tSun" << endl << endl;
    for (int i=1; i<DayOfMonth; i++)
        cout << "\t";
    for (int i=0; i<DaysPerMonth[iMonth-1]; DayOfMonth++, i++)
    {
        cout << "\t" << i+1;
        if (DayOfMonth==7)
        {
            DayOfMonth=0;
            cout << endl << endl; 
        }
    }
    cout << endl << endl << "\t    ************ " << cMonths+(iMonth-1)*4 << " " << iYear << " ************" << endl;
    cin >> iYear;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2013, 19:40     Откомментируйте календарь
Посмотрите здесь:

C++ календарь
Универсальный календарь C++
Календарь в С C++
Восточный календарь C++
C++ Откомментируйте задачи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
27.04.2013, 20:05     Откомментируйте календарь #2
Цитата Сообщение от 11101010 Посмотреть сообщение
почему в 18й строке вычитаем 2008?
)) может проще спросить у того кто этот код писал?, предположу что 2008 год был високосным ,хотя xz

Добавлено через 2 минуты
используй отладчик, запусти программу в пошаговом режиме , смотри как меняются значения переменных и все станет ясно .
11101010
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 35
28.04.2013, 01:04  [ТС]     Откомментируйте календарь #3
Если 2008 был високосным, то и 2004й тоже был, и если вычитать 2004, то дни недели сбиваются, правильно лишь при 2008. До автора врядли доберусь, посему может тут догадается кто-то. При том, ещё как-то праздники надо выделить, есть идеи?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
28.04.2013, 01:09     Откомментируйте календарь #4
Цитата Сообщение от 11101010 Посмотреть сообщение
Объясните пожалуйста, почему в 18й строке вычитаем 2008?
потому что велосипед этот с костыльком.

Вы уверены, что вам в консоли нужно извращаться с рисованием, подсветкой?
Ну тогда ASCII драйвер вам в помощь на лине и древней винде и завихрени с conio.h/windows.h на окнах.

Добавлено через 26 секунд
Код лучше всего стереть и написать все с начала.
11101010
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 35
28.04.2013, 15:46  [ТС]     Откомментируйте календарь #5
а что с этим кодом-то не так?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.04.2013, 15:55     Откомментируйте календарь #6
Листинг в первом посте хороший пример того, как нельзя комментировать код.
Писать комментарии тоже надо уметь, в этом коде мы видим, что несмотря на наличие комментов, код не стал более понятным.

А по поводу просьбы помочь разобраться, вот хороший совет:
Цитата Сообщение от MrGluck Посмотреть сообщение
Код лучше всего стереть и написать все с начала.
Yandex
Объявления
28.04.2013, 15:55     Откомментируйте календарь
Ответ Создать тему
Опции темы

Текущее время: 13:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru