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

Вывод календаря

01.09.2019, 16:04. Показов 3234. Ответов 14
Метки нет (Все метки)

Вот в чем вопрос мне надо вывести даты календаря таким образом:

_1 _8 15 22 29
_2 _9 16 23 30
_3 10 17 24 31
_4 11 18 25
_5 12 19 26
_6 13 20 27
_7 14 21 28

Заметьте вместо знака _ надо быть пробел, если в кратце для однозначный и двухзначный чисел выделены два ячейки

Можете помочь с этим?

я написал небольшой кусок кода он выведет в таком виде:
1 8 15 22 29
2 9 16 23 30
3 10 17 24 31
4 11 18 25
5 12 19 26
6 13 20 27
7 14 21 28

а здесь перед однозначных числах попросту пробела нет

вот что выходит и вот что надо сделать
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Изображения
  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2019, 16:04
Ответы с готовыми решениями:

Программа календаря с параметром
Написал я программу вызова календаря на указанный код. Задание такое 1) При вызове программы без...

Создание календаря на текущий год
Ребята объясните пожалуйста как сделать календарь на текущий год(нужно что бы он прокрутился)...

Написать программу СТАРОЯПОНСКОГО КАЛЕНДАРЯ))
В старояпонском календаре был принят 12-летний цикл. Годы внутри цикла носили названия животных:...

Класс для создания календаря
помогите пожалуйста создать класс для определения дня недели по календарной дате. Дата – три целых...

14
1937 / 1764 / 824
Регистрация: 23.01.2014
Сообщений: 6,208
01.09.2019, 16:10 2
Цитата Сообщение от Xait Посмотреть сообщение
вот что выходит и вот что надо сделать
Код покажите.
0
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
01.09.2019, 16:11 3
C++
1
cout<<setw(3)<<Число;
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
01.09.2019, 16:34  [ТС] 4
pav1uxa, вот код,
вам надо ввести 4 1 4
Pvt, а вот сама задача: Календарь майя

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
 
using namespace std;
int main()
{
    int D, I, K;
    bool check[12] = { 0 };
    int year[12][7][6] = { 0 };
 
    cin >> D;
    cin >> I;
    cin >> K;
 
    int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
 
    for (int k = 0; k < 12; k++)
    {
        int day = 1;
        for (int i = 0; i < 6; i++)
        {
            for (int j = (i == 0 ? n : 0); j < 7; j++)
            {
                if (day <= daysInMonth[k])
                {
                    year[k][j][i] = day++;
                    n = (j < 6 ? j + 1 : 0);
                    check[k] = (year[k][0][5] > 0);
                }
            }
        }
    }
    for (int r = 0; r < R; r++)
    {
        for (int i = 0; i < 7; i++)
        {
            for (int k = 0; k < K; k++)
            {
                int t = 5;
                for (int a = 0; a < R; a++)
                {
                    if (check[a * K + k])
                    {
                        t++;
                        break;
                    }
                }
                for (int j = 0; j < t; j++)
                {
                    //if (j)
                        cout << setw(j ? 3:2);
                    if (year[r * K + k][i][j] == 0)
                        cout << ' ';
                    else
                        cout << year[r * K + k][i][j];
                }
                cout << "   ";
            }
            cout << "\n";
        }
        cout << "\n";
    }
    return 0;
}
0
Продавец времени
5799 / 3205 / 735
Регистрация: 12.03.2015
Сообщений: 15,184
01.09.2019, 17:20 5
так норм?
0
Evg
Эксперт CАвтор FAQ
21204 / 8220 / 633
Регистрация: 30.03.2009
Сообщений: 22,538
Записей в блоге: 30
01.09.2019, 18:06 6
https://www.cyberforum.ru/blogs/18334/blog507.html раздел 6.1
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 06:12  [ТС] 7
Есть задача в котором все пробелы заменить на знак _
сама задача
Как известно, календарь майя заканчивался на 2012 году. Однако Чарли Фрост считает, что
календарь должен быть другим. Поэтому он попросил Джексон Кёртиса, чтобы тот помог составить календарь. Так как календарь Чарли Фроста будут проверять многие ученые, то к календарю
существуют четкие условия.
Календарь состоит из блоков, каждый из которых соответствует одному месяцу. Блоки расположены в виде таблицы из k столбцов и 12/k строк (k выбирается делителем числа 12). Месяцы
выводятся в следующем порядке: первая строка содержит блоки, соответствующие месяцам с первого по k-ый, следующая – с (k + 1)-го по 2k-ый, и т. д.
Ширина всех блоков в столбце должна быть одинакова, высота всех блоков равна семи (числу
дней в неделе). Между блоками различных строк таблицы выводится пустая строка, в каждой строке
между соседними блоками из разных столбцов выводится три пробела.
Блок, соответствующий месяцу, устроен следующим образом. Каждой (в том числе неполной)
неделе данного месяца в блоке соответствует столбец, имеющий ширину, равную двум. Между двумя
соседними столбцами в каждой строке выводится один пробел. Если несколько блоков располагаются в одном столбце календаря, то для выравнивания ширины в те блоки, которые содержат меньше
недель, в конец добавляется необходимое число пустых столбцов-недель. При этом разные столбцы
календаря могут иметь разную ширину.
Все числа месяца заносятся в блок, соответствующий этому месяцу. Число заносится строку
блока, соответствующую дню недели, на который приходится число в этом месяце. Число заносится
в столбец блока, соответствующий неделе, к которой относится данное число. Однозначные числа
дополняются слева одним пробелом. Таким образом, числа в столбце оказываются выравнены по
правому краю.

