Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ определение высокосного года

Автор: Slim 10.06.2007 22:31

Если год высокосный, то он должен делиться на 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 10.06.2007 22:35

Цитата
Если год высокосный, то он должен делиться на 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 10.06.2007 22:50

To volvo:
Очень благодарен
А как теперь связать функцию с основным кодом программы?

Автор: Ozzя 11.06.2007 16:15

// Твой код
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 11.06.2007 22:07

Допустим исходный код программы такой:

Код
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 11.06.2007 22:23

Program God;

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

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

WriteLn('Наш год: ', b);
ReadLn;
End.

Автор: Slim 13.06.2007 20:55

Код
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год - то пишет что год не высокосный!Когда должен показать - высокосный!

Автор: мисс_граффити 13.06.2007 23:18

Цитата
Преподователь сказал, что в одно условие это записать сложно!

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


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

Автор: volvo 13.06.2007 23:31

Цитата
Условие не корректно!

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

Много развелось критиков dry.gif

Автор: Slim 13.06.2007 23:52

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


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

Значит сейчас буду разбираться со своей задачей!
Очень благодарен Вам за помощь!

Автор: мисс_граффити 14.06.2007 0:24

и откуда мы можем знать, КАК ты исковеркал то условие, которое тебе дали?..
если ТВОЁ условие некорректно - это не значит, что некорректно то, что ты процитировал!