Язык Паскаль!!!Введите с клавиатуры - -две календарные даты(день, месяц) -название дня недели Напишите программу определяющая количество дней указанного названия,которые оказались в заданном интервале времени!

Язык Паскаль!!! Введите с клавиатуры - -две календарные даты(день, месяц) -название дня недели Напишите программу определяющая количество дней указанного названия,которые оказались в заданном интервале времени!
Гость
Ответ(ы) на вопрос:
Гость
const   cdow='ВсПнВтСрЧтПтСб';   mdays:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31); var   d1,m1,y,d2,m2,a,y1,m,dow,dw,i,days:integer;   cdw:string; begin   Writeln('Введите начало интервала (день месяц год): ');   Readln(d1,m1,y);   Writeln('Введите номера дня и месяца конца интервала: ');   Readln(d2,m2);   Writeln('Укажите, какой день недели подсчитать (Вс/Пн/Вт/Ср,Чт/Пт/Сб): ');   Readln(cdw);   { определить номер дня недели для начальной даты }   i:=Pos(cdw,cdow);   if i=0 then Writeln('Неверно указан день недели!')   else begin     dw:=(i-1) div 2;     if m1=m2 then days:=d2-d1+1     else begin       days:=days+mdays[m1]-d1+1; { до конца месяца первой даты}       days:=days+d2; {плюс от начала месяца последней даты}       for i:=m1+1 to m2-1 do days:=days+mdays[i] { плюс полные месяцы }     end;     a:=(14-m1) div 12; y1:=y-a; m:=m1+12*a-2;     dow:=(7000+(d1+y1+y1 div 4-y1 div 100+y1 div 400+(31*m) div 12)) mod 7;     if (d1>=28) and (m1=2) then { определить, високосный ли год }       if ((y mod 4)=0) and ((y mod 100)<>0) or ((y mod 400)=0)       then days:=days+1;     { установлено количество дней в интервале }     i:=days mod 7;     days:=days div 7;     if (dw>=dow) and ((dw-dow)< i) then days:= days +1;     Writeln('Количество '+cdw,': ',days)   end end. Тестовое решение: Введите начало интервала (день месяц год): 12 5 2015 Введите номера дня и месяца конца интервала: 24 6 Укажите, какой день недели подсчитать (Вс/Пн/Вт/Ср,Чт/Пт/Сб): Ср Количество Ср: 7
Не нашли ответ?
Ответить на вопрос
Похожие вопросы