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

Количество прожитых дней - C++

Восстановить пароль Регистрация
 
EJIEKTPO_4
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 3
23.04.2013, 12:37     Количество прожитых дней #1
Делаю вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main ()
{
setlocale(LC_ALL, "Russian");
int da1,db1,dv1,da2,db2,dv2;
 
cout<<"Введите дату своего рождения в числах через пробел (Например 10 1 1991)\n";
cin>>da1>>db1>>dv1;
cout<<"Введите текущую дату\n";
cin>>da2>>db2>>dv2;
dv2=((dv2-dv1)*365)+((db2-db1)*30+((db2-db1)/2))+(da2-da1);
cout<<"Вы прожили "<<dv2<<"дней\n";
}

Что сделать чтобы точнее показывала?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
23.04.2013, 12:51     Количество прожитых дней #2
Цитата Сообщение от EJIEKTPO_4 Посмотреть сообщение
Что сделать чтобы точнее показывала?
В каком смысле точнее? что-бы со временем показывало?
EJIEKTPO_4
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 3
23.04.2013, 13:00  [ТС]     Количество прожитых дней #3
Нет. Точнее дни показывала.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.04.2013, 13:45     Количество прожитых дней #4
EJIEKTPO_4, без библиотечных функций для работы с датами Вам не обойтись. См. например тут
IrineK
Заблокирован
23.04.2013, 19:27     Количество прожитых дней #5
Если точно, то вот так:

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
#include <iostream>
#include <ctime>
 
using std::cout;
using std::cin;
 
const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
bool leapYear(int testYear)
{   if (testYear % 400 == 0 || (testYear % 100 != 0 && testYear % 4 == 0))
        return true; // a leap year
    return false; // not a leap year
}
 
int main()
{   int curYear, curDays, birthYear, birthMonth, birthDay, i, daysAlive;
    
    time_t now;
    struct tm *today;
    time (&now);
    today = localtime(&now);
    curYear = today->tm_year + 1900;    //текущий год
    curDays = today->tm_yday;   //прошло дней с начала текущего года
    
    cout<<"Date of birth:\n";
    cout<<"\tDay Month Year:\t";
    cin>>birthDay>>birthMonth>>birthYear;
 
    //первый год жизни
    daysAlive = days[birthMonth-1]-birthDay+1;  //прожито в первый месяц рождения
    for(i=birthMonth;i<12;i++)
        daysAlive += days[i];                   //прожито до конца первого года
    if(leapYear(birthYear) && birthMonth<3) daysAlive++;    //учет высокосного года
 
    //со второго и до прошлого года
    for(i=birthYear+1; i<curYear; i++)          //прожито в каждый последующий год
    {   if(leapYear(i)) daysAlive += 366;
        else            daysAlive += 365;
    }
 
    //текущий год
    daysAlive += curDays;                       //прожито в текущем году
 
    //результат
    cout<<"\nYou have lived "<<daysAlive<<" days already.";
    
    cin.sync();cin.get();
    return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.04.2013, 21:38     Количество прожитых дней #6
IrineK, зачем все эти манипуляции с високосностью?
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
#include <ctime>
#include <iostream>
 
int main()
{
    time_t now;
    time(&now);
 
    tm birth;
 
    birth.tm_hour = 0;
    birth.tm_min = 0;
    birth.tm_sec = 0;
 
    std::cout << "input year (since 1900):" << std::flush;
    std::cin >> birth.tm_year;
    std::cout << "input month (0..11):" << std::flush;
    std::cin >> birth.tm_mon;
    std::cout << "input day (1..31):" << std::flush;
    std::cin >> birth.tm_mday;
 
    time_t b = mktime( &birth );
 
    double sec = difftime( now, b );
 
    int days = sec / 86400;
 
    std::cout << "days on Earth: " << days << std::endl;
 
    system("pause");
    return 0;
}
IrineK
Заблокирован
24.04.2013, 01:39     Количество прожитых дней #7
IrineK, зачем все эти манипуляции с високосностью?
Многие мои знакомые родились раньше 1970 года. Наверное, поэтому )
См.: http://www.cplusplus.com/reference/ctime/time/
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.04.2013, 09:33     Количество прожитых дней #8
IrineK, главное, чтобы не раньше 1902 Потому что difftime и с отрицательными значениями time_t неплохо справляется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2013, 03:58     Количество прожитых дней
Еще ссылки по теме:

Вывести число дней в заданном году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней C++
Определить количество дней в году C++
Найти количество дней до дня рождения C++

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

Или воспользуйтесь поиском по форуму:
IrineK
Заблокирован
25.04.2013, 03:58     Количество прожитых дней #9
Нужно будет как-то проверить.
Помню по опыту, что были проблемы.
Yandex
Объявления
25.04.2013, 03:58     Количество прожитых дней
Ответ Создать тему
Опции темы

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