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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2010, 02:47   #1
Katy007
 
Регистрация: 15.10.2010
Сообщений: 4
По умолчанию Нахождение всех пятниц 13е в году

Программа не требует никаких входных данных. Нужно сосчитать и вывести все пятницы 13е в этом году.
Подскажите новичку, как ее лучше решать?

Динамический двумерный массив? Статический двумерный? 12 массивов (число месяцев)?
Заранее благодарна за любую помощь!

Возможно поможет что 1е января этого года уже пятница
Katy007 вне форума Ответить с цитированием
Старый 15.10.2010, 07:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот. решение "в лоб" - процедуры работы с датой выдернуты из пакета TurboProfessional.
разбирайтесь.
Код:
uses Dos;

function DayOfWeek(Day, Month, Year: Integer) : Integer;
var
  century, yr, dw: Integer;
begin
  if Month < 3 then
  begin
    Inc(Month, 10);
    Dec(Year);
  end
  else
     Dec(Month, 2);
  century := Year div 100;
  yr := year mod 100;
  dw := (((26 * month - 2) div 10) + day + yr + (yr div 4) +
    (century div 4) - (2 * century)) mod 7;
  if dw < 0 then DayOfWeek := dw + 7
  else DayOfWeek := dw;
  if (dw = 0) or ((dw+7)=0) then DayOfWeek:=7
end;

var
  Day,Month,Year,DayOf : word;
begin
  {получить сегодняшнее число}
  GetDate(Year,Month,Day,DayOf);

  for Month:=1 to 12 do
      if (DayOfWeek(13, Month, Year) = 5)
          then WriteLn('13.',Month:1,'.',Year:1);

  Readln;
end.
p.s. а в этом году только одна пятница-13-е - 13 августа...

Последний раз редактировалось Serge_Bliznykov; 15.10.2010 в 08:13. Причина: выкинул ненужный цикл по дням месяца! ведь в месяце не может быть дважды 13-е число
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2010, 08:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот по сусекам порылся, колледжовским:
Код:
const m:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
var i,k,n:integer;
begin i:=1;
 while i<=12 do begin
   inc(k,7);
   if k=13 then write(i:5);
   if k>m[i] then begin
    k:=k-m[i];
    inc(i);
   end;
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Это прокатывало...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.10.2010, 10:34   #4
Katy007
 
Регистрация: 15.10.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вот. решение "в лоб" - процедуры работы с датой выдернуты из пакета TurboProfessional.
разбирайтесь.
Код:
uses Dos;:)

function DayOfWeek(Day, Month, Year: Integer) : Integer;
var
  century, yr, dw: Integer;
begin
  if Month < 3 then
  begin
    Inc(Month, 10);
    Dec(Year);
  end
  else
     Dec(Month, 2);
  century := Year div 100;
  yr := year mod 100;
  dw := (((26 * month - 2) div 10) + day + yr + (yr div 4) +
    (century div 4) - (2 * century)) mod 7;
  if dw < 0 then DayOfWeek := dw + 7
  else DayOfWeek := dw;
  if (dw = 0) or ((dw+7)=0) then DayOfWeek:=7
end;

var
  Day,Month,Year,DayOf : word;
begin
  {получить сегодняшнее число}
  GetDate(Year,Month,Day,DayOf);

  for Month:=1 to 12 do
      if (DayOfWeek(13, Month, Year) = 5)
          then WriteLn('13.',Month:1,'.',Year:1);

  Readln;
end.
p.s. а в этом году только одна пятница-13-е - 13 августа...
Спасибо огромное за быструю помощь!

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вот по сусекам порылся, колледжовским:
Код:
const m:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
var i,k,n:integer;
begin i:=1;
 while i<=12 do begin
   inc(k,7);
   if k=13 then write(i:5);
   if k>m[i] then begin
    k:=k-m[i];
    inc(i);
   end;
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Это прокатывало...
Программа шикарна! Не ожидала что ее можно решить в 10 строк. Только чтобы она по этому году правильно считала нужно до цикла написать k:=1
Безумно вам благодарна..

Последний раз редактировалось Stilet; 15.10.2010 в 11:26.
Katy007 вне форума Ответить с цитированием
Старый 15.10.2010, 11:25   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Программа шикарна!
Ну недостатки у нее всетки есть
Не мог же я идеально написать, да еще и в колледже...
просто мучаться не хотелось, а преподавательница особо не настаивала - сказала "подходит" и все.
Цитата:
нужно до цикла написать k:=1
Это я действительно забыл...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.10.2010, 11:28   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Не ожидала что ее можно решить в 10 строк. Только чтобы она по этому году правильно считала нужно до цикла написать k:=1
ну, ну это уж очень специфичное решение...
Расчёт зависит от того, какой день недели выпал на 1 января...
А что делать, если нужно посчитать для следующего года - к какое будете поставлять?
А если для високосного года?

впрочем, если Вас такое решение конкретной задачи (найти пятницы 13-е в 2010 году) устраивает, то почему бы и нет?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2010, 20:23   #7
Katy007
 
Регистрация: 15.10.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, ну это уж очень специфичное решение...
Расчёт зависит от того, какой день недели выпал на 1 января...
А что делать, если нужно посчитать для следующего года - к какое будете поставлять?
А если для високосного года?

впрочем, если Вас такое решение конкретной задачи (найти пятницы 13-е в 2010 году) устраивает, то почему бы и нет?!

Да меня вполне устраивает)Главное, чтобы и препода устроил.. Ну если для високосного, то там конечно нужно еще доп.условие пихать. Да и k подгонять нужно.. Как сделать это я знаю, но это не требуется просто)))
Katy007 вне форума Ответить с цитированием
Старый 15.10.2010, 20:33   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как сделать это я знаю
вручаю тебе Медаль Почетного Эксплорера Имени Дискавери
Ты пожалуй одна из единственных, кто знает с полуслова, а не требует код для копипасте, та еще так чоб преподаватели пятерку поставили чисто "здать и котись оно все..."
Респект и уважуха
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.10.2010, 21:19   #9
Katy007
 
Регистрация: 15.10.2010
Сообщений: 4
По умолчанию

Спасибо
Прям можно даже и посмущаться немножко))
Katy007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу подтолкнуть к верному решению.) "Подсчет пятниц 13" M_E_D_V_E_D Помощь студентам 6 09.11.2009 16:28
Кто в этом году поступал в институт? Alar Свободное общение 22 10.08.2009 21:31
Криптор к новому году от execom execom Софт 8 14.01.2008 12:33