Задача на вычисление даты, по вводимому номеру дня |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на вычисление даты, по вводимому номеру дня |
Максим |
Сообщение
#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я |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
|
Максим |
Сообщение
#3
|
Гость |
Спасиоб.
|
Текстовая версия | 29.03.2024 14:10 |