Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на вычисление даты
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Максим
Добрый вечер smile.gif . У меня такая история: в универе задали задачу на Паскале. Я её сделал, но преподаватель поставил диагноз- "программа страшно неоптимальна". А, и ещё в ней у меня не учитывается високосность годов. Дамы и господа, ПОМОГИТЕ, ПОЖАЛУЙСТА!!!
Задача: эра Скалигера отсчитывает даты в днях, начиная с 1 января 4713 года до нашей эры. Вычислить дату (год,месяц,число) по вводимому номеру дня эры Скалигера. Необходимо использовать григорианское летоисчисление. Учесть отсутствие нулевого года.
Вот что у меня имеется:

program Zadacha;
uses crt;
var
a,n,n1,n2,p:longint;
day,year,yearv,v,t:integer;
month,year1:string;
function konec:boolean;
var
k:char;
begin
writeln;
writeln('Prodolgit programmu? [Y/N]');
k:=readkey;
if upcase(k)='Y'
then konec:=true
else konec:=false;
end;
begin
repeat
clrscr;
writeln('Vvedite nomer dnya ');
readln(n);
if n<1721424 then
begin
t:=0;
year1:=' do nashej ery';
end;
if n>1721423 then
begin
n:=n-1721424;
t:=1;
year1:=' nashej ery';
end;
n1:=n mod 1461;
n2:=n div 1461;
p:=4*n2;
if (n1<366) and (t=0) then
begin
year:=4713-p;
a:=n1;
end;
if (n1>731) and (n1<1097) and (t=0) then
begin
year:=4711-p;
n1:=n1+1;
a:=n1 mod 366;
end;
if (n1>1096) and (t=0) then
begin
year:=4710-p;
n1:=n1+2;
a:=n1 mod 366;
end;
if (n1>365) and (n1<732) and (t=0) then
begin
yearv:=4712-p;
year:=yearv;
v:=1;
n1:=n1+2;
a:=n1 mod 367;
end;
if (n1>364) and (n1<730) and (t=1) then
begin
year:=p+2;
n1:=n1+2;
a:=n1 mod 366;
end;
if (n1<365) and (t=1) then
begin
year:=p+1;
n1:=n1+1;
a:=n1 mod 366;
end;
if (n1>729) and (n1<1095) and (t=1) then
begin
year:=p+3;
n1:=n1+3;
a:=n1 mod 366;
end;
if (n1>1094) and (t=1) then
begin
yearv:=p+4;
year:=yearv;
v:=1;
n1:=n1+6;
a:=n1 mod 367;
end;
if a<60 then
begin
if a<32 then
begin
month:='Yanvar';
day:=a;
end;
if (a>31) and (a<60) then
begin
month:='Fevral';
a:=a-1;
day:=a mod 30;
end;
end;
if (a=60) and (v=1) then
begin
day:=29;
month:='Fevral';
end;
if (a>60) and (v=1) then a:=a-1;
if (a>59) and (a<91) then
begin
month:='Mart';
a:=a+5;
day:=a mod 32;
end;
if (a>90) and (a<121) then
begin
month:='Aprel';
a:=a+3;
day:=a mod 31;
end;
if (a>120) and (a<152) then
begin
month:='May';
a:=a+8;
day:=a mod 32;
end;
if (a>151) and (a<182) then
begin
month:='Iun';
a:=a+4;
day:=a mod 31;
end;
if (a>181) and (a<213) then
begin
month:='Iul';
a:=a+11;
day:=a mod 32;
end;
if (a>212) and (a<244) then
begin
month:='Avgust';
a:=a+12;
day:=a mod 32;
end;
if (a>243) and (a<274) then
begin
month:='Sentyabr';
a:=a+5;
day:=a mod 31;
end;
if (a>273) and (a<305) then
begin
month:='Oktyabr';
a:=a+15;
day:=a mod 32;
end;
if (a>304) and (a<335) then
begin
month:='Noyabr';
a:=a+6;
day:=a mod 31;
end;
if a>334 then
begin
month:='Dekabr';
a:=a-14;
day:=a mod 32;
end;
writeln('Den - ',day);
writeln('Mesyaz - ',month);
writeln('God - ', year, year1);
readln;
until konec=false;
end.

Максим
Спасиоб. good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.