Задача простая: Найти количество дней между двумя датами. Предусмотреть учет високосных лет.
Для практики предлагается два варианта:
- Одна из граничных дат описывается только годом. То есть начальная дата вводится полностью (например 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 и одномерный массив
[code]#include “stdafx.h”
#include
using namespace std;
int main()
{
int monthM[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
char ch;
int end, day, month, year, sum = 0;
setlocale(LC_ALL, “rus”);
cout <> day >> ch >> month >> ch >> year;
cout<> end;
for (int i = month + 1;i <= 11;i++) sum += monthM[i];
sum += monthM[month]+day + (end – year) * 365;
for (int i = year+1; i < end; i++)
if (i % 400 == 0 || i % 4 == 0) sum++;//в википедии написано, что в Григорианском календаре високосный год каждый 4й + каждый 400й
if ((year % 400 == 0 || year % 4 == 0) && month < 4) sum++; //начальный год проверяю отдельно, т.к. даже если он високосный, мы можем не зацепить 29февраля в период
cout << "\nВ этом промежутке " << sum << "дней!";
return 0;
}
[/code]
2 – Fragmenty bloków reklamowych – 12.06.2003
Nagranie z czwartku, 12 czerwca 2003 r.
2 – Fragment bloku reklamowego – 20.11.2000
Nagranie z poniedziałku, 20 listopada 2000 r.
1 – Dwa bloki reklamowe i zapowiedzi, ident – 20.07.2010
Nagranie z wtorku, 20 lipca 2010 r.
Dwa bloki reklamowe i zapowiedzi, ogłoszenie społecznie i spot, audiotele – 24.09.2008
Nagranie z środy, 24 września 2008 r.
2 – Fragmenty bloków reklamowych – 24.04.2013
Nagranie z środy, 24 kwietnia 2013 r.
Рекламный блок и анонсы (Россия, 19.12.2009) (1)
1 – Fragmenty bloków reklamowych – 27.01.2012
Nagranie z piątku, 27 stycznia 2012 r.
1 – Fragmenty bloków reklamowych – 28.09.2014
Nagranie z niedzieli, 28 września 2014 r.
2 – Dwa bloki reklamowe i zapowiedzi, ogłoszenie społecznie i spot, audiotele – 24.04.2012
Nagranie z wtorku, 24 kwietnia 2012 r.
Dwa bloki reklamowe i zapowiedzi, ogłoszenie społecznie i spot, audiotele – 27.11.2009
Nagranie z piątku, 27 listopada 2009 r.
2 – Fragmenty bloków reklamowych – 24.10.2011
Nagranie z poniedziałku, 24 października 2011 r.
Вести (Россия, 20.12.2009)
Анонс и Рекламный блок (Россия, 28.11.2009)
Анонс и Рекламный блок (Россия-1, 14.10.2012)
TVP 1 – reklamy i zapowiedzi – piątek 25.11.2011
Вести (Россия, 20.11.2008)
Вести (Россия-1, 11.12.2011)
1 – Dwa bloki reklamowe i zapowiedzi, ident – 24.12.2000
Nagranie z niedzieli, 24 grudnia 2000 r.
Рекламный блок и анонс (Россия, 19.12.2009) (2)
Программа тв с 10 по 16 октября 2011 г. Г. Кокшетау, Казахстан
Воскресенье, 16 октября 2011 г.
Казахстан
Хабар
Первый канал Евразия
Ел-Арна
Астана
Казахстан-Кокшетау
КТК
НТК
7 канал
Асыл арна
ТВ-Программа на неделю 29.05.2011, вс
Казахстан
Хабар
Ел-Арна
Первый канал Евразия
КТК
НТК
31 канал
Первый канал
Россия 1
НТВ
РЕН-ТВ
Программа ТВ с 21 по 27 марта 2011 г. Г. Кокшетау, Казахстан
Четверг, 24 марта 2011 г.
Казахстан
Хабар
Первый канал Евразия
Ел-Арна
Астана
Казахстан-Кокшетау
КТК
НТК
31 канал
7 канал
СТВ
Hit TV
Асыл арна
ТВ-Программа казахстанская правда на неделю 10.02.2012, пт
Казахстан
Хабар
Ел-Арна
Балапан