ОС Windows более распространена, потому что небольшая компания Майкрософт вовремя и удачно предложила свою новую операционную систему DOS гиганту IBM, который всё же решил снизойти до рынка Персональных Компьютеров и создал в итоге целую архитектуру IBM PC, открытую и общедоступную. Т.е. компьютеры по таким стандартам, периферию и ПО к ним могла делать любая фирма, а не только IBM. В то время это было необычно. "IBM PC совместимых" компьютеров стало ооочень много в мире и практически на всех стояла MS-DOS, а затем и Windows.
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