Так как Кертис сейчас занят спасением своей семьи, то составить такой календарь поручили
вам.

Формат входных данных
На вход в единственной строке поступают три целых положительных числа d, i и k (1 <= d <= 7,
0 <= i <= 1) — день недели, на который приходится первое января, параметр високосности года и
число столбцов из блоков месяцев в календаре. При этом если i = 1, если год високосный и i = 0
если год не високосный. Гарантируется что k является делителем 12.


Формат выходных данных
Выведите календарь в том формате, в котором требует Чарли Фрост.



Замечание
Для удобства, в примере мы заменили знак пробела на нижнее подчёркивание. При посылке
задачи вам надо выводить пробелы во всех тестах (включая первый).


входные данные
4 1 4

выходные данные
____5_12_19_26__________2__9_16_23____1__8_15_22_29_______5_ 12_19_26___
____6_13_20_27__________3_10_17_24____2__9_16_23_30_______6_ 13_20_27___
____7_14_21_28__________4_11_18_25____3_10_17_24_31_______7_ 14_21_28___
_1__8_15_22_29__________5_12_19_26____4_11_18_25_______1__8_ 15_22_29___
_2__9_16_23_30__________6_13_20_27____5_12_19_26_______2__9_ 16_23_30___
_3_10_17_24_31__________7_14_21_28____6_13_20_27_______3_10_ 17_24______
_4_11_18_25__________1__8_15_22_29____7_14_21_28_______4_11_ 18_25______
____________________________________________________________ ___________
____3_10_17_24_31_______7_14_21_28_______5_12_19_26_______2_ _9_16_23_30
____4_11_18_25_______1__8_15_22_29_______6_13_20_27_______3_ 10_17_24_31
____5_12_19_26_______2__9_16_23_30_______7_14_21_28_______4_ 11_18_25___
____6_13_20_27_______3_10_17_24_______1__8_15_22_29_______5_ 12_19_26___
____7_14_21_28_______4_11_18_25_______2__9_16_23_30_______6_ 13_20_27___
_1__8_15_22_29_______5_12_19_26_______3_10_17_24_31_______7_ 14_21_28___
_2__9_16_23_30_______6_13_20_27_______4_11_18_25_______1__8_ 15_22_29___
____________________________________________________________ ___________
____6_13_20_27__________4_11_18_25____1__8_15_22_29_______6_ 13_20_27___
____7_14_21_28__________5_12_19_26____2__9_16_23_30_______7_ 14_21_28___
_1__8_15_22_29__________6_13_20_27____3_10_17_24_______1__8_ 15_22_29___
_2__9_16_23_30__________7_14_21_28____4_11_18_25_______2__9_ 16_23_30___
_3_10_17_24__________1__8_15_22_29____5_12_19_26_______3_10_ 17_24_31___
_4_11_18_25__________2__9_16_23_30____6_13_20_27_______4_11_ 18_25______
_5_12_19_26__________3_10_17_24_31____7_14_21_28_______5_12_ 19_26______
ВОт сама задача на фото:
https://www.cyberforum.ru/atta... 1567108873
https://www.cyberforum.ru/atta... 1567108873
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 06:15  [ТС] 8
Ну в обшем левую фото надо сделать как правая
0
Миниатюры
Вывод календаря   Вывод календаря  
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 10:47  [ТС] 9
Вот исходный код
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
#include <iostream>
#include <iomanip>
 
