Форум «Всё о Паскале» _ Задачи _ определение высокосного года
Автор: 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, учи матчасть, а? Приведи хотя бы один пример некорректной работы, потом будешь утверждать что-нибудь...
Много развелось критиков
Автор: Slim 13.06.2007 23:52
Код
потом будешь утверждать что-нибудь... Много развелось критиков
Прошу прощение, если кого то обидел! Просто в своей задачи, на 2000-ном году, выводила программа - что год не высокосный! Начал сдавать преподователю эту работу, он сказал - что условие не верно! Вот и всё!
Значит сейчас буду разбираться со своей задачей! Очень благодарен Вам за помощь!
Автор: мисс_граффити 14.06.2007 0:24
и откуда мы можем знать, КАК ты исковеркал то условие, которое тебе дали?.. если ТВОЁ условие некорректно - это не значит, что некорректно то, что ты процитировал!