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

Вывести календарь на заданный год

13.04.2017, 07:53. Просмотров 7550. Ответов 20
Метки нет (Все метки)


Ребят, помогите, пожалуйста, написать календарь на год c++
Год определяется пользователем
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2017, 07:53
Ответы с готовыми решениями:

Проверить, является ли заданный год високосным и вывести следующий високосный год
В первую строку выведите YES, если данный год является високосным и NO, если не является. Во второй...

Вывести календарь на год
Как сделать так, чтобы печатался календарь 3х4. Он у меня печатает 1х12. Ещё нужно установить...

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

Написал календарь на 2015 год, но не получается сопоставить числа и дни
Здравствуйте! Писал календарь на 2015 год, по видео делал всё. Всё понятно до момента...

20
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 28
13.04.2017, 08:19 2
Вопрос уточни... И ты сам попробуй написать...Если вопросы будут говори...
0
Модератор
Эксперт С++
10392 / 8665 / 5244
Регистрация: 18.12.2011
Сообщений: 23,177
13.04.2017, 09:36 3
Fargete, Пользуйтесь поиском по разделу
Создать календарь на год
0
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 16:40  [ТС] 4
Ну вот допустим пока на два месяца, только не пойму, почему if не правильно работает, просто, если я ввожу 0, то он всё равно выдает 29 вместо 28
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int a, Feb, i, j;
    cout << "Является ли год високосным? (0-нет; 1-да):";
    cin >> a;
    if (a = 0)
        Feb = 28;
    if (a = 1)
        Feb = 29;
 
 
    int b;
    cout << "Введите с какого дня недели начинается январь (1-7 = пн-вс):";
    cin >> b;
    cout << endl;
 
    cout << "                     Январь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for ( i = 1; i < b; i++)
        cout << "\t";
    for ( i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
 
 
 
    cout << "                     Февраль" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for ( i = 1; i < b; i++)
        cout << "\t";
    for ( i = 1; i <= Feb; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
 
 
 
 
    return 0;
}
0
Эксперт C
25429 / 15823 / 3385
Регистрация: 24.12.2010
Сообщений: 34,606
13.04.2017, 16:48 5
Цитата Сообщение от Fargete Посмотреть сообщение
почему if не правильно работает
Потому что вы перепутали оператор сравнения (==) с оператором присваивания (=)
1
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 16:53  [ТС] 6
Точно. Спасибо
Элементарно же
0
Модератор
Эксперт CЭксперт С++
4287 / 3849 / 705
Регистрация: 07.10.2015
Сообщений: 7,887
13.04.2017, 16:57 7
Fargete, спрашивать, является ли год високосным и день недели 1 января как-то неинтересно
Автоматом посчитать не хотите?

Добавлено через 2 минуты
Можете использовать тот факт, что 1 января 2000 года была суббота
Високосный год, если делится на 4.
1
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 17:02  [ТС] 8
Цитата Сообщение от Байт Посмотреть сообщение
Потому что вы перепутали оператор сравнения (==) с оператором присваивания (=)
А вот не подскажите, в ФЕВРАЛЕ что нужно поставить, чтобы он мне начал писать с нужного дня недели. Например, если январь закончился на Чт, то февраль должен печататься с Чт. Как это можно реализовать?

Добавлено через 5 минут
Цитата Сообщение от _liv_ Посмотреть сообщение
спрашивать, является ли год високосным и день недели 1 января как-то неинтересно
Автоматом посчитать не хотите?
Ну я же только учусь
Сложненько чутка
Мне бы для начала так написать
0
Модератор
Эксперт CЭксперт С++
4287 / 3849 / 705
Регистрация: 07.10.2015
Сообщений: 7,887
13.04.2017, 17:08 9
Цитата Сообщение от Fargete Посмотреть сообщение
что нужно поставить, чтобы он мне начал писать с нужного дня недели
Вставьте после вывода текущего месяца:
C++
1
b = (b+31)%7;
где 31 - число дней выведенного месяца.
После февраля пишем:
C++
1
b = (b+Feb)%7;
и так далее...
1
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 17:11  [ТС] 10
Цитата Сообщение от _liv_ Посмотреть сообщение
Вставьте после вывода текущего месяца:
C++
1
b = (b+31)%7;
Спасибо) А я просто b = i и не мог понять, почему он не работает)
0
Эксперт C
25429 / 15823 / 3385
Регистрация: 24.12.2010
Сообщений: 34,606
13.04.2017, 17:15 11
Цитата Сообщение от _liv_ Посмотреть сообщение
Високосный год, если делится на 4.
Не совсем и не всегда.
1900 - не високосный
2000 - високосный
1
Модератор
Эксперт CЭксперт С++
4287 / 3849 / 705
Регистрация: 07.10.2015
Сообщений: 7,887
13.04.2017, 17:21 12
Fargete, проверку на 1 и 0 (високосность) лучше сделать так:
C++
1
2
3
4
    if (a == 1)
        Feb = 29;
    else
        Feb = 28;
