Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на високосный год 
:(
    Опции темы
mr.Anderson
Дата 28.8.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Задача: есть TEdit, в который вводится год в четырехзначном формате (2004, например). Надо узнать, високосный или нет введенный год.
Как это сделать? Я знаю, что у високосного года последняя цифра делится без остатка на 4. Но как разделить введенное значение на цифры, обработать последнюю и сделать в соответствии с вычислениями вывод? Прошу помочь.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
maxim1000
Дата 28.8.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



переводим строку в число с помощью StrToInt(Edit1->Text), смотрим на x%4
только я слышал, что есть еще одно уточнение для високосного года (не уверен на 100%): если число делится на 100, но не делится на 400 - год не високосный...


--------------------
qqq
PM WWW   Вверх
mr.Anderson
Дата 28.8.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Как перевести текст в Эдите в переменную, я знаю - примерно так:
Код

int var=Edit1->Text.ToInt();

Я спрашиваю, как теперь оперировать с последней цифрой? Ведь в переменную передано все число!


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 28.8.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 1
Всего: 134



maxim1000 Угу. Цитата:
Цитата(http)

1. Год делится на 400 -> високосный -> конец
2. Год делится на 100 -> не високосный -> конец
3. Год делится на 4 -> високосный -> конец
4. Год не високосный -> конец
5. Всё

Добавлено @ 17:33
Цитата(sim7 @ 28.8.2005, 21:29)
Ведь в переменную передано все число!

Ну дыкть, тебе и нужно целое. 2000 год был високосным, 2100 уже не будет. Здесь не отделаться последней цифрой.

Это сообщение отредактировал(а) Mayk - 28.8.2005, 17:31


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 28.8.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



А... Вон как. Следовательно, проверку делаем так?
Код

#define FLAG1 0
#define FLAG2 0
//-------------------------------------------------

int var=Edit1->Text.ToInt();
if((var%400)==0) FLAG1=1;
if((var%100)==0) FLAG2=1;
if((var%4)==0) FLAG1=1;

if(!FLAG2) //значит, високосный

Верно?

Это сообщение отредактировал(а) sim7 - 28.8.2005, 17:34


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 28.8.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Что за фигня?! Пишу:
Код

#define VISOKOS 0
int var=Edit1->Text.ToInt();
if((var%400)==0) VISOKOS=true;
if((var%100)==0) {if(!VISOKOS) VISOKOS=true;
if((var%4)==0) VISOKOS=false;
//Дальше проверка
if(VISOKOS) //Делаем то-то
if(!VISOKOS) //Делаем другое

Компилер ругается на строчки 3, 4, 5 в моем коде. Говорит:
Цитата
Lvalue required

Помогите!

Это сообщение отредактировал(а) sim7 - 28.8.2005, 17:56


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 28.8.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 1
Всего: 134



Нда. А ты чего от него хочешь?
Цитата(sim7 @ 28.8.2005, 21:55)
#define VISOKOS 0

Замени на bool VISOKOS=false; и почитай что-нить про препроцессор, директивы #define etc.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 28.8.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Я пробовал писать и так:
Код

#define VISOKOS 0
int var=Edit1->Text.ToInt();
if((var%400)==0) VISOKOS=1;
if((var%100)==0) {if(!VISOKOS) VISOKOS=1;
if((var%4)==0) VISOKOS=0;
//Дальше проверка
if(VISOKOS) //Делаем то-то
if(!VISOKOS) //Делаем другое

И даже так:
Код

#define VISOKOS false
int var=Edit1->Text.ToInt();
if((var%400)==0) VISOKOS=true;
if((var%100)==0) {if(!VISOKOS) VISOKOS=true;
if((var%4)==0) VISOKOS=false;
//Дальше проверка
if(VISOKOS) //Делаем то-то
if(!VISOKOS) //Делаем другое

Но ошибка все равно выдается!
Добавлено @ 18:03
Или нельзя константам... Ой, ё! smile Забыл, что константы - неизменяемые значения! Блин! Во опозорился...
Добавлено @ 18:08
Так. Вот общий код:
Код

bool VISOKOS=0;
int var=Edit1->Text.ToInt();
if((var%400)==0) VISOKOS=1;
if((var%4)==0) VISOKOS=1;
if((var%100)==0) VISOKOS=0;
if(VISOKOS)
 if(Edit2->Text.ToInt()==2 && Edit1->Text.ToInt()>=30)
  Edit1->Text=29;
if(!VISOKOS)
 if(Edit2->Text.ToInt()==2 && Edit1->Text.ToInt()>=29)
  Edit1->Text=28;

Почему при наборе даты 30.02.2012 число 30 меняется на 28, а не на 29, как должно быть?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 28.8.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 1
Всего: 134



Цитата(sim7 @ 28.8.2005, 22:01)
Почему при наборе даты 30.02.2012 число 30 меняется на 28,

Вот почему
Цитата(sim7 @ 28.8.2005, 22:01)
if((var%4)==0) VISOKOS=1;




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 28.8.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Цитата
Год делится на 4 -> високосный -> конец

Или я чего-то недопонимаю?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 28.8.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 1
Всего: 134



Побегай с отладчиком, поймешь.

ЗЫ. Хинт. Что неверно в этом коде по обмену значения с 1 на 2 и наоборот
Код

if (x==1) x = 2;
if (x==2) x = 1;




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 28.8.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Цитата(Mayk @ 28.8.2005, 19:30)
Побегай с отладчиком, поймешь.

Если б я умел им пользоваться...
Цитата(Mayk @ 28.8.2005, 19:30)
ЗЫ. Хинт. Что неверно в этом коде по обмену значения с 1 на 2 и наоборот

Это вопрос? Тогда не знаю... Вроде, все нормально. Если x равен 1, то он становится равен 2. Если он равен 2, то приравнивается к 1. Что тут может быть неверно?

Послушайте, подскажите, что не так в моем коде, и закроем вопрос! Неужели ж это так трудно? smile smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 28.8.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 1
Всего: 134



Покажу, что не так в коде с обменом. В твоём та же фишка.
Итак, имеем
Код

if (x == 1) x=2;
if (x == 2) x=1;

Пусть 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



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 28.8.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Я, наверно, слишком тупой, но ошибки у себя я не нашел. Завтра я зайду снова, надеюсь, вы мне укажете ошибку.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mayk
Дата 28.8.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 1
Всего: 134



Упс, сорри, не туда посмотрел. Вот та ошибка:
Цитата(sim7 @ 28.8.2005, 22:01)
int var=Edit1->Text.ToInt();

Предыдушии посты показывают другую ошибку. 2000 год например является вискосным, хотя программа посчитает по другому.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.