Pers.narod.ru. Алгоритмы. Количество дней от даты рождения до сегодняшней |
Естественно, задачу можно понимать и как "количество дней от введённой даты до сегодняшней", и как "количество дней между двумя датами".
Программа использует несложный цикл по годам и месяцам, можно сделать и куда "аналитичней". Программа также не перехватывает ввод данных неверного типа, это легко обеспечить, если сделать, например, как здесь.
{ Подсчитать число дней от введенной даты до сегодняшнего дня }
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
|
|