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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2016, 03:55   #1
Дюша Метелкин
Пользователь
 
Регистрация: 21.03.2016
Сообщений: 27
По умолчанию Найти те даты, когда день рождения попадает на тот же день

Дана дата рождения и день недели на, который она попадает. Найти те даты, когда день рождения попадает на тот же день. Заранее спасибо!
Дюша Метелкин вне форума Ответить с цитированием
Старый 23.06.2016, 04:36   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
const dni:array[1..7] of string=('вс','пн','вт','ср','чт','пт','сб');
var i,a,b:integer;
    dat,dn:string;
    dt:tDateTime;
begin
   dat:=Edit1.Text;//23.06
   dn:=Edit2.Text;//чт
   a:=StrToInt(Edit3.Text);//2000
   b:=StrToInt(Edit4.Text);//2100
   ListBox1.Clear;
   For i:=a to b do
   begin
      dt:=StrToDateTime(Format('%s.%d',[dat,i]));
      If dni[DayOfWeek(dt)]=dn then
         ListBox1.Items.Add(FormatDateTime('dd.mm.yyyy - ddd',dt));
   end;
end;
Изображения
Тип файла: png Безымянный.png (21.5 Кб, 105 просмотров)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 23.06.2016 в 04:38.
newerow1989 вне форума Ответить с цитированием
Старый 23.06.2016, 08:19   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

newerow1989, боюсь, что не сойдёт... Вы же на Delphi написали, а раздел - "Паскаль"...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2016, 08:23   #4
Дюша Метелкин
Пользователь
 
Регистрация: 21.03.2016
Сообщений: 27
По умолчанию

Срочно нужно, помогите пожалуйста!
Дюша Метелкин вне форума Ответить с цитированием
Старый 23.06.2016, 09:45   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Срочно нужно, помогите пожалуйста!
чо не устраивает-то?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 23.06.2016, 10:01   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

(с)пионерино отсудаво
Код:
uses CRT;
procedure GetDay (var d, m, y : integer);
var
correct : byte;
begin
correct := 1;
repeat
writeLn ('Input Data.');
write ('Day - ');
readLn (d);
write ('Month - ');
readLn (m);
write ('Year - ');
readLn (y);

{ Проверим правильность года. Если год не "правильный", то попросим ввести дату ещё раз }
if y <= 4903 then
if y >= 1000 then
correct := 0;
until correct = 0
end;

function CountDay (d, m, y : integer):string ;
var
week : array [0 .. 6] of string[11];
c, w : integer;
begin
week[0] := 'sunday';
week[1] := 'monday';
week[2] := 'tuesday';
week[3] := 'wednesday';
week[4] := 'thursday';
week[5] := 'friday';
week[6] := 'saturday';

{ Месяц январь или февраль = > нужно преобразовать }
if m < 3 then
begin
m := m + 10;
y := y - 1
end
else
m := m - 2;

c := y div 100;
y := y mod 100;
w := abs (trunc (2.6 * m -0.2) + d + y div 4 + y + c div 4 - 2 * c) mod 7;
CountDay := week[w];
end;

var
d, y, m : integer; i:byte;
today:string;
begin
ClrScr;
GetDay (d, m, y);
today := CountDay (d, m, y);
writeln(today);

for i := 0 to 20 do
   begin
        if today = CountDay(d,m,2000+i) then
           writeln(2000+i);
   end;
readln;
end.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.06.2016, 10:12   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Aleksandr H., что-то мне подсказывает, что этот код не без косячков...
попробуйте ввести 12.04.2002
Это какой день недели? И в каких годах 12 апреля будет тем же самым днём?!


p.s. хотя, я согласен с вопросом к автору темы - "А что конкретно не устраивает?"


добавлю. я бы рекомендовал воспользоваться функцией отсюда
Код:
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;

Последний раз редактировалось Serge_Bliznykov; 23.06.2016 в 10:55.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2016, 11:08   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Serge_Bliznykov, да, косячит Но 23/6/2016 совпало

Вот вариант из источника
Код:
function WhatDay(Year: Integer; Month: Integer; Day: Integer):string;

var a,y,m: integer;
    week : array [0 .. 6] of string[11];
    w : integer;
begin
week[0] := 'sunday';
week[1] := 'monday';
week[2] := 'tuesday';
week[3] := 'wednesday';
week[4] := 'thursday';
week[5] := 'friday';
week[6] := 'saturday';
 a := (14 - Month) div 12;
 y := year - a;
 m := month + 12 * a - 2;
 w := (7000 + (day + y + y div 4 - y div 100 + y div 400 + (31 * m) div 12)) mod 7;

 WhatDay := week[w];
end;
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 23.06.2016 в 11:10.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.06.2016, 11:16   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Вот вариант из источника
Код:
function WhatDay(Year: Integer; Month: Integer; Day: ......end;
Проверил. Работает.
Результаты у DayOfWeek и WhatDay совпадают.
Можно пользоваться любой из этих функций!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
День рождения destroy_ Паскаль, Turbo Pascal, PascalABC.NET 0 23.11.2012 17:17
по дате рождения и текущей дате (день, месяц, год) определить сколько дней до дня рождения (код на ПАСКАЛЕ) Николай1 Помощь студентам 1 16.02.2012 09:07
Когда день рождения форума? Виталий Желтяков О форуме и сайтах клуба 9 07.06.2011 07:05
Эх, проморгали день рождения... mihali4 Свободное общение 22 04.12.2008 11:27
День рождения Alex21 merax Свободное общение 16 22.07.2008 15:37