Костерин В В
Шрифт:
ReadLn (Year);
{Контроль введенного года }
if Year < YEARBASE then
begin
{Аварийное завершение программы }
Write ('He могу составить календарь');
WriteLn (Year: 5, 'года');
Write ('Для завершения программы');
WriteLn ('нажмите любую клавишу…');
repeat until KeyPressed;
Halt (1);
end;
WriteLn ('Ждите, идет печать…');
Assign (F, 'PRN');
Rewrite (F);
{Печать календаря на принтере }
{Часть пробелов в следующей строке была изъята!}
WriteLn (F, ' ', Year);
{Подготовка информации}
{Определение количества пустых клеток в январе года Year}
Blanks: = BLANKS1917;
i:= YEARBASE;
while (I Year) do begin
{Увеличение Blanks}
Inc (Blanks); {В любой год плюс 1 }
if Vys (i)
then
Inc (Blanks); {Прошлый год високосный, +2}
{Корректировка Blanks}
if (Blanks >= 7) then Blanks:= Blanks — 7;
Inc (i); {Текущий год }
end;
{Определение количества дней в каждом месяце }
for i:= 1 to 12 do
MonthsDays [i]:= 31;
MonthsDays [4]:= 30;
MonthsDays [6]:= 30;
MonthsDays [9]:= 30;
MonthsDays [11]:= 30;
MonthsDays [2]:= 28;
if Vys (Year) then MonthsDays [2]: = 29;
{Определение количества пустых клеток в начале
каждого месяца }
BlanksDays [1]:= Blanks;
for i: = 2 to 12 do
if BlanksDays [i — 1] + MonthsDays [i — 1] < 35
then
BlanksDays [i]:= BlanksDays [i — 1] + MonthsDays [i — 1] — 28
else
BlanksDays [i]:= BlanksDays [i — 1] + MonthsDays [i — 1] — 35;
{Задание номеров кварталов }
{Печать тела календаря }
for Kvartal:= 1 to 4 do begin
{Печать наименования квартала }
WriteLn (F, KVARTALNAME [Kvartal]);
{Печать дат квартала }
{Задание номера дня недели }
for iDW:= 1 to 7 do
begin
{Печать наименования дней недель }
Write (f, WEEKDAYNAME [iDW];
{Печать трех месяцев дат квартала }
for iKvartalMonth: = 1 to 3 do begin
{Расчет номер месяца в квартале }
iMonth: = (Kvartal — 1) * 3 + iKvartalMonth;
{Печать шести колонок дат дня недели квартала}
for iCol:= 1 to 6 do begin
iCell:= (iCol — 1)*7 + iDW;
if ((iCell > BlanksDays [iMonth]) and (iCell <= BlanksDays [iMonth] +
MonthsDays [iMonth]))
then
Write (F, iCell — BlanksDays [iMonth]: 3)
else
Write (F, ' ');
end;
end;
{Печать наменования дней недель }
WriteLn (F, WEEKDAYNAME [iDW];
end;
end;
Close (F);
Write ('Для завершения программы');
WriteLn ('нажмите любую клавишу…');
Repeat until KeyPressed;
end.
ВЫВОДЫ
• С появлением ЭВМ актуальным стал поиск способов описания вычислительных алгоритмов. В 60-х годах уже применялись два способа описания алгоритмов: словесный пошаговый и графический в виде схем алгоритмов (жаргонно: блок-схем алгоритмов).