Помощь - Поиск - Пользователи - Календарь
Полная версия: определение высокосного года
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Slim
Если год высокосный, то он должен делиться на 400, на 100 и на 4
Написал код, но написал - не верно!
В чём у меня ошибка?

Код
If (year mod 4=0) Then
Begin
If (year mod 100=0) Tnen
Begin
If (year mod 400=0) Tnen
b:='Да, год высокосный'
End
end
Else
b:='Нет, год не высокосный'


volvo
Цитата
Если год высокосный, то он должен делиться на 400, на 100 и на 4
Не совсем...

Вот так будет точнее:
"Номер високосного года делится на 4, кроме тех, которые делятся на 100, но не делятся на 400."

Соответственно,
function LeapYear(n: Word): Boolean;
begin
LeapYear := ((n mod 4) = 0) and
not (((n mod 100) = 0) and ((n mod 400) <> 0))
end;
Slim
To volvo:
Очень благодарен
А как теперь связать функцию с основным кодом программы?
Ozzя
// Твой код
function LeapYear(n: Word): Boolean;
begin
LeapYear := ((n mod 4) = 0) and
not (((n mod 100) = 0) and ((n mod 400) <> 0))
end;
// Твой код
Begin
// Твой код
if LeapYear() then // Твой код
// Твой код
End.
Slim
Допустим исходный код программы такой:

Код
Program God;
Var
Year:Integer;
If (year mod 4=0) Then
Begin
If (year mod 100=0) Tnen
Begin
If (year mod 400=0) Tnen
b:='Да, год высокосный'
End
end
Else
b:='Нет, год не высокосный'
WriteLn('Наш год: ',b);
ReadLn;
End.


Как теперь подставить функцию, чтоб она проверяла на высокостность года переменную Year?

volvo
Program God;

{ Здесь - функция LeapYear }

Var
Year: Integer;
b: string;
begin
... { Ввод значения year }
If LeapYear(year) Then b:='Да, год високосный'
Else b:='Нет, год не високосный';

WriteLn('Наш год: ', b);
ReadLn;
End.
Slim
Код
function LeapYear(n: Word): Boolean;
begin
   LeapYear := ((n mod 4) = 0) and
     not (((n mod 100) = 0) and ((n mod 400) <> 0))
end;

Условие не корректно!
Получаеться что если год делиться на 4,и не делиться на 100 и на 400, то....
А нужно:
Если год делиться на 4, не делиться на 100, и делиться на 400, то...

Преподователь сказал, что в одно условие это записать сложно!
Если воожу 2000год - то пишет что год не высокосный!Когда должен показать - высокосный!
мисс_граффити
Цитата
Преподователь сказал, что в одно условие это записать сложно!

обманул...
if (year mod 400 = 0) or ((year mod 4 = 0) and not(year mod 100 = 0)) then


Добавлено через 3 мин.
проверила вариант Ozzи.
Отработал нормально на 2000 - выдал, что високосный.
Ищи ошибки у себя.
volvo
Цитата
Условие не корректно!

Slim, учи матчасть, а? Приведи хотя бы один пример некорректной работы, потом будешь утверждать что-нибудь...

Много развелось критиков dry.gif
Slim
Код
потом будешь утверждать что-нибудь...
Много развелось критиков


Прошу прощение, если кого то обидел!
Просто в своей задачи, на 2000-ном году, выводила программа - что год не высокосный!
Начал сдавать преподователю эту работу, он сказал - что условие не верно!
Вот и всё!

Значит сейчас буду разбираться со своей задачей!
Очень благодарен Вам за помощь!
мисс_граффити
и откуда мы можем знать, КАК ты исковеркал то условие, которое тебе дали?..
если ТВОЁ условие некорректно - это не значит, что некорректно то, что ты процитировал!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.