Форум программистов, компьютерный форум CyberForum.ru

Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 5.00
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
18.07.2011, 23:32     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #1
Даны натуральные числа
a1, b1 , c1 (число, месяц, год)
a2, b2, c2 (число, месяц, год)

Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами ( на языке Си).

Добавлено через 3 часа 35 минут
up up up
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2011, 23:32     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами
Посмотрите здесь:

Идет K-ая секунда суток. Определить, сколько полных часов и полных минут прошло к этому моменту. C++
Найти количество полных лет, прошедших между двумя датами C++
C++ количество лет месяцев дней между датами
C++ Идет n-я секунда суток. Определить, сколько полных часов и полных минут прошло до этого момента.
Рассчитать количество дней, прошедших между двумя датами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.07.2011, 23:34     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #2
Kotowed, в чем проблема? какие конкретные вопросы?
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
18.07.2011, 23:40  [ТС]     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #3
Maxwe11, да не знаю с чего начать Не могли бы вы подтолкнуть ?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.07.2011, 23:46     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #4
создайте структуру Date, а потом подумайте как отнимать даты
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
19.07.2011, 01:02  [ТС]     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #5
Maxwe11, хм, и что дальше? О_о
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.07.2011, 01:07     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #6
Цитата Сообщение от Kotowed Посмотреть сообщение
хм, и что дальше?
PROFIT
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
19.07.2011, 14:02  [ТС]     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #7
asics, Вот, что получилось. Требуется корректировка или исправления с вашей стороны.

C
1
2
3
4
5
6
7
8
9
int IntFromDMY(int day,  int month, int year )
{
  int m = (month - 14) / 12;
  return ((1461 * (year + 4800 + m)) / 4 + (367 * (month - 2 - 12 * m)) / 12 - (3 * ((year + 4900 + m) / 100)) / 4 + day - 32075) - 1757585;
}
//------
int d1 = IntFromDMY(1, 1, 2012);
int d2 = IntFromDMY(31, 12, 2012);
int ddif = d2 - d1;
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
19.07.2011, 14:09     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #8
Вот, правда там C++, но алгоритм нахождения разности дат по-моему должен быть понятен (см. operator-()).
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
19.07.2011, 14:27  [ТС]     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #9
Kastaneda, а не могли бы вы помочь, а то я с С++ даже не знакомился?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
19.07.2011, 14:46     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #10
Kotowed, и что это такое у вас "получилось" ?
напиши структуру из 3- элементов. объяви 2 даты и вычти их данные друг из друга , блин так сложно?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
19.07.2011, 14:56     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #11
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
#include <stdio.h>
#include <string.h>
 
char* difference(int day1,  int month1, int yea1r, int day2,  int month2, int year2);
 
int main()
{
    int d1,m1,y1,d2,m2,y2;
    printf("Enter first date (day month year): ");
    scanf("%d %d %d",&d1,&m1,&y1);//данные вводятся через пробел, например 10 6 2000
    printf("Enter second date (day month year): ");
    scanf("%d %d %d",&d2,&m2,&y2);
    printf("Date1 - Date2 = %s\n",difference(d1,m1,y1,d2,m2,y2));
    return 0;
}
 
int leap(int y)
{
    return (int)((y % 4 == 0 && y% 100 != 0) || y % 400);
}
 
int maxday(int month,int year)
{
    int days[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
    if(leap(year))days[1]=29;
    return days[month-1];
}
 
char* difference(int day1,  int month1, int year1, int day2,  int month2, int year2)
{
    int d,m,y;
    char date[128];
    if(year1>=year2) {
        y=year1-year2;
        if(month1>month2) {
            m=month1-month2;
            d=day1+maxday(month2,year2)-day2;
            if(d>maxday(month2,year2))d-=maxday(month2,year2);
            else --m;
            --y;
        } else {
            m=12-month1+month2;
            d=day2+maxday(month1,year1)-day1;
            if(d>maxday(month1,year1))d-=maxday(month1,year1);
            else --m;
        }
    } else {
        y=year2-year1;
        if(month1>month2) {
            m=12-month1+month2;
            d=day1+maxday(month2,year2)-day2;
            if(d>maxday(month2,year2))d-=maxday(month2,year2);
            else --m;
            --y;
        } else {
            m=month2-month1;
            d=maxday(month1,year1)-day1+day2;
            if(d>maxday(month1,year1))d-=maxday(month1,year1);
            else --m;
        }
    }
    sprintf(date,"%d days, %d month, %d years\n",d,m,y);
    return date;
}
проверку на корректность вводимых данных сам допишешь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2011, 14:58     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами
Еще ссылки по теме:

ОПРЕДЕЛИТЬ ВОЗРАСТ ЧЕЛОВЕКА (ЧИСЛО ПОЛНЫХ ЛЕТ ) C++
C++ Определить значение угла для минутной стрелки, а также количество полных часов и полных минут
Определить число полных часов и число полных минут, прошедших с начала суток C++

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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.07.2011, 14:58     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами #12
По днях
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
#include <stdio.h>
 
typedef struct{
  int Day, Month, Year;
}date;
 
int check(int i){
  static int mnth[]  = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  return mnth[--i];
}
 
extern "C" int abs(int a);
 
void make_date(date *d, int nn, int mm, int yy){
  d->Day   = nn;
  d->Month = mm;
  d->Year  = yy;
}
 
int sub(date d1, date d2)
{
  int diff = 0, i;
  int from = d1.Month, to = d2.Month;
  int diffyear = abs(d2.Year - d1.Year);
  if(!diffyear)
    for(i = from; i < to; i++)
      diff += check(i);
    else{
    for(i = from; i <= 12; i++)
      diff += check(i);
    for(i = 1; i < to; i++)
      diff += check(i);
    }
    diff -= d1.Day;
    diff += d2.Day;
    diff += ((diffyear > 1)?(diffyear - 1):(0))*365;
    diff+=diffyear/4;
    for(i = d2.Year - diffyear; i <= d2.Year; i++){
      if(((i%4==0) && !(i%100==0))||(i%400==0))
        diff += 1; break;
    }
    return diff;
}
 
int main(){
  date d1, d2;
  make_date(&d1, 31, 12, 1999);
  make_date(&d2, 1, 1, 2000);
  printf("%d", sub(d1, d2));
  return 0;
}
Yandex
Объявления
19.07.2011, 14:58     Вычислить количество дней, полных месяцев, и полных лет, прошедших между датами
Ответ Создать тему
Опции темы

Текущее время: 00:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru