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

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

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

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

27.04.2013, 19:40. Просмотров 515. Ответов 5
Метки нет (Все метки)

Объясните пожалуйста, почему в 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++
Огромная просьба откомментировать код,желательно каждый цикл,заранее спасибо!! 1) // Oleynik_tipovik1.cpp: определяет точку входа...

календарь - C++
Даны натуральные числа А,В, С, которые обозначают число, месяц и год. Получить тройку чисел, соответствующую следующему дню. #include...

Календарь - C++
Не могу доделать календарь, а именно просто хочу чтобы был сдвиг на необходимые дни. Изначально задание звучало так: Написать функцию...

Календарь - C++
Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, ... , 6 — суббота, 7 — воскресенье. Дано целое число K, лежащее в...

Календарь в С - C++
Задали задание написать календарь в С. Что бы вверху были дни недели написаные в строчку, а под ними писались в столбик числа от 1 до 31,...

Календарь на год - C++
Доброго времени суток, никак не получается решить задачу. Написать программу формирования календаря для любого года, начиная с 1900 (1...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
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
Модератор
Эксперт CЭксперт С++
7209 / 4375 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
28.04.2013, 15:55 #6
Листинг в первом посте хороший пример того, как нельзя комментировать код.
Писать комментарии тоже надо уметь, в этом коде мы видим, что несмотря на наличие комментов, код не стал более понятным.

А по поводу просьбы помочь разобраться, вот хороший совет:
Цитата Сообщение от MrGluck Посмотреть сообщение
Код лучше всего стереть и написать все с начала.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 15:55
Привет! Вот еще темы с ответами:

Календарь занятий - C++
Володе очень понравились задачи олимпиады по информатике, поэтому он решил ходить на занятия кружка по программированию. Придя на первое...

Универсальный календарь - C++
Требуется программа &quot;универсальный календарь&quot; для расчета дня недели для заданной даты, отображения календаря на неделю, месяц и...

Восточный календарь - C++
Нужна помощь,ну или кто может написать код программы,про Восточный календарь! Сам текст: В восточном календаре принят 60 летний...

Старояпонский календарь - C++
Помогите написать программу: В старояпонском календаре был принят 60-летний цикл, состоявший из пяти 12-летних подциклов. Подциклы...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.04.2013, 15:55
Ответ Создать тему
Опции темы

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