Другие языки программирования и технологии
По дате вычислить порядковый номер дня в нашей эре.На паскале. Подскажите как это сделать ;/
На паскале. Подскажите как это сделать ;/
где то примерно так)) )
program MackDiSsS;
const month:array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
var k,day,mes:byte;
year:integer;
nomber:longint;
begin
writeln('Введите число');
readln(day);
writeln('Введите месяц) ;
readln(mes);
writeln('Введите год) ;
readln(year);
number:=day+year*365+(year div 4);
for k:=1 to mes do number:=number+month[k];
writeln(number);
end.
program MackDiSsS;
const month:array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
var k,day,mes:byte;
year:integer;
nomber:longint;
begin
writeln('Введите число');
readln(day);
writeln('Введите месяц) ;
readln(mes);
writeln('Введите год) ;
readln(year);
number:=day+year*365+(year div 4);
for k:=1 to mes do number:=number+month[k];
writeln(number);
end.
Хреново предыдущий отвечающий знает, какие годы високосные, а какие - нет.
"Хреново предыдущий отвечающий знает, какие годы високосные, а какие - нет"
Так он по юлианскому пытался.
_____
По-моему так правильнее:
program MackDiSsS;
const month:array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
var k,day,mes:byte;
year:integer;
number:longint;
begin
writeln('Введите число');
readln(day);
writeln('Введите месяц');
readln(mes);
writeln('Введите год');
readln(year);
number:=day+year*365+(year div 4)-366-(year div 100)+ (year div 400)+1;
if mes > 1 then
for k:=1 to (mes-1) do number:=number+month[k];
writeln(number);
end.
Ключевые моменты
- в эрах нет нулевого года
- в григорианском стиле не являются высокосными года которые делятся на 100, но не делятся на 400
- последняя +1, чтобы было не "прошедших дней", а номер текущего
Так он по юлианскому пытался.
_____
По-моему так правильнее:
program MackDiSsS;
const month:array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
var k,day,mes:byte;
year:integer;
number:longint;
begin
writeln('Введите число');
readln(day);
writeln('Введите месяц');
readln(mes);
writeln('Введите год');
readln(year);
number:=day+year*365+(year div 4)-366-(year div 100)+ (year div 400)+1;
if mes > 1 then
for k:=1 to (mes-1) do number:=number+month[k];
writeln(number);
end.
Ключевые моменты
- в эрах нет нулевого года
- в григорианском стиле не являются высокосными года которые делятся на 100, но не делятся на 400
- последняя +1, чтобы было не "прошедших дней", а номер текущего
uses crt;
function vis(g:integer):boolean; {високосный ли год}
begin
vis:=((g mod 100<>0)and(g mod 4=0))or(g mod 400=0);
end;
var d,m,g:integer;
kd:array[1..11] of byte;{массив количеств дней в месяцах январь-ноябрь}
ii,k:longint;
begin
clrscr;
for ii:=1 to 11 do
if ii=2 then kd[ii]:=28
else if ii in [4,6,9,11] then kd[ii]:=30
else kd[ii]:=31;
repeat
write('Год: ');readln(g);
until (g>=1)and(g<=2100);
repeat
write('Месяц: ');readln(m);
until m in [1..12];
repeat {проверим правильность ввода}
k:=0;
write('День: ');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(g) and(d>29) then k:=1;
if(m=2) and not vis(g) and(d>28) then k:=1;
until k=0;
if g=1 then {если первый год}
begin
if m=1 then k:=d {и месяц первый}
else
begin
k:=d; {дней в этом месяце}
for ii:=1 to m-1 do{пляс то что прошло с начала года}
k:=k+kd[ii];
end
end
else {остальные года}
begin
k:=d;
for ii:=1 to g-1 do
begin
if vis(ii) then k:=k+366 {високосный}
else k:=k+365; {нет}
end;
if m>1 then
begin
if vis(g) then kd[2]:=29;{если месяц больше 2, добавим день в феврале для високосного}
for i:=1 to m-1 do
k:=k+kd[ii];
end;
end;
write('Количество дней с 01.01.0001=',k);
readln
end.
function vis(g:integer):boolean; {високосный ли год}
begin
vis:=((g mod 100<>0)and(g mod 4=0))or(g mod 400=0);
end;
var d,m,g:integer;
kd:array[1..11] of byte;{массив количеств дней в месяцах январь-ноябрь}
ii,k:longint;
begin
clrscr;
for ii:=1 to 11 do
if ii=2 then kd[ii]:=28
else if ii in [4,6,9,11] then kd[ii]:=30
else kd[ii]:=31;
repeat
write('Год: ');readln(g);
until (g>=1)and(g<=2100);
repeat
write('Месяц: ');readln(m);
until m in [1..12];
repeat {проверим правильность ввода}
k:=0;
write('День: ');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(g) and(d>29) then k:=1;
if(m=2) and not vis(g) and(d>28) then k:=1;
until k=0;
if g=1 then {если первый год}
begin
if m=1 then k:=d {и месяц первый}
else
begin
k:=d; {дней в этом месяце}
for ii:=1 to m-1 do{пляс то что прошло с начала года}
k:=k+kd[ii];
end
end
else {остальные года}
begin
k:=d;
for ii:=1 to g-1 do
begin
if vis(ii) then k:=k+366 {високосный}
else k:=k+365; {нет}
end;
if m>1 then
begin
if vis(g) then kd[2]:=29;{если месяц больше 2, добавим день в феврале для високосного}
for i:=1 to m-1 do
k:=k+kd[ii];
end;
end;
write('Количество дней с 01.01.0001=',k);
readln
end.
Похожие вопросы
- Паскаль. подскажите кто может
- Зная что каждому числу соответствует буква алфавита с таким же порядковым номером,создайте имя создателя арифмометра.
- Написать программу на с++:дпн порядковый номер месяца,вывести на экран его название
- Вот задачка по с++. Очень нужна помощь, пожалуйста. задан текст. Напечатать порядковый номер самого длинного слова
- Подскажите пожалуйста как сделать елку в Паскале?
- Строковые переменные (Паскаль).Подскажите пожалуйста
- Помогите плз найти ошибку в задаче в паскале, есть код,что сделал
- паскаль. подскажите алгоритм
- Проблема с задачей с паскале, подскажите пожалуйста где неправельно и как ошибку исправить
- Подскажите, пожалуйста, как сделать такую же обработку фото?