Задача на вычисление даты, по вводимому номеру дня |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на вычисление даты, по вводимому номеру дня |
Максим |
6.11.2007 18:13
Сообщение
#1
|
Гость |
Добрый вечер . У меня такая история: в универе задали задачу на Паскале. Я её сделал, но преподаватель поставил диагноз- "программа страшно неоптимальна". А, и ещё в ней у меня не учитывается високосность годов. Дамы и господа, ПОМОГИТЕ, ПОЖАЛУЙСТА!!!
Задача: эра Скалигера отсчитывает даты в днях, начиная с 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. |
Ozzя |
7.11.2007 10:02
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
|
Максим |
7.11.2007 15:15
Сообщение
#3
|
Гость |
Спасиоб.
|
Текстовая версия | 29.04.2024 6:08 |