Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Роберт12
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 4
1

Вычислите количество дней между двумя датами,заданными в формате DD/MM/YYYY,включая начальный и конечный день.

01.10.2012, 20:07. Просмотров 1659. Ответов 7
Метки нет (Все метки)

Вычислите количество дней между двумя датами,заданными в формате DD/MM/YYYY,включая начальный и конечный день. Даты могут быть заданы в произвольном порядке. Учитывайте високосные годы(такой год делится на 400 или делится на 4,но не делится на 100).
Написать нужно в трех файлах. data.h;data.c;main.c
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2012, 20:07
Ответы с готовыми решениями:

Посчитать количество дней между двумя датами
Где ошибки?#include <stdio.h> struct date { int day; int month; int year; } ...

Посчитать количество дней между двумя событиями
в функции interval считаю количество дней между двумя событиями, но не правильно, в чем проблема не...

Найти количество элементов в массиве между двумя, заданными пользователем
Найти колличесто элементов в массиве между заданными пользлвателем с клавиатуры. массив одномерный...

Определить количество дней между датами, заданными в формате День-Месяц-Год
В двух строках содержатся даты вида День-Месяц-Год (например, 10-02-2015). Определите количество...

Определить количество дней между двумя заданными датами. Фортран 77
Написать программу, определяющую количество дней между двумя заданными датами. Решите...

7
APc
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 5
11.09.2013, 08:33 2
можно апнуть? тоже это интересует
0
IrineK
Заблокирован
11.09.2013, 21:33 3
Интересует, начиная с 1 января 1900 года (как, например, в MS Excel) или же, начиная с 1 января 1583 года (собственно, введение григорианского календаря) ?

Добавлено через 3 часа 34 минуты
Поскольку с 1900 данный велосипед уже изобретен, двигаемся в неизвестное - и будем считать с 1583.

Условие "включая начальный и конечный день" - показалось некошерным, т.к. получить разницу между 01/01/2001 и 01/01/2000 в 367 дней - как-то не того. Поэтому считаем канонично - чтобы в году получалось 365 дней, а в високосном - 366.

Даты до 1 января 1900 сверялись с Excel, и тут обнаружились огрехи в "велосипеде". Все совпадает с 1 марта 1900 по сегодняшний день. Но вот с самого начала 1900 года - нет, т.к. мелкомягкие посчитали 1900 год - високосным, что истине не соответствует.

Так что, изобретать велосипед иногда небесполезно )


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
87
88
89
90
91
92
93
94
//Вычислите количество дней между двумя датами,заданными в формате DD/MM/YYYY
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
 
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
struct DATE
{   int day;
    int month;
    int year;
};
 
int leapYear(int year)
{   return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
 
DATE *parseDate()
{   DATE *date = (DATE*) malloc(sizeof(DATE));
    int checkInput;
    char buf[15];
    do
    {   printf("\tFormatted as DD/MM/YYYY\t\t");
        fgets(buf, 15, stdin);
        checkInput = sscanf(buf, "%d/%d/%d", &date->day, &date->month, &date->year);
        
        //проверка на ввод трех целых, разделенных слэшем
        if(checkInput!=3)
        {   printf("\nWrong date format\n");
            continue;
        }
 
        //проверка на соответствие григорианскому календарю (принят в 1583)
        if(date->year < 1583)
        {   printf("\nThe Gregorian Calendar was adopted in 1583. Years before are irrelevant\n");
            continue;
        }
 
        //проверка на попадание в ОДЗ
        checkInput += date->day>0 && date->month>0 && date->month<= 12;
        if(checkInput!= 4)
        {   printf("\nImpossible value for day or month \n");
            continue;
        }
 
        //проверка на взаимное соответствие день-месяц-год
        if(leapYear(date->year) && date->month == 2)
            checkInput += date->day <=29;
        else
            checkInput += date->day <= days [date->month-1];
        //если последняя проверка не была пройдена
        if(checkInput!= 5)
            printf("\nDay-month-year mismatch\n");
 
    } while(checkInput != 5);
    return date;
}
 
int daysFromYearStart(DATE *date)
{   int sum = 0, i = 0;
    for( ; i<date->month-1; i++)
        sum += days [i];
    sum += date->day;
    if(leapYear(date->year) && date->month > 2)
        sum++;
    return sum;
}
 
int dateInDays(DATE *date)
{   int i = 1583, dateInDays = 365*(date->year - 1583);
    for( ; i<date->year; i++)
        if(leapYear(i)) dateInDays++;
    dateInDays += daysFromYearStart(date);
    return dateInDays;
}
 
int main()
{   DATE *d1, *d2;
    
    printf("Date 1 ");
    d1 = parseDate();
    
    printf("Date 2 ");
    d2 = parseDate();
 
    printf("Difference in days: %d", abs(dateInDays(d1) - dateInDays(d2)));
 
    free(d1); free(d2);
    fflush(stdin);
    getchar();
    return 0;
}
1
IrineK
Заблокирован
13.09.2013, 00:00 4
Оказалось, что послезавтра - мне 17500 дней. Повод, однако )
2
13.09.2013, 00:00
APc
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 5
15.09.2013, 10:43 5
Интересует дата от Рождения Христова; на календарь побоку, просто что бы выводило сферическое кол-во дней в вакууме
0
IrineK
Заблокирован
17.09.2013, 02:39 6
Для "сферического в вакууме" можно остаться в рамках модели григорианского календаря.
Для этого:
1) убираем строки 35-39
2) в строке 72 присваиваем i = 0

Для более "эллиптического в среде" нужно, углубляясь в прошлое с 1582 и далее вниз до 0 AD опираться на юлианский календарь (введен в 45 ВС), где високосный год - просто каждый 4 год.

Разница между григорианским и юлианским календарем - 3 дня за каждые 400 лет.
1
APc
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 5
21.09.2013, 16:18 7
Мне половина этого кода просто не понятна
0
IrineK
22.09.2013, 04:48     Вычислите количество дней между двумя датами,заданными в формате DD/MM/YYYY,включая начальный и конечный день.
  #8

Не по теме:

Вы хотите поговорить об этом? :gscratch:

0
22.09.2013, 04:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 04:48
Привет! Вот еще темы с ответами:

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

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

Вычислите количество дней между датами из файла
На формах сделал с помощью datetimepicker и вывел разницу, но нужно сделать с файлами но не знаю...


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

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

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