Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 35
1

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

27.04.2013, 19:40. Просмотров 667. Ответов 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2013, 19:40
Ответы с готовыми решениями:

Откомментируйте задачи
Огромная просьба откомментировать код,желательно каждый цикл,заранее спасибо!! 1) //...

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

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

Календарь
Не могу доделать календарь, а именно просто хочу чтобы был сдвиг на необходимые дни. Изначально...

5
266 / 188 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.04.2013, 20:05 2
Цитата Сообщение от 11101010 Посмотреть сообщение
почему в 18й строке вычитаем 2008?
)) может проще спросить у того кто этот код писал?, предположу что 2008 год был високосным ,хотя xz

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

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

Добавлено через 26 секунд
Код лучше всего стереть и написать все с начала.
0
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 35
28.04.2013, 15:46  [ТС] 5
а что с этим кодом-то не так?
0
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
28.04.2013, 15:55 6
Листинг в первом посте хороший пример того, как нельзя комментировать код.
Писать комментарии тоже надо уметь, в этом коде мы видим, что несмотря на наличие комментов, код не стал более понятным.

А по поводу просьбы помочь разобраться, вот хороший совет:
Цитата Сообщение от MrGluck Посмотреть сообщение
Код лучше всего стереть и написать все с начала.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2013, 15:55

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

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

Восточный Календарь
Давным давно, в одной альтернативной вселенной, в восточном календаре был принят 6060-летний цикл,...

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

Календарь программиста
Нужно написать консольное приложение выводящее календарь на 2006 год в таком формате, как на...


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

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

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