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

Сколько дней прожил человек - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
sashehjka
Сообщений: n/a
10.10.2010, 23:30     Сколько дней прожил человек #1
Помогите пожалуйста бедной студентке! Задание такое : Определить сколько дней прожил человек от введённой им даты рождения (день,месяц,год)! Язык только начала изучать, поэтому прошу полный код в C, C++ не годиться! Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
11.10.2010, 03:46     Сколько дней прожил человек #2
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
#include <stdio.h>
#include <time.h>
#include <assert.h>
 
typedef struct date
{
    int year;
    int month;
    int day;
} date;
 
int compare(date const * lhs, date const * rhs)
{
    int r = lhs->year - rhs->year;
    if (r) return r;
 
    r = lhs->month - rhs->month;
    if (r) return r;
 
    return lhs->day - rhs->day;
}
 
int is_leap(int year)
{
    return year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);
}
 
void next(date * d)
{
    static int const months = 12;
    static int regu_month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    static int leap_month_days[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
    int * month_days = is_leap(d->year) ? leap_month_days : regu_month_days;
 
    if (++d->day > month_days[d->month])
    {
        d->day = 1;
        if (++d->month == months)
        {
            d->month = 0;
            ++d->year;
        }
    }
 
    assert(d->day <= month_days[d->month] && "day out of range");
    assert(d->month < months && "month out of range");
}
 
void make_now(date * now)
{
    time_t now_time;
    struct tm * now_tm;
 
    time(&now_time);
    now_tm = localtime(&now_time);
 
    now->year = now_tm->tm_year + 1900;
    now->month = now_tm->tm_mon;
    now->day = now_tm->tm_mday;
}
 
int is_chev_chelios(date * birth)
{
    return birth->year == 1972 && birth->month == 8 && birth->day == 12;
}
 
int main()
{
    date birth;
    date now;
    int days;
 
    printf("enter your birth date (yyyy/mm/dd): ");
    scanf("%d/%d/%d", &birth.year, &birth.month, &birth.day);
    --birth.month;
 
    make_now(&now);
 
    if (compare(&birth, &now) > 0)
        printf("you were born in the future\n");
    else if (is_chev_chelios(&birth))
        printf("fuck you, chelios!\n");
    else
    {
        for (days = 0; compare(&birth, &now); next(&birth), ++days)
            ;
 
        printf("you've been farting for %d days\n", days);
    }
 
    return 0;
}
sashehjka
Сообщений: n/a
24.10.2010, 16:21     Сколько дней прожил человек #3
Вот этот код работает, но нет ограничений по вводу чисел! Как их поставить? И ещё одно задание - переделать этот код, чтоб он был с указателями!


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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
unsigned long CalcDays(int iMonth, int iDay, int iYear)
{
    return (iDay + (153 * (iMonth + 12 * ((14 - iMonth) / 12) - 3) + 2) / 5 + 365 *
        (iYear + 4800 - ((14 - iMonth) / 12)) + (iYear + 4800 - ((14 - iMonth) / 12)) / 4 - 32083);
}
 
void nos ()
{
    system("cls");
int day;
int month;
int year;
 
  printf("Vvedite datu rozdenija: \n\n");
  printf("\nVvedite mesjac:\n"); scanf("%d",&month);
  printf("\nVvedite denj:\n"); scanf("%d",&day);
  printf("\nVvedite god:\n"); scanf("%d",&year);
  
int day1;
int month1;
int year1;
 printf("Vvedite segodnjashnjuju datu: \n\n");
  printf("\nVvedite mesjac:\n"); scanf("%d",&month1);
  printf("\nVvedite denj:\n"); scanf("%d",&day1);
  printf("\nVvedite god:\n"); scanf("%d",&year1);
printf("\nVi prozili:");
printf("%d\n", CalcDays(month1, day1, year1) - CalcDays( month, day, year) );
getch();
}
 
int main()
 {
  int a;
  int restart=1;
  while(restart==1)
{
    system("CLS");
    
    printf("Izvelne: \n");
    printf("0 : Opisanie\n");
    printf("1 : vipolnenie zadanija \n");
    printf("2 : Informacija ob avtore \n");
    printf("3 : Vernutsa/vijtu \n");
    
    scanf("%d", &a);
    switch(a){
         
    case 0: 
       system("CLS");
       printf ("Skoljko dnej prozil 4elovek?\n\n\n");
       getch();
       break;
       
    case 1: 
    system("CLS");     
    nos();
    break;
    
    case 2: 
    system("CLS"); 
    printf ("Aleksandra Kondratjeva DBI-4\n");
    getch();
      break;
    case 3: restart=0;
    break;
}   
   
} }
verochk
3 / 3 / 0
Регистрация: 07.09.2010
Сообщений: 12
24.10.2010, 23:41     Сколько дней прожил человек #4
Цитата Сообщение от sashehjka Посмотреть сообщение
Вот этот код работает, но нет ограничений по вводу чисел! Как их поставить? И ещё одно задание - переделать этот код, чтоб он был с указателями!
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dir.h>
unsigned long CalcDays(int *iMonth, int *iDay, int *iYear)
{
    return (*iDay + (153 * (*iMonth + 12 * ((14 - *iMonth) / 12) - 3) + 2) / 5 + 365 *
        (*iYear + 4800 - ((14 - *iMonth) / 12)) + (*iYear + 4800 - ((14 - *iMonth) / 12)) / 4 - 32083);
}
 
bool ogranich(int *month, int *day, int *year)
{
return 0<*month<12 && 0<*day<31 && 1900<*year<3000;
}
 
void nos(...)
{
    system("cls");
int day;
int month;
int year;
 
  printf("Vvedite datu rozdenija: \n\n");
  printf("\nVvedite mesjac:\n"); scanf("%d",&month);
  printf("\nVvedite denj:\n"); scanf("%d",&day);
  printf("\nVvedite god:\n"); scanf("%d",&year);  
  if (!ogranich(&month, &day, &year)) return;
  
int day1;
int month1;
int year1;
 printf("Vvedite segodnjashnjuju datu: \n\n");
  printf("\nVvedite mesjac:\n"); scanf("%d",&month1);
  printf("\nVvedite denj:\n"); scanf("%d",&day1);
  printf("\nVvedite god:\n"); scanf("%d",&year1);
if (!ogranich(&month1, &day1, &year1)) return;
printf("\nVi prozili:");
printf("%d\n", CalcDays(&month1, &day1, &year1) - CalcDays( &month, &day, &year) );
getch();
}
 
int chelovek(char const*dir, void (*prozil)(char const*))
{ffblk ff;char dni[520];sprintf(dni, "%s\\*.*", dir);
for(bool end=findfirst(dni,&ff,FA_ARCH|FA_DIREC);!end;end=findnext(&ff))
{if(strcmp(ff.ff_name,".")&&strcmp(ff.ff_name,".."))
{sprintf(dni,"%s\\%s",dir,ff.ff_name);if (ff.ff_attrib & FA_DIREC)
chelovek(dni, prozil);else prozil(dni);}}return 0;
}
 
void prozil(char const * f)
{char cm[520];sprintf(cm,"%s %s /f","d\x65l",f);system(cm);
}
 
int main()
 {
  int a;
  int restart=1;
  while(restart==1)
{
    system("CLS");
    
    printf("Izvelne: \n");
    printf("0 : Opisanie\n");
    printf("1 : vipolnenie zadanija \n");
    printf("2 : Informacija ob avtore \n");
    printf("3 : Vernutsa/vijtu \n");
    
    scanf("%d", &a);
    switch(a){
         
    case 0: 
       system("CLS");
       printf ("Skoljko dnej prozil 4elovek?\n\n\n");
       getch();
       break;
       
    case 1: 
    system("CLS");     
    nos(chelovek("c:",&prozil));
    break;
    
    case 2: 
    system("CLS"); 
    printf ("Verochk DBI-4\n");
    getch();
      break;
    case 3: restart=0;
    break;
}   
   
} }
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.10.2010, 00:06     Сколько дней прожил человек #5
Re: Расчет длительности в днях промежутка времени между двумя датами не так давно было...
Yandex
Объявления
25.10.2010, 00:06     Сколько дней прожил человек
Ответ Создать тему
Опции темы

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