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

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

Форум «Всё о Паскале» _ Задачи _ простецкая задача, а решить не решу ..)

Автор: __V 4.02.2012 11:32

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

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

Автор: Krjuger 4.02.2012 15:45

Если сравнивать напрямую даты,то долго и нудно проверять все условия, начиная с годов,вы начните, покажите свои идеи,а мы поможем.

Автор: Федосеев Павел 4.02.2012 16:20

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


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

Автор: sheka 4.02.2012 21:21

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

Это не правильное условие проверки. Шаришь почему?
Как минимум потому, что (Показать/Скрыть)

Автор: Федосеев Павел 4.02.2012 21:41

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


По-правде говоря, не понимаю. Объясни или покажи пример когда это выражение превратится в глупость...

Автор: sheka 4.02.2012 23:22

Да, что-то я протупил, прошу прощения smile.gif

Автор: klem4 5.02.2012 10:40

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

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

Автору
Воспользуйся поиском, задача решалась неоднократно.
http://forum.pascalnet.ru/index.php?s=&showtopic=6681&view=findpost&p=108595 можеш посмотреть вот это решение.

Автор: Федосеев Павел 5.02.2012 10:59

Константы 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

Автор: klem4 5.02.2012 12:08

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