Язык Паскаль!!!Введите с клавиатуры --две календарные даты(денек, месяц)-заглавие денька

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

Задать свой вопрос
Пузанкова Эмилия
Есть неувязка: так как год не указан, неизвестно с какого дня недели начинается интервал, как следует, невероятно найти денек недели ни для одной даты из этого промежутка. Следует либо указать год (это сложнее), или название денька недели для начала промежутка.
Лилия Лекчинова
скорее всего денек недели для начала промежутка.
Ополченцева Эльвира
Также надо знать, високосный ли год, если в интервал попадает переход с февраля на март
Тимур Кагыркин
помогите пожалуйста))
Антонина Фондымакина
Либо тогда все же указать год и воткнуть метод "постоянного календаря", можно в упрощенном виде для 20-21 веков....
Руслан Кошталев
В целом выходит теснее монстровито...(((
1 ответ
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 (d1gt;=28) and (m1=2) then найти, високосный ли год
      if ((y mod 4)=0) and ((y mod 100)lt;gt;0) or ((y mod 400)=0)
      then days:=days+1;
    установлено количество дней в промежутке
    i:=days mod 7;
    days:=days div 7;
    if (dwgt;=dow) and ((dw-dow)lt; i) then days:= days +1;
    Writeln('Количество '+cdw,': ',days)
  end
end.

Тестовое решение:
Введите начало промежутка (денек месяц год):
12 5 2015
Введите номера денька и месяца конца интервала:
24 6
Укажите, какой денек недели подсчитать (Вс/Пн/Вт/Ср,Чт/Пт/Сб):
Ср
Количество Ср: 7

, оставишь ответ?
Имя:*
E-Mail:


Последние вопросы

Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт