| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Проверка на високосный год |
| Автор: mr.Anderson 28.8.2005, 17:18 |
| Задача: есть TEdit, в который вводится год в четырехзначном формате (2004, например). Надо узнать, високосный или нет введенный год. Как это сделать? Я знаю, что у високосного года последняя цифра делится без остатка на 4. Но как разделить введенное значение на цифры, обработать последнюю и сделать в соответствии с вычислениями вывод? Прошу помочь. |
| Автор: maxim1000 28.8.2005, 17:26 |
| переводим строку в число с помощью StrToInt(Edit1->Text), смотрим на x%4 только я слышал, что есть еще одно уточнение для високосного года (не уверен на 100%): если число делится на 100, но не делится на 400 - год не високосный... |
| Автор: mr.Anderson 28.8.2005, 17:29 | ||
Как перевести текст в Эдите в переменную, я знаю - примерно так:
Я спрашиваю, как теперь оперировать с последней цифрой? Ведь в переменную передано все число! |
| Автор: Mayk 28.8.2005, 17:30 | ||||
maxim1000 Угу. Цитата:
Добавлено @ 17:33
Ну дыкть, тебе и нужно целое. 2000 год был високосным, 2100 уже не будет. Здесь не отделаться последней цифрой. |
| Автор: mr.Anderson 28.8.2005, 17:33 | ||
А... Вон как. Следовательно, проверку делаем так?
Верно? |
| Автор: mr.Anderson 28.8.2005, 17:55 | ||||
Что за фигня?! Пишу:
Компилер ругается на строчки 3, 4, 5 в моем коде. Говорит:
Помогите! |
| Автор: Mayk 28.8.2005, 17:59 | ||
Нда. А ты чего от него хочешь?
Замени на bool VISOKOS=false; и почитай что-нить про препроцессор, директивы #define etc. |
| Автор: mr.Anderson 28.8.2005, 18:01 | ||||||
Я пробовал писать и так:
И даже так:
Но ошибка все равно выдается! Добавлено @ 18:03 Или нельзя константам... Ой, ё! Добавлено @ 18:08 Так. Вот общий код:
Почему при наборе даты 30.02.2012 число 30 меняется на 28, а не на 29, как должно быть? |
| Автор: Mayk 28.8.2005, 18:14 | ||||
Вот почему
|
| Автор: mr.Anderson 28.8.2005, 18:28 | ||
Или я чего-то недопонимаю? |
| Автор: Mayk 28.8.2005, 18:30 | ||
| Побегай с отладчиком, поймешь. ЗЫ. Хинт. Что неверно в этом коде по обмену значения с 1 на 2 и наоборот
|
| Автор: mr.Anderson 28.8.2005, 18:36 | ||||
Если б я умел им пользоваться...
Это вопрос? Тогда не знаю... Вроде, все нормально. Если x равен 1, то он становится равен 2. Если он равен 2, то приравнивается к 1. Что тут может быть неверно? Послушайте, подскажите, что не так в моем коде, и закроем вопрос! Неужели ж это так трудно? |
| Автор: Mayk 28.8.2005, 18:44 | ||
| Покажу, что не так в коде с обменом. В твоём та же фишка. Итак, имеем
Пусть X=2. Смотрим. if (x==1) <-- неверно, ничего не делаем if (x==2) <-- верно, x=1; Получили x=1. А теперь x=1. if (x==1)<--верно, x = 2 if (x==2)<--верно, x = 1 Получем х=1. зы. оффтопик отсюда, вообще так менять неинтересно. Лучше вот так делать x = abs(x-2)+1;. Так |1-2|+1=1+1=2 |2-2|+1=0+1=1 |
| Автор: mr.Anderson 28.8.2005, 18:59 |
| Я, наверно, слишком тупой, но ошибки у себя я не нашел. Завтра я зайду снова, надеюсь, вы мне укажете ошибку. |
| Автор: Mayk 28.8.2005, 19:09 | ||
Упс, сорри, не туда посмотрел. Вот та ошибка:
Предыдушии посты показывают другую ошибку. 2000 год например является вискосным, хотя программа посчитает по другому. |
| Автор: Vyacheslav 29.8.2005, 09:54 | ||
Надо быть проще
|
| Автор: codelord 30.8.2005, 17:29 | ||||||
полностью согласен примерно так на форме Edit1 в котором год и Button1 который жмем
Добавлено @ 17:35 Ну или так:
|
| Автор: mr.Anderson 30.8.2005, 20:37 |
| Спасибо, Codelord. Vyacheslav, а вы не могли раньше сказать? Мы тут такую кашу заварили. А могли бы и не варить... |
| Автор: Гость_fisic 27.10.2005, 22:00 |
| По-моему задача достаточно проста. 1. Вроде как есть функция bool IsLeapYear(int); 2. Береч год, целиком, например 2000, находиш остаток от деления на 4, если он равен нулю, значит год високосный, если нет, то нет. Тема стара, но я так понял, не решена, так что может, пригодится С уважением, fisic. |
| Автор: Гость_fisic 27.10.2005, 22:04 |
| Извините, что-то у меня протормозило, я не увидел продолжение темы. Ответ уже готов... Жаль... Хотел помочь...., Кстати, не могли бы вы привести пример года, который делился на 4 без остатка, но не был високосным? с уважением, fisic. |
| Автор: Mayk 28.10.2005, 08:24 | ||||
Выше же писали. 1900,2100 к примеру не високосны. |