Перейти к содержимому

Как написать календарь на c

  • автор:

Вывод календаря по введённому пользователем месяцу и году. (C++)

Всем привет. Я недавно начал учить C++ и сейчас у меня есть задание на написание календаря, но не совсем полного, а только по одному месяцу. Пользователь должен ввести месяц и год и на выводе получить табличку этого календаря. Давно я уже мучаюсь над этой задачей и вот казалось бы, почти решил, но что-то не так.
Если рассматривать 2021 год, то январь и февраль отображаются неверно, остальные месяцы в 2021 году правильно. В январе и февраля есть сдвиг на один день вперед, тоесть месяц начинается на день позже от положенного. Может, кто знает в чем проблема и сможет помочь кодом, буду очень благодарен!
Вот мой код:

#include #include using namespace std; int main() < setlocale(LC_ALL, "Russian"); int month,year; string monthsList[12] = ; int mDays [12] = ; cout«"Введите номер месяца: "; cin»month; while (month < 1 || month >12) < cout«"Неверно введён месяц. Введите номер месяца от 1 до 12, где \n 1 - январь \n 12 - декабрь"; cin»month; >cout«"Введите номер года от 1900 до 2035: "; cin»year; while (year < 1900 || year >2035) < cout«"Неверно введён год. Введите число от 1900 до 2035:\n"; cin»year; >cout«" —------------------------------"«endl; cout«" Calendar - "«year«endl; cout«" —------------------------------"«endl«endl; /* 1) Определим номер дня недели, где: 0 - Понедельник 1 - Вторник 2 - Среда 3 - Четверг 4 - Пятница 5 - Суббота 6 - Воскресенье */ int days; int current; static int t[] = ; int y = year - 1; current = (y + y/4 - y/100 + y/400 + t[month - 1] + 1) % 7; // от 0 до 6 /* 2) Проверка на високосность начиная с нулевого месяца: 0 - январь . 11 - декабрь */ if (int i = month - 1) < if( i==1 ) // 1 - это февраль месяц, так как счёт начинается с 0. if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) days = 29; // Если високосный else days = mDays[i]; else days = mDays[i]; /* 3) Выводим сам календарь */ cout«endl«" —----------"«monthsList[i]«"-------------"«endl; cout«" Пн Вт Ср Чт Пт Сб Вс"«endl; /* 4) Вводим доп. переменные k и j: k - количество дней в неделе от 0 до 6 (0 - ПН; 6 - ВС) j - количество дней в месяце (от 1 до общего в месяце) */ int k; for (k = 0; k < current; k++) cout«" "; for (int j = 1; j 6) < k = 0; cout«endl; >> if (k) cout«endl; current = k; > return 0; > 

Отслеживать

219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков

Как написать календарь на c

Сообщения: 3
Благодарности: 0

Помогите пожалуйста!
Даны целые числа N1, N2, которые обозначают число и месяц.
Например, “1 4” – это “1 апреля”
Требуется разработать и отладить программу подсчёта дня недели этой даты,
если год невисокосный, а 1 января этого года – среда.
Я никак не соображу, как мне дни недели вместе со днями в месяце задать в программе. Т. е.
вот этот кусок:

case 1: puts(“PONEDELNIK \n”); break;
case 2: puts(“VTORNIK \n”); break;
case 3: puts(“SREDA \n”); break;
case 4: puts(“CHETVERG \n”); break;
case 5: puts(“PYTNICA \n”); break;
case 6: puts(“SUBBOTA \n”); break;
case 7: puts(“VOSKRESENIE \n”); break;
default: puts(“CHSLO DILZNO BYT V DIAPAZONE 1..7 \n”);

days[0] = 31; days[4] = 31; days[8] = 30;
days[1] = 28; days[5] = 30; days[9] = 31;
days[2] = 31; days[6] = 31; days[10] = 30;
days[3] = 30; days[7] = 31; days[11] = 31;

Заранее спасибо!

Сообщения: 181
Благодарности: 43

C++ Builder 6:

int N1, N2, i, dn; int days[12]; div_t x; days[0] = 31; days[1] = 28; days[2] = 31; days[3] = 30; days[4] = 31; days[5] = 30; days[6] = 31; days[7] = 31; days[8] = 30; days[9] = 31; days[10] = 30; days[11] = 31; N1 = 1; N2 = 4; dn = 0; if (N2 > 1) for (i = 0; i < N2 - 1; i ++) dn += days[i]; dn += N1; x = div(dn + 1, 7); ShowMessage("День недели: " + IntToStr(x.rem + 1));

1-понедельник, 7 - воскресенье

PS: Если перейти к системе юлианских дат, то можно определять день недели любого года, месяца, дня (с помощью 6-ти несложных формул).

Последний раз редактировалось Alexej77, 28-11-2007 в 21:04 .

Создание календаря на основе шаблона

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Еще. Меньше

Многие шаблоны календарей можно использовать в Excel. Шаблон содержит базовый макет календаря, который можно легко адаптировать под свои нужды.

