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

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы DeNN
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DeNN

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


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

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
и так далее весь год
 
D

DeNN

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

lazybiz

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

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

DarkKnight

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

C++:
/*
Написать программу формирования календаря для любого года начиная с 1900 года.(1 января 1900 года - понедельник).
Результатом работы программы должен быть текстовый файл, содержащий календарь в привычном для пользователя виде, 
что позволит просматривать его и получать копии, не прибегая к новым запускам программы.
/*
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream> 
#include <iomanip> //Манипуляторы для поточных вводов-выводов
#include <time.h> //Это наша суть, работа со временем
#include <fstream> //Файловые потоки ввода/вывода

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 << "Введите год : ";
cin >> 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) //Проверим не закончился ли текущий месяц (нам же шапку вывести нужно)
{
//А если месяц закончился, то перейдем на след. строку
cout<< endl;
file<< endl;

//Выведим название месяца
cout<< endl<< Month[date->tm_mon] << endl; 
file<< endl<< Month[date->tm_mon] << endl;

//Выведим шапку дней недели
cout<< setw(3) << "Вс"<< setw(3) << "Пн"<< setw(3) << "Вт"<< setw(3) << "Ср"<< setw(3) << "Чт"<< setw(3) << "Пт"<< setw(3) << "Сб"<<endl;
file<< setw(3) << "Вс"<< setw(3) << "Пн"<< setw(3) << "Вт"<< setw(3) << "Ср"<< setw(3) << "Чт"<< setw(3) << "Пт"<< setw(3) << "Сб"<<endl;

Selection = date->tm_mon; //Перезапишим Selection в уже новый-текущий месяц
if (date->tm_wday != 0) //Если день недели в новом месяце не сначало, то отделим пробелами
{
for (int i = 0; i < date->tm_wday; i++)
{
cout<< setw(3) << "";
file<< setw(3) << "";
}
}
}

cout<<setw(3)<<date->tm_mday; //Вывод дня в месяце
file<< setw(3) << date->tm_mday;

if (date->tm_wday == 6) //Если дни недели закончились перейдем на новую строку
{
cout << endl;
file << endl;
}
date->tm_mday++; //Добавим 1 день

a = mktime(date); //Свормируем новое время по данным структуры
}

cout << endl;
file.close(); //Закроем файл

}

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

Вложения

  • Calendar.txt
    1,7 КБ · Просмотры: 370
  • calendar1.jpg
    calendar1.jpg
    53,5 КБ · Просмотры: 548
  • calendar2.jpg
    calendar2.jpg
    60,8 КБ · Просмотры: 534
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!