using namespace std;
int main()
{
    int D, I, K;
    bool check[12] = { 0 };
    int year[12][7][6] = { 0 };
 
    cin >> D;
    cin >> I;
    cin >> K;
 
    int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
 
    for (int k = 0; k < 12; k++)
    {
        int day = 1;
        for (int i = 0; i < 6; i++)
        {
            for (int j = (i == 0 ? n : 0); j < 7; j++)
            {
                if (day <= daysInMonth[k])
                {
                    year[k][j][i] = day++;
                    n = (j < 6 ? j + 1 : 0);
                    check[k] = (year[k][0][5] > 0);
                }
            }
        }
    }
    for (int r = 0; r < R; r++)
    {
        for (int i = 0; i < 7; i++)
        {
            for (int k = 0; k < K; k++)
            {
                int t = 5;
                for (int a = 0; a < R; a++)
                {
                    if (check[a * K + k])
                    {
                        t++;
                        break;
                    }
                }
                for (int j = 0; j < t; j++)
                {
                    //if(j)
                        cout << setw(j ? 3:2);
                    if (year[r * K + k][i][j] == 0)
                        cout << '-';
                    else
                    {
                        cout << year[r * K + k][i][j];
                    }
                }
                if (k < K - 1) 
                    cout << "---";
            }
            cout << "\n";
        }
 
        cout << "\n";
    }
    return 0;
}


Добавлено через 4 часа 30 минут
pav1uxa, Pvt, Evg,
Выше указал исходный код и как его исправить, можете помочь с исправлением кода?
0
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
02.09.2019, 14:27 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    struct tm t;
    //t.tm_mon=9;
    //t.tm_year=2019;
    cout<<"month year: ";
    cin>>t.tm_mon>>t.tm_year;
    int nd=(t.tm_mon%2)^(t.tm_mon>7)?31:30;
    if(t.tm_mon==2)
    {
        int y=t.tm_year;
        nd=y%4==0 &&(y%100 || y%100==0 && y%400==0)?29:28;
    }
    t.tm_year-=1900;
    t.tm_mon--;
    t.tm_mday=1;
    mktime(&t);
    int a[6][7]={0};
    int w=(t.tm_wday+6)%7;
    for(int d=1; d<=nd; w++)
        a[w/7][w%7]=d++;
    for(int i=0; i<7; i++,cout<<endl)
        for(int j=0; j<6; j++)
            if(a[j][i]) cout<<setw(2)<<a[j][i]<<" ";
            else cout<<"   ";
0
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
02.09.2019, 21:01  [ТС] 11
В общем я решил ошибку с пробелами
Так появился след. ошибка, на переходе новую строку вместо "/n" сделать полный _________
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int D, I, K;
    bool check[12] = { 0 };
    int year[12][7][6] = { 0 };
    cin >> D;
    cin >> I;
    cin >> K;
    int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
    for (int k = 0; k < 12; k++)
    {
        int day = 1;
        for (int i = 0; i < 6; i++)
        {
            for (int j = (i == 0 ? n : 0); j < 7; j++)
            {
                if (day <= daysInMonth[k])
                {
                    year[k][j][i] = day++;
                    n = (j < 6 ? j + 1 : 0);
                    check[k] = (year[k][0][5] > 0);
                }
            }
        }
    }
    for (int r = 0; r < R; r++)
    {
        for (int i = 0; i < 7; i++)
        {
            for (int k = 0; k < K; k++)
            {
                int t = 5;
                for (int a = 0; a < R; a++)
                {
                    if (check[a * K + k])
                    {
                        t++;
                        break;
                    }
                }
                for (int j = 0; j < t; j++)
                {
                    if (j)
                        cout  << setw(1) << "-";
                    if (year[r * K + k][i][j] == 0)
                        cout << '-' << '-';
                    else
                    {
                        if (year[r * K + k][i][j] < 10)
                            cout << "-" << year[r * K + k][i][j];
                        else cout << year[r * K + k][i][j];                         
                    }
 
                }
                if (k < K - 1)
                    cout << "---";
            }
            cout << "\n";
        }
        /*for (int i = 0; i < (17*K)+(K-1); i++)
            cout << "-";*/
        cout << "\n";
    }
    return 0;
}


