Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2013, 17:38   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите операцию разности двух дат (результат в виде количества дней между датами), а также операцию увеличения даты на определенное количество дней.

с++


Код:
#include <iostream>

using namespace std;

class myDate
{
public:
	myDate();
	~myDate();
private:
	int y;
	int m;
	int d;
};


подскажите плиз на словах что дальше делать

Последний раз редактировалось Stilet; 24.07.2013 в 19:43.
mixon-21 вне форума Ответить с цитированием
Старый 24.07.2013, 19:52   #2
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

подскажите плиз
mixon-21 вне форума Ответить с цитированием
Старый 24.07.2013, 20:12   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Дальше - написать private-функцию, которая переводит дату из формата (yyyy:mmd) в формат (количество дней от Р.Х.) и обратно.
Теперь можно оперировать складывать-вычитать простые интегеры.
Smogg вне форума Ответить с цитированием
Старый 24.07.2013, 20:20   #4
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

подробней можно???????????????
mixon-21 вне форума Ответить с цитированием
Старый 24.07.2013, 21:25   #5
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
написать private-функцию, которая переводит дату из формата (yyyy:mmd) в формат (количество дней от Р.Х.) и обратно.
Что в этой функции нужно описать. И как это сделать?????
так наверное????

Код:
class myDate
{
public:
	myDate();
	~myDate();
private:
	int y;
	int m;
	int d;
	void dney();
};
void myDate::dney()//функция количество дней в году
{
if(y%4==0)
	cout<<"366 dney";
else
	cout<<"365 dney";
m;
d;
}

Последний раз редактировалось mixon-21; 24.07.2013 в 21:34.
mixon-21 вне форума Ответить с цитированием
Старый 25.07.2013, 12:19   #6
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
#include "stdio.h"

class CDate
{
	unsigned int _d;
	unsigned int _m;
	unsigned int _y;
public:
	CDate(unsigned int d, unsigned int m, unsigned int y) : _d(d),_m(m),_y(y) {}
	CDate(const CDate& d);
	CDate& operator= (CDate& d);
	CDate& operator+ (int days);
	const int operator-(const CDate& r) const;
	int yearDay() const;
	unsigned long daysInDate() const;
	void printDate(const char* format) const;
private:
	void daysToDate(const int days);
    int daysInYear(unsigned int y) const;
	void setDate(int dayNum, int year);
};

CDate::CDate(const CDate& d)
{
	operator=(d);
}

CDate& CDate::operator=(CDate& d)
{
	_d = d._d;
	_m = d._m;
	_y = d._y;
	return *this;
}

int CDate::yearDay() const
{
	const int array[13]={0,0,31,59,90,120,151,181,212,243,273,304,334};
	int leap=(_y%4 == 0 && _y%100 != 0 || _y%400 == 0) && (_m > 2);
	return array[_m] + leap + _d;
}

int CDate::daysInYear(unsigned int y) const
{
	if(y%4 == 0 && y%100 != 0 || y%400 == 0)
	  return 366;
	return 365;
}

void CDate::setDate(int dayNum, int year)
{
	 int  array[2][13] = {{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
						  { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } };
	 int   *arrayPtr;
	 if(daysInYear(year) == 365)
	   arrayPtr = array[0];
	 else
	   arrayPtr = array[1];
	 int i;
	 for(i = 1;i <= 12;i++)
		if(dayNum <= arrayPtr[i])
			break;
	_d = dayNum - arrayPtr[i-1];
	_m = i;
	_y = year;
}

void CDate::daysToDate(const int days)
{
	const double daysInYear = 365.2425;
	_y = days/daysInYear;
	_m = _d = 1;
	int nDays_1_1_year = daysInDate();
	int d = int(days - nDays_1_1_year + 1);
	if(d <= 0)
	  setDate(this->daysInYear(_y-1) - d,_y - 1);
	else
	  if(d > this->daysInYear(_y))
		setDate(d - this->daysInYear(_y),_y+1);
	setDate(d,_y);
}

unsigned long CDate::daysInDate() const
{
  return _y*365l + (_y-1)/4 - (_y-1)/100 + (_y-1)/400 + yearDay();
}

CDate& CDate::operator+(int days)
{
   int _days = daysInDate();
   _days += days;
   daysToDate(_days);
   return *this;
}

const int CDate::operator-(const CDate& r) const
{
    return daysInDate() - r.daysInDate();
}

void CDate::printDate(const char* format) const
{
    printf(format,(int)_d,(int)_m,(int)_y);
}

int main()
{
  CDate dt(25,07,2013);
  dt = dt + 10;
  dt.printDate("%d.%d.%d\n");
  CDate dt_2(1,1,2014);
  printf("%d",dt_2 - dt);
  return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 25.07.2013, 12:36   #7
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

А чтобы ТС не совсем уж копипастил, то вот предложение для улучшения: использовать не unsigned int для года, a signed int.
Т.е. можно было бы вводить как 1999г. от РХ, так и 1999г. до н.э.
Smogg вне форума Ответить с цитированием
Старый 26.07.2013, 19:53   #8
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
А чтобы ТС не совсем уж копипастил, то вот предложение для улучшения: использовать не unsigned int для года, a signed int.
Т.е. можно было бы вводить как 1999г. от РХ, так и 1999г. до н.э.
cope paste я не буду потому что сам хочу разобратся как оно работает и нету смысла ходить на учебу если делать Ctrl+c а потом Ctrl+v.
mixon-21 вне форума Ответить с цитированием
Старый 27.07.2013, 11:20   #9
Ghost of Night
Форумчанин
 
Аватар для Ghost of Night
 
Регистрация: 08.08.2010
Сообщений: 371
По умолчанию

Цитата:
Сообщение от mixon-21 Посмотреть сообщение
cope paste я не буду потому что сам хочу разобратся как оно работает и нету смысла ходить на учебу если делать Ctrl+c а потом Ctrl+v.
ну так вам ещё в 3 посте подсказали что нужно делать) Про перегрузку можете в гугл заглянуть...
Хакинг - не преступление, а способ выживания.
Ghost of Night вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенный класс в шаблон. Указатель на вложенный класс в возвращаемом значении метода шаблона. Что делать? Asya1994 Помощь студентам 3 09.12.2012 01:43
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42