Предмет: Информатика,
автор: Nicolleta
Язык Паскаль!!!
Введите с клавиатуры -
-две календарные даты(день, месяц)
-название дня недели
Напишите программу определяющая количество дней указанного названия,которые оказались в заданном интервале времени!
Аноним:
Есть проблема: поскольку год не указан, неизвестно с какого дня недели начинается интервал, следовательно, невозможно определить день недели ни для одной даты из этого интервала. Следует или указать год (это сложнее), или название дня недели для начала интервала.
Ответы
Автор ответа:
2
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
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
Похожие вопросы
Предмет: Английский язык,
автор: okcana249
Предмет: Русский язык,
автор: luzhevskaya35
Предмет: Українська мова,
автор: МіхаВедмідь
Предмет: Алгебра,
автор: nikitakolbich4
Предмет: Математика,
автор: pterod2014