Или так:
C++
1
    Feb = 28 + (a == 1);
Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
Не совсем и не всегда.
Знамо дело, но в интервале 2000-2099 это работает

Добавлено через 2 минуты
Более строгое правило: високосный, если делится на 4, но не високосный, если делится на 100, но високосный, если делится на 400.
1
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 17:39  [ТС] 13
Цитата Сообщение от _liv_ Посмотреть сообщение
проверку на 1 и 0 (високосность) лучше сделать так
А вот я код дописал, но возникает проблема с Апрелем если считать что год не високосный и январь начинается с пн. Он мне не так пропечатывает. Если менять значения дня, с которого начинается январь, то неправильная пропечатка месяца может возникать и в июне и в июле и тд
Вот код:
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int a, b, Feb, i;
    cout << "Является ли год високосным? (0-нет; 1-да):";
    cin >> a;
    if (a == 1)
        Feb = 29;
    else
        Feb = 28;
 
    cout << "Введите с какого дня недели начинается январь (1-7 = пн-вс):";
    cin >> b;
    cout << endl;
 
    cout << "                     Январь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for ( i = 1; i < b; i++)
        cout << "\t";
    for ( i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 31) % 7;
 
 
    cout << "                     Февраль" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for ( i = 1; i < b; i++)
        cout << "\t";
    for ( i = 1; i <= Feb; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + Feb) % 7;
 
    cout << "                     Март" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 31) % 7;
 
    cout << "                     Апрель" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 30; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 30) % 7;
 
 
    cout << "                     Май" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 31) % 7;
 
 
    cout << "                     Июнь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 30; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 30) % 7;
 
 
    cout << "                     Июль" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 31) % 7;
 
 
    cout << "                     Август" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 31) % 7;
 
    cout << "                     Сентябрь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 30; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 30) % 7;
 
 
    cout << "                     Октябрь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 31) % 7;
 
    cout << "                     Ноябрь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 30; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    b = (b + 30) % 7;
 
 
    cout << "                     Декабрь" << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (i = 1; i < b; i++)
        cout << "\t";
    for (i = 1; i <= 31; i++)
    {
        cout << i << "\t";
        if ((b + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
4287 / 3849 / 705
Регистрация: 07.10.2015
Сообщений: 7,887
13.04.2017, 17:49 14
Fargete, так и есть Надо после каждой
C++
1
    b = (b + 31) % 7;
дописать
C++
1
    b += (b)?0:7;
Добавлено через 1 минуту
Просто привык считать с 0, а тут с 1, необходима поправочка...
0
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 17:54  [ТС] 15
Цитата Сообщение от _liv_ Посмотреть сообщение
C++
1
b += (b)?0:7;
Вот спасибо огроменное
Очень выручили)))

Последний вопрос
Что эта штука делает?
b += (b) ? 0 : 7;
0
Модератор
Эксперт CЭксперт С++
4287 / 3849 / 705
Регистрация: 07.10.2015
Сообщений: 7,887
13.04.2017, 17:59 16
Лучший ответ Сообщение было отмечено Fargete как решение

Решение

C++
1
2
3
4
if (b!=0)
  b += 0;
else
  b+=7;
Добавлено через 1 минуту
Добавляем 7, если остаток от деления на 7 равен 0

Добавлено через 2 минуты
Можно так:
C++
1
2
if (b==0)
  b = 7;
