IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> простецкая задача, а решить не решу ..)
__V
сообщение 4.02.2012 11:32
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Женский
Реальное имя: Вера

Репутация: -  0  +


Даны две тройки чисел a,b,c и x,y,z. (число, месяц, год). Определить количество полных лет, прошедших между этими датами.

помогите, пожалуйста

Сообщение отредактировано: __V - 4.02.2012 11:36
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 4.02.2012 15:45
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Если сравнивать напрямую даты,то долго и нудно проверять все условия, начиная с годов,вы начните, покажите свои идеи,а мы поможем.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 4.02.2012 16:20
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Можно дату представить в виде одного числа, формируемого примерно так:

VAR
Date1, Date2 : LongInt;
.............
Date1:=a+100*b+10000*c;
Date2:=x+100*y+10000*z;
предоложим, что Date1>=Date2 (ну или проверим if)
WriteLn('Число полных лет: ', (Date1-Date2):10000);
..............

Прошу прощения, конечно же (Date1-Date2) div 10000

Сообщение отредактировано: Федосеев Павел - 4.02.2012 19:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 4.02.2012 21:21
Сообщение #4


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Цитата
(Date1-Date2) div 10000

Это не правильное условие проверки. Шаришь почему?
Как минимум потому, что (Показать/Скрыть)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 4.02.2012 21:41
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Цитата
Это не правильное условие проверки. Шаришь почему?
Как минимум потому, что все твое решение сводится к простому с-z.


По-правде говоря, не понимаю. Объясни или покажи пример когда это выражение превратится в глупость...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 4.02.2012 23:22
Сообщение #6


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Да, что-то я протупил, прошу прощения smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 5.02.2012 10:40
Сообщение #7


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата(Федосеев Павел)
Объясни или покажи пример когда это выражение превратится в глупость...

Я например совершенно не понял, откуда ты взял константы 1,100 и 10000. Потом даннное решение, что-то мне подсказывает, совершенно не учитывает тот факт, что в году может быть не только 365 дней.

Автору
Воспользуйся поиском, задача решалась неоднократно.
Задачи связанные с календарем. можеш посмотреть вот это решение.

Сообщение отредактировано: klem4 - 5.02.2012 10:41


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 5.02.2012 10:59
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Константы 1, 100 и 10000 взяты из соображения получить из даты 01 февраля 2012 года число 20120201.

Вне зависимости от числа дней в году от 02 марта 2012 до 01 марта 2013 пройдет менее 1 года (20130301-20120302=9999 < 10000), тоже самое и для пары дат 02 марта 2011 - 01 марта 2012 (20120301-20110302=9999 < 10000).

Конечно, любому нужно ознакомиться с юлианскими датами и получением количества дней между ними (при программировании сенсорных панелей BrainChild эти алгоритмы меня сильно выручили), но эта задача гораздо проще и должна решаться проще. К тому же, знание, что между датами прошло 365 дней - пустое без знания високосности и расположения даты относительно 1 марта.

Dixi

Сообщение отредактировано: Федосеев Павел - 5.02.2012 11:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 5.02.2012 12:08
Сообщение #9


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Соглашусь с вами. Мне по крайней пока не удалось придумать входные данные, на которых данное решение выдало бы неверный ответ.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 29.03.2024 13:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"