Перевод из календаря ацтеков в наш формат - Pascal ABC
Формулировка задачи:
Решение задачи: «Перевод из календаря ацтеков в наш формат»
const kd:array[1..11] of byte=(31,28,31,30,31,30,31,31,30,31,30); var g,m,d,i,k,ma,na,da:integer; vis:boolean; begin repeat write('Введите год g>0 g= '); readln(g); until g>0; //високосный ли год vis:=((g mod 100<>0)and(g mod 4=0))or(g mod 400=0); repeat write('Введите месяц от 1 до 12 m='); readln(m); until m in [1..12]; repeat k:=0; write('Введите день от 1 до 28..31 в зависимости от месяца и високосерсти года в='); readln(d); if(d<1)or(d>31) then k:=1; if(m in [4,6,9,11]) and(d>30)then k:=1; if(m=2) and vis and(d>29) then k:=1; if(m=2) and not vis and(d>28) then k:=1; until k=0; //определим номер дня в году if m=1 then k:=d //если январь else //другие месяцы begin k:=d; for i:=1 to m-1 do k:=k+kd[i]; end; if vis and(m>2)then k:=k+1;//в високосном году +1 день после февраля writeln('День с начала года=',k); if k>360 then write(k mod 360,' день поста') else begin dec(k); ma:=k div 18+1; na:=(k-18*(ma-1))div 5+1; da:=k mod 5+1; write(ma,' месяц ',na,' неделя ',da,' день'); end; end.
Объяснение кода листинга программы
const kd: array[1..11] of byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30); var g, m, d, i, k, ma, na, da: integer; vis: boolean; begin repeat write('Введите год g>0 g= '); readln(g); until g > 0; vis := ((g mod 100 <> 0) and (g mod 4 = 0)) or (g mod 400 = 0); repeat write('Введите месяц от 1 до 12 m='); readln(m); until m in [1..12]; repeat k := 0; write('Введите день от 1 до 28..31 в зависимости от месяца и високосерсти года в='); readln(d); if (d < 1) or (d > 31) then k := 1; if (m in [4, 6, 9, 11]) and (d > 30) then k := 1; if (m = 2) and vis and (d > 29) then k := 1; if (m = 2) and not vis and (d > 28) then k := 1; until k = 0; //определим номер дня в году if m = 1 then k := d — 1; //если январь else — //другие месяцы begin k := d; for i := 1 to m — 1 do k := k + kd[i]; end; if vis and (m > 2) then k := k + 1; //в високосном году +1 день после февраля writeln('День с начала года=', k); if k > 360 then write(k mod 360, ' день поста') else begin dec(k); ma := k div 18 + 1; na := (k — 18 * (ma — 1)) div 5 + 1; da := k mod 5 + 1; write(ma, ' месяц ', na, ' неделя ', da, ' день'); end; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д