завдання просте: Знайти кількість днів між двома датами. Передбачити облік високосних років.
Для практики пропонується два варіанти:
- Одна з граничних дат описується тільки роком. Тобто початкова дата вводиться повністю (например 25.12.2015), а друга тільки рік (например 2016). Проводиться підрахунок днів до 01.01.2016
- Обидві дати повні – описуються днем місяцем роком.
Наведу свій приклад, частково вирішальний перший спрощений варіант:
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 | #include <iostream> using namespace std; int DaysCount(int yearBegin, int monthBegin, int dayBegin, int yearCurrent){ int y, m, e, d, a, b, c, res = 0; a = yearCurrent - yearBegin; // Разница в годах b = a / 4; // Кол-во високосных c = a - b; // Кол-во невысокосных d = b * 366 + c * 365; // Предварительное кол-во дней до начала года d -= (yearCurrent % 4) ? 1 : 0; // +1 день, если год високосный // Считаем месяцы for (e = 1; e < monthBegin; e++) { // Если февраль и високосный: if (e == 2) d -= (yearCurrent % 4) ? 28 : 29; // Если по 30 дней else if (e == 4 || e == 6 || e == 9 || e == 11) d -= 30; else // Если по 31 день в месяце d -= 31; }; /* Для корректировки, если расчет идет от последнего месяца года до задаваемого граничного года можно использовать примерно такое условие, дабы не прибавлять, а вычитать количество дней */ if (monthBegin != 12 && a == 1) return dayBegin + d; else return d - dayBegin; } int main() { cout << DaysCount(2015, 12, 15, 2016) << endl; } |
тут функція DaysCount() приймає в перших трьох параметрах початкову дату (рік, місяць, день) і останнім параметром граничну (рік, 1-й день січня)
Вирішувати можна будь-яким способом, хоч циклом хоч чимось ще. А ось рішення по другому варіанту не покажу :) Нехай воно буде домашнім завданням. хай щастить!
Питання задавайте в коментарях
допоможіть будь ласка написати програму
Визначити скільки днів в році (всього 12 місяців, в кожному є певна кількість днів) використовуючи функцію for і одновимірний масив
[код]#include “stdafx.h”
#include
using namespace std;
int main()
{
ІНТ monthM[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
char ch;
ІНТ кінець, день, місяць, рік, сума = 0;
setlocale(LC_ALL, “rus”);
cout <> день >> ч >> місяць >> ч >> рік;
cout<> end;
for (INT I = місяць + 1;i <= 11;i ) сума + = monthM[i];
сума + = monthM[місяць]+день + (end – рік) * 365;
for (INT I = рік + 1; i < end; i )
if (i % 400 == 0 || i % 4 == 0) підсумувати ++;//в вікіпедії написано, що в Григоріанському календарі високосний рік кожен 4й + кожен 400й
if ((рік % 400 == 0 || рік % 4 == 0) && місяць < 4) підсумувати ++; //початковий рік перевіряю окремо, т.к. навіть якщо він високосний, ми можемо не зачепити 29февраля в період
cout << "\nВ этом промежутке " << sum << "дней!";
return 0;
}
[/код]
2 – Фрагменти рекламних блоків – 12.06.2003
Відео з четверга, 12 Червень 2003 R.
2 – Фрагмент рекламного блоку – 20.11.2000
Записано в понеділок, 20 Листопад 2000 R.
1 – Два рекламні блоки та оголошення, ідентич – 20.07.2010
Записано у вівторок, 20 Липень 2010 R.
Два рекламні блоки та оголошення, соціальне оголошення та спот, audiotele – 24.09.2008
Записано в середу, 24 Вересень 2008 R.
2 – Фрагменти рекламних блоків – 24.04.2013
Записано в середу, 24 Квітень 2013 R.
Рекламний блок і анонси (Россия, 19.12.2009) (1)
1 – Фрагменти рекламних блоків – 27.01.2012
Записано в п’ятницю, 27 Січня 2012 R.
1 – Фрагменти рекламних блоків – 28.09.2014
Записано в неділю, 28 Вересень 2014 R.
2 – Два рекламні блоки та оголошення, соціальне оголошення та спот, audiotele – 24.04.2012
Записано у вівторок, 24 Квітень 2012 R.
Два рекламні блоки та оголошення, соціальне оголошення та спот, audiotele – 27.11.2009
Записано в п’ятницю, 27 Листопад 2009 R.
2 – Фрагменти рекламних блоків – 24.10.2011
Записано в понеділок, 24 Жовтень 2011 R.
Новини (Россия, 20.12.2009)
Анонс та Рекламний блок (Россия, 28.11.2009)
Анонс та Рекламний блок (Росія 1, 14.10.2012)
TVP 1 – оголошення та оголошення – П'ятниця 25.11.2011
Новини (Россия, 20.11.2008)
Новини (Росія 1, 11.12.2011)
1 – Два рекламні блоки та оголошення, ідентич – 24.12.2000
Записано в неділю, 24 грудня 2000 R.
Рекламний блок і анонс (Россия, 19.12.2009) (2)
Програма тв з 10 по 16 жовтня 2011 г. Г. Кокшетау, Казахстан
Воскресенье, 16 жовтня 2011 г.
Казахстан
повідомлення
Перший канал Євразія
Ель-Арна
Астана
Казахстан-Кокшетау
КВН
NTK
7 канал
Оригінальний канал
ТВ-Програма на тиждень 29.05.2011, проти
Казахстан
повідомлення
Ель-Арна
Перший канал Євразія
КВН
NTK
31 канал
Перший канал
Россия 1
НТВ
REN-TV
Програма ТБ з 21 по 27 березня 2011 г. Г. Кокшетау, Казахстан
Четверг, 24 березня 2011 г.
Казахстан
повідомлення
Перший канал Євразія
Ель-Арна
Астана
Казахстан-Кокшетау
КВН
NTK
31 канал
7 канал
STV
Хіт ТБ
Оригінальний канал
ТВ-Програма казахстанська правда на тиждень 10.02.2012, пт
Казахстан
повідомлення
Ель-Арна
Курка