как на правом фото надо сделать
0
Миниатюры
Вывод календаря   Вывод календаря  
1517 / 735 / 336
Регистрация: 17.11.2018
Сообщений: 1,836
02.09.2019, 22:59 12
Держи. Но не думаю, что это поможет...
Кликните здесь для просмотра всего текста
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
int main()
{
    int D, I, K;
    bool check[12] = { 0 };
    int year[12][7][6] = { 0 };
    cin >> D;
    cin >> I;
    cin >> K;
    int daysInMonth[] = { 31, 28 + I, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int R = 12 / K;
    int n = D - 1;
 
    for( int k = 0; k < 12; k++ )
    {
        int day = 1;
        for( int i = 0; i < 6; i++ )
        {
            for( int j = ( i == 0 ? n : 0 ); j < 7; j++ )
            {
                if( day <= daysInMonth[k] )
                {
                    year[k][j][i] = day++;
                    n = ( j < 6 ? j + 1 : 0 );
                    check[k] = ( year[k][0][5] > 0 );
                }
            }
        }
    }
    for( int r = 0; r < R; r++ )
    {
        int cnt;
        for( int i = 0; i < 7; i++ )
        {
            cnt = 0;
            int t;
            for( int k = 0; k < K; k++ )
            {
                 t = 5;
                for( int a = 0; a < R; a++ )
                {
                    if( check[a * K + k] )
                    {
                        t++;
                        break;
                    }
                }  
 
                for( int j = 0; j < t; j++ )
                {
                    if( j )
                    {
                        cout << '-';
                        cnt++;
                    }
 
                    if( year[r * K + k][i][j] == 0 )
                    {
                        cout << '-' << '-';
                    }
                    else
                    {
                        if( year[r * K + k][i][j] < 10 )
                            cout << '-' << year[r * K + k][i][j];
                        else
                            cout << year[r * K + k][i][j];
                    }
                    cnt += 2;
                }
                if( k < K - 1 )
                {
                    cout << "---";
                    cnt += 3;
                }
 
            }
            cout << endl;
        }
        if( r < R - 1 )
        {
            for( int a = 1; a <= cnt; a++ )
                cout << '-';
            cout << endl;
        }
    }
    return 0;
}
1
1 / 1 / 0
Регистрация: 04.11.2017
Сообщений: 58
03.09.2019, 06:58  [ТС] 13
analogov net, да НИЧЕГО не изменилось все равно на 17 тесте дал ошибку))
1
1 / 1 / 0
Регистрация: 04.09.2019
Сообщений: 6
05.09.2019, 23:09 14
Так есть ответ на эту задачу??
1
0 / 0 / 0
Регистрация: 26.06.2019
Сообщений: 9
26.04.2021, 23:17 15
нет
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2021, 23:17

Написание календаря для любого года
#include &lt;math.h&gt; using namespace std; bool vis(int); int day_in_year(int); int...

Алгоритм календаря игр (например в футболе)
необходимо составить календарь футбольных матчей, допустим есть 6 команд char *teams = {&quot;TEAM...

Программа выводит изображение календаря на любой месяц
Программа выводит изображение календаря на любой месяц. Выходные и праздничные дни выделяются...

Вывести по введенному году, какому животному восточного календаря соответствует этот год
Вывести по введенному году, какому животному восточного календаря соответствует этот год. Годы...


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

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

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