21:03

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
Помогите, пожалуйста, с задачей на С++
Описать класс "Историческое событие" с полями "число", "месяц", "год", "событие" и следующими методами:
а)ввода исторического события (сделано)
б) вывода исторического события (сделано)
в) вычисляющего интервал в днях, прошедший между двумя заданными историческими событиями (есть задумки, но не могу реализовать)
г) сортирующую массив событий по полю "событие". (вообще глухо)

класс описал, есть метод, определяющий, високосный год или нет. Опыта в программирование не хватает, чтобы додуматься до остального.(
помогите, пожалуйста!

Комментарии
17.06.2009 в 21:32

All you need is love
Сразу говорю, по Си я не спец, но если Вы пишете на борландовском Билдере, то пару идей могу подкинуть - там много общего с Дельфи.
17.06.2009 в 21:34

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
У меня VS, но идеи никогда не помешают..)
17.06.2009 в 21:46

All you need is love
Ну вот насчет даты. Я тут в терминах Паскаля буду, но аналогичные типы есть в любом высокоуровневом современном языке. Так вот, дата. Вы храните ее в трех полях, каждое из которых типа integer. Теперь, чтобы узнать разницу между двумя датами (а такая функция, наверняка есть), нам надо преобразовать эти три integer'а в что-то подобное дельфийскому TDate. Сначала собираем соответствующую строку (тут надо обратить внимание на формат и разделитель даты, установленные в системе), а затем преобразовываем строку в тип, представляющий дату. Как оно там в Си реализовано, а в Дельфи есть функция, вычисляющая разницу между двумя переменными типа TDate. Тут уж надо жать ф1 и искать функцию. Вот в бейсике, который визуальный, она DateDiff называется, например.

Пример сортировки массива поищите в гугле, это достаточно банальная задача, сотни раз описаная. Вот такие пока идеи, может, и не совсем верные.
17.06.2009 в 22:01

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
Я не знаю Delphi, поэтому немного сложновато.) в данной задаче отдельно вводятся число, месяц и год. Две даты. Сначала надо сравнить, какая из дат больше, чтобы понять, с какой начинать отсчёт.
Например, у нас есть 25.05.2008 и 03.08.2009. Первая дата меньше, поэтому надо вычислить, сколько дней в данном месяце (конкретно здесь в мае 31 день) и вычесть число (31-25=6), затем складываем с числом второй даты (6+3=9), это и будет начальное число. Затем к нему необходимо в цикле прибавлять количество дней каждого месяца между ними, проверяя, високосный год или нет. Алгоритм в голове уже есть, а вот на реализацию на С не хватает.) боюсь, тут только поможет С-специалист.
17.06.2009 в 22:10

All you need is love
Jaxter Z. Vargas, если функция вычисления разницы дат есть, она сама учитывает такие нюансы, как различное число дней в месяцах и високосные года
17.06.2009 в 22:26

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
Я таких функций не встречал. Да и делать нам надо не с функциями, а именно таким грубым методом.)
17.06.2009 в 22:28

All you need is love
Тогда я пас
17.06.2009 в 22:38

Случайности не случайны
ну грубым методом это же не так тяжело как кажется)
если например выводить разницу между датами в виде Х дней У месяцев К лет. тогда нужно будет по отдельности вычесть одну дату(число, месяц, год) из другой. если я правильно понимаю то взяв эти разности по модулю будет не важно как вычитать из большей меньшую или наоборот.
17.06.2009 в 22:43

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
Just Ghost
Это-то понятно. Но тогда надо каждый месяц переводить в дни. Надо знать, что за месяц и сколько в нём дней. А если выпадет февраль, то ещё и проверять, високосный год или нет

kugelschreiber
Спасибо за попытку.
17.06.2009 в 23:04

Случайности не случайны
Jaxter Z. Vargas а интервал строго в днях?..ну тогда нужно попробовать чтото с условиями вычитания месяцев.
можно попробовать сделать отсчет вроде как от нулевого дня попробовать найти закономерность из этого числа вычислять год меся и день и обратно
17.06.2009 в 23:38

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
Спасибо за предложения, но я уже знаю, как решать. Основная проблема - мало знаний для реализации на С++. Нужен именно программный код. Наверное, это сложно просить у кого-то.)
18.06.2009 в 14:16

вобщем делаете функцию которая переводит 3 интеджера в колво дней от 01.01.0000 нулевого года

типа так
заранее знаю что синтаксиса я не знаю)
function int DateToDays(int day, int month, int year)
{d = 0;
for(int i = 1; i <= year; i++)
{
if (Visokosnyj(year)) {d += 366;}
else {d += 365;}
}

for(int i = 1; i <= month; i++)
{
case i
{
when 1,3,5,7,8,10,12:
{
d += 31;
break;
}
when 4,6,9,11
{
d += 30;
break;
}
when 2
{
if (Visokosnyj(year)) {d += 29}
else {d+= 28}
break;
}
}
}
d+= days;
return d ;
}

а разницу между интеджерами уже не трудно найти
кстати чтоб не проверять какая дата больше а какая меньше, разницу можно брать по модулю. abs()
18.06.2009 в 15:16

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
Спасибо, Вы очень помогли.
12.07.2009 в 09:48

I wait Caturday. I wait Catnarok.
Jaxter Z. Vargas
Сортирующие алгоритмы нужны?
21.07.2009 в 16:03

Я не буду прилагать слишком много усилий к тому, чтобы вам понравиться, не нравлюсь - вы мои враги на следующие 2 часа.
ДихлофосЪ
Нет, благодарю, уже не актуально.