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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 23:53   #1
нона
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 14
По умолчанию структура и класс

помогите доработать
условия
должно быть :метод инициализации Init,ввод с клавиатуры Read, вывод на экран Display,преобразование в строку toString
должны быть реализованы 3 способами:
-тип данных представляется структурой с необходимыми полями, а операции реализуются как внешние функции,которые получают объекты данного типа в качестве аргументов
-как класс с закрытыми полями, где опреции реализуются как методы класса
-инкапсулировать поля класса в независимой структуре и в ней реализовать методы Init (),Read (),Display (),toString ();
в основном классе должно быть одно поле данных, представленное объектом-стуктурой.
Задача :
Создать класс Date для работы с датой в формате "год.месяц.день". Дата представляется структурой с тремя полями типа unsigned int: для года, месяца и дня.
Класс должен включать не менее трех функций инициализации: числами, строкой вида "год.месяц.день"(например "2004.08.31) и датой.
Обязательными операциями являются: вычисление даты через заданное кол-во дней, вычитание заданного кол-ва дней из даты,
определение високосного года, присвоение и получение отдельных частей(год, месяц, день), сравнение дат(равно, до, после), вычисление кол-ва дней между датами. Вот что набросала:
нона вне форума Ответить с цитированием
Старый 30.03.2012, 00:08   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
помогите доработать
Цитата:
Вот что набросала:
эммм.... где?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.03.2012, 07:42   #3
нона
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 14
По умолчанию

Код:
#include <stdio.h>

#include <iostream.h>

#include <string.h>

#include <conio.h>

#include <time.h>

 

 

class Date{

private:

        bool leapyear;

        int day;

        int month;

        int year;

        bool leap(int)const;

        int maxday()const;

public:

        Date(int d,int m,int y):leapyear(leap(y)),day(d),month(m),year(y){};

        Date& operator+=(int);

        Date& operator-=(int);

        std::string operator-(Date&)const;

        bool operator==(Date&)const;

        friend std::ostream& operator<<(std::ostream&, const Date&);

};

bool Date::leap(int y)const{ 

        return ((y % 4 == 0 && y% 100 != 0) || y % 400);

}

int Date::maxday()const{

        int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

        if(leapyear)days[1]=29;

        return days[month-1];

}

Date& Date::operator+=(int d){

        if(day+d>maxday()){

                d-=maxday()-day;

                if(++month>12){

                        month=1;

                        year++;

                }

                while(d/maxday()){

                        if(++month>12){

                                month=1;

                                year++;

                        }

                        d-=maxday();

                }

                day=d;

        }

        else day+=d;

        return *this;

}

Date& Date::operator-=(int d){

        if(day-d<1){

                d-=day;

                if(--month==0){

                        month=12;

                        year--;

                }

                while(d/maxday()){

                        d-=maxday();

                        if(--month==0){

                                month=12;

                                year--;

                        }

                }

                day=maxday()-d;

        }

        else day-=d;

        return *this;

}

#include <sstream> //stringstream               

std::string Date::operator-(Date &dt)const{

        int d,m,y;

        if(year>=dt.year){

                y=year-dt.year;

                if(month>dt.month){

                        m=month-dt.month;

                        d=day+dt.maxday()-dt.day;

                        if(d>dt.maxday())d-=dt.maxday();

                        else --m;

                        --y;

                }

                else {

                        m=12-month+dt.month;

                        d=dt.day+maxday()-day;

                        if(d>maxday())d-=maxday();

                        else --m;

                }

        }

        else {

                y=dt.year-year;

                if(month>dt.month){

                        m=12-month+dt.month;

                        d=day+dt.maxday()-dt.day;

                        if(d>dt.maxday())d-=dt.maxday();

                        else --m;

                        --y;

                }

                else {

                        m=dt.month-month;

                        d=maxday()-day+dt.day;

                        if(d>maxday())d-=maxday();

                        else --m;

                }

        }

        std::string s;

        std::stringstream ss;

        ss<<d<<" days "<<m<<" month "<<y<<" years";

        getline(ss,s);

        return s;

}

bool Date::operator==(Date& dt)const{

        return day==dt.day && month==dt.month && year==dt.year;

}

std::ostream& operator<<(std::ostream &os, const Date &dt){

        std::string m[]={"January","February","March","April","May","June","July","August","September","October","November","December"};

        os<<dt.day<<" "<<m[dt.month-1]<<" "<<dt.year;

        return os;

}

 

int main(){

        int d,m,y,reduce,increase;

        std::cout<<"Enter first date (day month year): ";

        std::cin>>d>>m>>y;

        Date date(d,m,y);

        std::cout<<"Date = "<<date<<std::endl;

        std::cout<<"reduce  date by : ";//уменьшить дату на столько то дней

        std::cin>>reduce;

        date-=reduce;

        std::cout<<"Date = "<<date<<std::endl;

        std::cout<<"Increase date by : ";//увеличить дату

        std::cin>>increase;

        date+=increase;

        std::cout<<"Date = "<<date<<std::endl;

        std::cout<<"Enter second date (day month year): ";

        std::cin>>d>>m>>y;

        Date date2(d,m,y);

        std::cout<<"Date2 = "<<date2<<std::endl;

        std::cout<<"Dates are "<<(date==date2 ? "equal":"not equal")<<std::endl;

        std::cout<<"Date1 - Date2 = "<<date-date2<<std::endl;

    getch ();

        return 0;

}
нона вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
структура на си(си++) Ислам Помощь студентам 10 29.06.2011 19:54
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Структура roknroll1 Помощь студентам 2 25.01.2010 18:45
Структура Telec Помощь студентам 2 20.01.2010 12:46