Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2009, 13:34   #1
Alexxl2009
 
Регистрация: 09.04.2009
Сообщений: 9
По умолчанию Календарь от 1.01.1 до наших дней (Delphi7)

Помогите пожалуйста решить задачу или хотя бы подкиньте идейку как решать.
Вот условие (задача на записи):
Написать функцию ДН( d ) для определения дня недели, на который
приходится дата d (учесть, что 1 января 1-го года нашей эры было
понедельником)
Alexxl2009 вне форума Ответить с цитированием
Старый 03.06.2009, 16:05   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Нужно посчитать количество дней между 01.01.01 и этой датой. И взять остаток от 7. Складывается количество дней между началом первого года и началом указанного года, количество дней между началом указанного года и началом указанного месяца указанного года, наконец, указанное число.

Количество дней между началом первого года и указанным — это примерно (year - 1) * 365 + (year - 1) div 4 - (year - 1) div 100 + (year - 1) div 400

Ну остальное просто.

Кстати, через каждые 2000 лет календарь повторяется, так что можно сделать бесконечный календарь, отсекая все цифры, кроме 4 последних.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 03.06.2009, 16:05   #3
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Нужно посчитать количество дней между 01.01.01 и этой датой. И взять остаток от 7. Складывается количество дней между началом первого года и началом указанного года, количество дней между началом указанного года и началом указанного месяца указанного года, наконец, указанное число.

Количество дней между началом первого года и указанным — это примерно (year - 1) * 365 + (year - 1) div 4 - (year - 1) div 100 + (year - 1) div 400

Ну остальное просто.

Кстати, через каждые 2000 лет календарь повторяется, так что можно сделать бесконечный календарь, отсекая все цифры, кроме 4 последних.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 03.06.2009, 17:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Количество дней между началом первого года и указанным — это примерно
с одной стороны - ржачно. "Примерный" календарь
с другой:
Цитата:
учесть, что 1 января 1-го года нашей эры было
понедельником
ой. за это время была не одна и не две реформы календаря..
я бы всё таки считал дни/года в цикле, учитывая високосные года (в современной формулировке, что считать високосным годом, а что - нет
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.06.2009, 12:22   #5
Alexxl2009
 
Регистрация: 09.04.2009
Сообщений: 9
По умолчанию

Написал код через циклы, но не получается учитывать високосные годы
Код:
day:=StrToInt(Edit1.Text);
month:=StrToInt(Edit2.Text);
year:=StrToInt(Edit3.Text);
today:=mon;
for j:=1 to year do
 begin
  for i:=1 to month do
   begin
    for i:=1 to day do
     begin
      case today of
       mon: s:='Понедельник';
       tue: s:='Вторник';
       wed: s:='Среда';
       thu: s:='Четверг';
       fri: s:='Пятница';
       sat: s:='Суббота';
       sun: s:='Воскресение';
      end;
     today:=succ(today);
     Label1.Caption:=s;
     if today>sun then
      today:=mon;
     end;
   month:=month-1;
    day:=31;
   case month of
    2: day:=28;
    4,6,9,11: day:=30;
   end;
   end;
    month:=12;
 end;
Alexxl2009 вне форума Ответить с цитированием
Старый 04.06.2009, 12:27   #6
Alexxl2009
 
Регистрация: 09.04.2009
Сообщений: 9
По умолчанию

Но с циклами есть минус при больших значениях лет, программа виснет((
Alexxl2009 вне форума Ответить с цитированием
Старый 05.06.2009, 15:58   #7
Alexxl2009
 
Регистрация: 09.04.2009
Сообщений: 9
По умолчанию

Спабо всем за помощь сделал без циклов, все работает!!!!!!
Alexxl2009 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ОC посетителей форума и наших сайтов. Alar Операционные системы общие вопросы 33 31.10.2012 01:22
Календарь ruavia3 Microsoft Office Excel 6 16.04.2009 15:32
календарь в делфи BAZA Общие вопросы Delphi 15 31.01.2009 14:55
Прога-календарь Кай Софт 3 21.08.2008 13:44
Истоки технологии AdSense в Brown University Santa Monica, а что разрабатывают в наших университетах? Alar Свободное общение 0 10.01.2008 18:20