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

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

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

> Тип данных для сравнения даты, какой лучше использовать?
сообщение
Сообщение #1


Новичок
*

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

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


Решаю задание по записям, все вроде понятно, но есть один вопрос. Какой тип данных(и какой формат ДД.ММ.ГГ или еще как?) лучше использовать для нахождения минимальной(максимальной) даты?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
{$B-}//что это?//
Это гарантия включенной "короткой схемы" вычисления логических выражений. Что такой "короткая схема", знаешь? Это - когда логическое выражение вычисляется до тех пор, пока не станет очевидным результат. Теперь, смотри что происходит.



if
// сначала сравниваем годы. Если они разные - то результат
// Impl уже будет равным True, соответственно not True = False...
// Дальше в выражении только And-ы, что бы следующие Impl-ы
// ни вернули, результат все равно уже False, поэтому здесь выполнение
// прекратится, и уйдем на Compare := Res
not Impl (Res, First.Year, Second.Year) and

// Ага. Мы пришли сюда... Значит, годы одинаковые, предыдущий Impl
// вернул False, соответственно not Imple = True, и результат общего
// логического выражения зависит от следующих его частей. Продолжаем
// по тому же алгоритму, сравниваем месяцы...
not Impl (Res, First.Month, Second.Month) and
not Impl (Res, First.Day, Second.Day) then Res := 0;

// В итоге, если годы, месяцы, и дни - одинаковые, то общее выражение - Истина,
// в переменную Res заносится 0, и потом этот 0 возвращается как результат
// функции.

// А вот если ходя бы одно из полей (неважно какое, год это, месяц, или день)
// не совпадет - то вычисление тут же прервется, в переменной Res останется то,
// что было на момент выхода из Impl, обнуляться Res не будет, и функция вернет
// (+1) или (-1), смотря, какая дата больше



Хочешь убедиться, что вычисление логического выражения действительно прерывается в зависимости от того, чем различаются даты? добавь строчку:

Цитата
   function Impl (var R : Integer; A, B : Integer) : Boolean;
begin
Write('*'); { <--- Вот сюда }
Impl := True;
R := A - B;
if R <> 0 then R := R div Abs( R ) else Impl := False;
end;
, и поиграйся с входными датами. Если они будут разных годов - то напечатается одна звездочка и потом (+/-)1, то есть, Impl выполнялась только один раз, сравнились только года, потом выполнение Compare закончилось. Если годы одинаковые, а разные - месяцы, то напечатается 2 звездочки и результат, иначе - все три звездочки...

Цитата
P.S: Интересно а как все это реализовать если дат будет например 10 или больше?
Интересно, а если у тебя есть массив из 10 целых чисел (или больше), как ты в нем находишь минимум? Может, сравниваешь каждое число с текущим минимумом, и если оно еще меньше - то запоминаешь новый индекс? Чем даты хуже? Функция сравнения у тебя есть. Разницы вообще не вижу:
IndexMin := 1;
for i := 2 to array_size do
if Compare(dat[indexMin], dat[ i ]) < 0 then IndexMin := i;

Вот и все, в результате dat[IndexMin] - минимальная дата.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





- Текстовая версия 10.09.2025 3:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name