Nickolay.info. Алгоритмы. Количество дней от даты рождения до сегодняшней |
Естественно, задачу можно понимать и как "количество дней от введённой даты до сегодняшней", и как "количество дней между двумя датами".
Программа использует несложный цикл по годам и месяцам, можно сделать и куда "аналитичней". Программа также не перехватывает ввод данных неверного типа, это легко обеспечить, если сделать, например, как здесь.
{ Подсчитать число дней от введенной даты до сегодняшнего дня } program Days; uses Dos; const mondays: array [1..12] of integer = (31,28,31, 30,31,30, 31,31,30, 31,30,31); var d,d1,d2,m1,m2,y1,y2:word; function LeapYear (year:word):boolean; begin if (year mod 4=0) and (year mod 100<>0) or (year mod 400=0) then LeapYear:=TRUE else LeapYear:=FALSE; end; function CorrectDate (day,mon,year:integer):boolean; var maxday:integer; begin if (year<0) or (mon<1) or (mon>12) or (day<1) then CorrectDate:=FALSE else begin maxday:=mondays[mon]; if (LeapYear (year)=TRUE) and (mon=2) then maxday:=29; if (day>maxday) then CorrectDate:=FALSE else CorrectDate:=TRUE; end; end; function KolDays (d1,m1,d2,m2,y:word):word; var i,f,s:word; begin s:=0; if m1=m2 then KolDays:=d2-d1 else for i:=m1 to m2 do begin f:=mondays[i]; if (LeapYear (y)=TRUE) and (i=2) then f:=f+1; if i=m1 then s:=s+(f-d1+1) else if i=m2 then s:=s+d2 else s:=s+f; KolDays:=s; end; end; function CountDays (day1,mon1,year1,day2,mon2,year2:word):word; var f,i:word; begin f:=0; if year1=year2 then CountDays:=KolDays (day1,mon1,day2,mon2,year1) else for i:=year1 to year2 do begin if i=year1 then f:=KolDays (day1,mon1,31,12,year1) else if i=year2 then f:=f+KolDays (1,1,day2,mon2,year2)-1 else f:=f+KolDays (1,1,31,12,i); CountDays:=f; end; end; begin getdate (y2,m2,d2,d); writeln ('Год Вашего рождения?'); readln (y1); writeln ('Месяц Вашего рождения?'); readln (m1); writeln ('День Вашего рождения?'); readln (d1); if CorrectDate (d1,m1,y1)=FALSE then begin writeln ('Недопустимая дата!'); halt; end; if (y2<y1) or ( (y2=y1) and ( (m2<m1) or ( (m2=m1) and (d2<d1) ) ) ) then begin writeln ('Введенная дата позднее сегодняшней!'); halt; end; d:=CountDays (d1,m1,y1,d2,m2,y2); writeln ('Количество дней= ',d); reset (input); readln; end.
Калькулятор дат: решение на JavaScript
гостевая; E-mail |