Вы можете скачать шаблоны календарей с полезными и творческими темами при нажатии кнопки Файл >в Excel .

Кнопка

  1. Выберите Поиск шаблонов в Сети,введите календарьи выберите увеличительное стекло.
  2. Щелкните шаблон, который вас интересует, и нажмите кнопку Создать.

Какую версию Excel вы используете?

  • Какую версию Excel вы используете?
  • Более новые версии
  • Excel для Mac 2011
  1. В меню Файл выберите команду Создать из шаблона.
  2. В правой части окна поиска Поиск по всем шаблонам введите Календарь.
  3. Выберите нужный шаблон календаря и нажмите кнопку Создать. Вы можете легко применить собственный внешний вид к календарю. Шаблоны календарей отформатированы с помощью тем, позволяющих применить шрифты, цвета и эффекты форматирования рисунков во всей книге одним щелчком мыши. На вкладке Разметка страницы в области Темы выберите один из десятков встроенных тем, доступных в коллекции Темы, или найдите параметры, чтобы изменить только шрифты темы или цвета темы.

Важно: Формулы существуют во всех ячейках, которые отображают дату, а также в ячейках в строках дат, которые отображаются пустыми. Эти формулы позволяют календарю обновляться автоматически. Если вручную изменить данные в этих ячейках, календарь больше не сможет обновляться автоматически.

Совет: Вы также можете искать другие шаблоны календарей в Интернете. Шаблоны скачиваются во временную папку на компьютере. Вы можете сразу сохранить шаблон в другом месте, чтобы его было проще найти. Чтобы быстро найти все шаблоны календарей, доступные на сайте Office.com или на компьютере, в поле поиска Excel коллекции книг введите календарь.

Вы можете легко применить собственный внешний вид к календарю. Шаблоны календарей отформатированы с помощью тем, позволяющих применить шрифты, цвета и эффекты форматирования рисунков во всей книге одним щелчком мыши. На вкладке Главная в областиТемы выберите из десятков встроенных тем, доступных в коллекции Темы, или найдите параметры, чтобы изменить только шрифты темы или цвета темы.

Важно: Формулы существуют во всех ячейках, которые отображают дату, а также в ячейках в строках дат, которые отображаются пустыми. Эти формулы позволяют календарю обновляться автоматически. Если вручную изменить данные в этих ячейках, календарь больше не сможет обновляться автоматически.

Создание ежегодного календаря на одну страницу

Важно: Формулы существуют во всех ячейках, включая ячейки, которые отображаются пустыми. Эти формулы позволяют календарю обновляться автоматически. Если вручную изменить данные в ячейках, календарь больше не сможет обновляться автоматически.

  1. В меню Файл выберите команду Создать из шаблона.
  2. В области навигации слева в области шаблоновщелкните Управление временем.
  3. Дважды щелкните шаблон "Календарь на одну страницу". Excel открывает новый лист, основанный на шаблоне ежегодного календаря на одну страницу.
  4. Щелкните ячейку с отображением года, а затем во всплываемом списке выберите нужный год. При выборе нужного изменения лист календаря автоматически обновляется.

Примечание: Чтобы изменить год, доступный в списке, измените данные на листе "Список подытогов".

Создание многослойного ежемесячного календаря

Многоэтапная книга календаря содержит двенадцать месяцев в одной книге, что удобно для личного планирования или ссылки на даты на любой год. Вы можете добавить собственный текст в более высокие ячейки под каждой ячейкой даты.

  1. В меню Файл выберите команду Создать из шаблона.
  2. В области навигации слева в области шаблоновщелкните Управление временем.
  3. Дважды щелкните шаблон Много страниц календаря. Excel открывает новую книгу, основанную на шаблоне ежемесячного календаря на несколько листов.
  4. Щелкните ячейку K1 и во всплываемом списке выберите нужный календарный год. При выборе окне автоматически обновляются листы календарей для всех месяцев в книге.

Примечание: Чтобы изменить год, доступный в списке, измените данные на листе "Список подытогов".

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

См. также

Создавать письма в Интернете можно быстро и легко.

Шаблон календаря в Excel для Интернета

Выберите один из шаблонов календарей иоткройте его в программе Office в Интернете, чтобы сделать его своим (некоторые календари можно редактировать в Excel в Интернете, другие — в Word в Интернете, а другие — в Веб-приложение PowerPoint ).

Совет: Если вы уже Excel в Интернете, чтобы увидеть все шаблоны календаря, перейдите в файл > New, а затем под изображениями шаблонов щелкните Ссылки на Office.com.

Щелкните ссылку

Вы будете на странице Шаблоны для Excel. В списке категорий выберите Календари.

В процессе работы над письмом, возможно, понадобится переименовать его.

Предоставление доступа к календарю

Когда все будет готово, распечатайте письмо или отправьте его в электронном виде. Это можно сделать, если календарь по-прежнему открыт в Excel в Интернете. Нет необходимости предварительно сохранять его (это уже сделано за вас).