1
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
13.04.2017, 18:01  [ТС] 17
Цитата Сообщение от _liv_ Посмотреть сообщение
Добавляем 7, если остаток от деления на 7 равен 0
Вот теперь СПАСИБО
0
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
17.04.2017, 20:12  [ТС] 18
_liv_, а вот не подскажите ещё что. Мне преподаватель сказал, что я решил задачу "слишком в лоб". И показал, как переписать этот код через функцию. Вот сам код
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
#include "stdafx.h"
#include  <iostream>
 
using namespace std;
 
int countMonth(int startDay, int daysNumber, char* name) {
    int lastDayNumber;
    cout << "                      " << name << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (int i = 1; i < startDay; i++)
        cout << "\t";
    for (int i = 1; i <= daysNumber; i++)
    {
        cout << i << "\t";
        if ((startDay + i) % 7 == 1)
            cout << endl;
        if (daysNumber == i)
        {
            lastDayNumber = (daysNumber + i) % 7;
 
        }
    }
    cout << endl;
    cout << endl;
    return lastDayNumber;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    countMonth(1, 31, "Январь");
    countMonth(1, 28, "Февраль");
 
 
    return 0;
}
Так вот в чём проблема, не могу понять как мне переписать эту формулу для функции // b = (b + 31) % 7;
// b += (b) ? 0 : 7;
0
Модератор
Эксперт CЭксперт С++
4287 / 3849 / 705
Регистрация: 07.10.2015
Сообщений: 7,887
18.04.2017, 10:37 19
Лучший ответ Сообщение было отмечено Fargete как решение

Решение

Fargete, получилось? Если нет, вот Вам программка:
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
#include <iostream>
 
using namespace std;
 
int countMonth(int startDay, int daysNumber, char* name) {
    cout << "                      " << name << endl << "__________________________________________________" << endl;
    cout << "Пн\tВт\tСр\tЧт\tПт\tСб\tВс" << endl;
    for (int i = 1; i < startDay; i++)
        cout << "\t";
    for (int i = 1; i <= daysNumber; i++)
    {
        cout << i << "\t";
        if ((startDay + i) % 7 == 1)
            cout << endl;
    }
    cout << endl;
    cout << endl;
    startDay = (startDay+daysNumber)%7;
    if (startDay==0)
        startDay = 7;
    return startDay;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int a, b, Feb, i;
    cout << "является ли год високосным? (0-нет; 1-да):";
    cin >> a;
    if (a == 1)
        Feb = 29;
    else
        Feb = 28;
 
    cout << "Введите с какого дня недели начинается Январь (1-7 = пн-вс):";
    cin >> b;
    cout << endl;
 
    b = countMonth(b, 31, "Январь");
    b = countMonth(b, Feb, "Февраль");
    b = countMonth(b, 31, "Март");
    b = countMonth(b, 30, "Апрель");
    b = countMonth(b, 31, "Май");
    b = countMonth(b, 30, "Июнь");
    b = countMonth(b, 31, "Июль");
    b = countMonth(b, 31, "Август");
    b = countMonth(b, 30, "Сентябрь");
    b = countMonth(b, 31, "Октябрь");
    b = countMonth(b, 30, "Ноябрь");
    b = countMonth(b, 31, "Декабрь");
    system("pause");
}
1
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 48
19.04.2017, 18:27  [ТС] 20
_liv_, вот спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2017, 18:27

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

Вывести "Leap Year", если заданный год високосный и "Normal Year" в противном случае
2.На вход программы подается год. Надо вывести слова Leap Year, если этот год високосный и Normal...

Дан год.Вывести на экран название животного,символизирующего этот год по восточному календарю
С использованием switch заранее спасибо

Используя элементы управления «СЧЕТЧИК» и «ПОЛЕ СО СПИСКОМ», построить календарь на заданный год и месяц
Доброго времени суток. Помогите найти ошибку в задании 3 Он не определяет имя..не понимаю в чем...

Из списка студентов группы где приведён год рождения вывести студентов родившихся в заданный год
Из списка студентов группы где приведён год рождения, вывести студентов родившихся в заданный год


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

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

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