печать

Чтобы напечатать его, нажмите клавиши CTRL+P и нажмите кнопку Печать для предварительного просмотра. Нажмите кнопку Печать еще раз, чтобы распечатать лист.

Совет: Чтобы напечатать все листы в шаблоне, щелкните каждый ярлычок листа и напечатайте их по одному.

Общий доступ

Чтобы поделиться календарем в Интернете, отправьте ссылку на него.

  1. В верхней части экрана нажмите кнопку Общий доступ.
  2. В разделе Общий доступ щелкните элемент Получить ссылку. Щелкните
  3. В списке Выберите один из вариантов выберите пункт Только просмотр. Щелкните
  4. Нажмите кнопку Создать ссылку.
  5. Щелкните веб-адрес, чтобы выделить его, а затем скопируйте и вставьте его в сообщение электронной почты, текстовое сообщение или запись блога.

Совет: Если у вас есть блог или веб-сайт, вы можете внедрить в него представление календаря.

Задача: Формирование календаря для любого года

Написать программу формирования календаря для любого года начиная с 1900 года.(1 января 1900 года - понедельник).Результатом работы программы должен быть текстовый файл, содержащий календарь в привычном для пользователя виде, что позволит просматривать его и получать копии, не прибегая к новым запускам программы.

Собственно вот задача. а вот как с файлом работать чёт не догоняю
Помогите в решении.

DarkKnight

Собственно вот задача. а вот как с файлом работать чёт не догоняю
Помогите в решении.
А как сформировать календарь значит знаете?

lazybiz

DeNN
Пример календаря в текстовом виде, пожалуйста.

DeNN

А как сформировать календарь значит знаете?

Честно говоря в голове всегда понятней чем на языке С:welcome:
вот. не могли бы вы мне помочь?

Добавлено: Январь
ПН ВТ СР ЧТ ПТ СБ ВС
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 25 27 28
29 30 31
и так далее весь год

lazybiz

DeNN
Наброски есть? Хоть что-нибудь?

DeNN

DeNN
Наброски есть? Хоть что-нибудь?

Признаться особых набросков нет.
Да и не хочется как то всё на халяву.
вы можете мне помочь с началом. если вам не трудно.
только можно не за мудреное начало, а то я дилетант в этом деле ещё. и могу не понять:welcome:

lazybiz

DeNN
Не уходи далеко.

Добавлено: DeNN
Нужно вводить только год? Я правильно понял!?

DeNN
DarkKnight

Использовал интернациональный (компьютерный) формат дней недели (с Вс по Сб)..
Посчитал что под нашу Россию матушку форматировать не нужно, если захочешь сделаешь уже сам, там от 1-до 3х строчек добавить нужно

/* Написать программу формирования календаря для любого года начиная с 1900 года.(1 января 1900 года - понедельник). Результатом работы программы должен быть текстовый файл, содержащий календарь в привычном для пользователя виде, что позволит просматривать его и получать копии, не прибегая к новым запускам программы. /* /* codeby.net Autor: DarkKnight125 (Denis Goncharov) */ #include #include //Манипуляторы для поточных вводов-выводов #include //Это наша суть, работа со временем #include //Файловые потоки ввода/вывода using namespace std; void main(void) < setlocale(LC_ALL,"Russian"); int cYear; //Год на который будет разрабатыватся календарь struct tm *date; //Структурно календарной даты time_t temp = time(NULL); char *Month[] = ; ofstream file("Calendar.txt"); //Файловый ввод cout > cYear; //Ввод года //Поставим date в 1 января введенного года date = localtime(&temp); //Получим текущую дату date->tm_year = cYear - 1900; date->tm_mon = 0; //Это январь date->tm_mday = 1; //Это первое число time_t a = mktime(date); //Создадим time_t исходя из нашей даты int limitsDay = date->tm_year; //Для цикла определим текущий год из структуры int Selection = -1; //Опция выбора (смещение строки) если текущий месяц закончился //Пока структура указывает еще на введенный год while (date->tm_year == limitsDay) < if (Selection != date->tm_mon) //Проверим не закончился ли текущий месяц (нам же шапку вывести нужно) < //А если месяц закончился, то перейдем на след. строку couttm_mon] tm_mon] tm_mon; //Перезапишим Selection в уже новый-текущий месяц if (date->tm_wday != 0) //Если день недели в новом месяце не сначало, то отделим пробелами < for (int i = 0; i < date->tm_wday; i++) < cout> > couttm_mday; //Вывод дня в месяце filetm_mday; if (date->tm_wday == 6) //Если дни недели закончились перейдем на новую строку < cout date->tm_mday++; //Добавим 1 день a = mktime(date); //Свормируем новое время по данным структуры > cout 

Добавлено: Намного более интересная реализация получится например если месяца идут не сверху вниз, а 3x3.
Если делать ее конечно без учетов координат консоли, но это уже другое задание и усилий приложить нужно в раз 5 больше, а то и больше..

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *