Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

структура и класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить сумму элементов матрицы в каждом четном столбце http://www.cyberforum.ru/cpp-beginners/thread534260.html
не получается никак сделал вот так ... for (int i=0;i<m;i++) { for (int j=2;j<n;j++) { if (abs(pmas)>1)
C++ Проблемы с cin::getline в Eclipse-CDT Я использую CDT Internal Builder и MS Visual C++ Toolchain в моем проекте Eclipse. Проблема в том, что компилятор ругается: Invalid arguments ' Candidates are:... http://www.cyberforum.ru/cpp-beginners/thread534258.html
Лабораторная работа по С C++
Здравствуйте уважаемые программисты. Очень нужна Ваша помощь. На завтра нужно сделать лабораторные по С. А я в нем совсем ничего не понимаю так как была только одна вступительная лекция. Помогите...
C++ В одномерном массиве, состоящем из n вещественных элементов, вычислить
1) количество элементов массива, больших С; 2) произведение элементов массива, расположенных после максимального по модулю элемента. Преобразовать массив таким образом, чтобы сначала...
C++ Как извлечь производную из функции в C? http://www.cyberforum.ru/cpp-beginners/thread534243.html
Столкнулся с такой проблемой, как взятие производной в Методе Ньютона. Не могли бы сказать и подробно расписать формулу как её извлечь? Заранее спасибо
C++ Привязать cout к созданной консоли Проблема вот в чём - создаю Win32 Project в VS, вместо main() используется WinMain(). Создаю консоль через AllocConsole(), но при этом cout остаётся связан не пойми с чем, те в консоль вывод не... подробнее

Показать сообщение отдельно
нона
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 14

структура и класс - C++

29.03.2012, 23:50. Просмотров 511. Ответов 0
Метки (Все метки)

помогите доработать
вот само задание
условия:
должно быть :метод инициализации Init,ввод с клавиатуры Read, вывод на экран Display,преобразование в строку toString
должны быть реализованы 3 способами:
-тип данных представляется структурой с необходимыми полями, а операции реализуются как внешние функции,которые получают объекты данного типа в качестве аргументов
-как класс с закрытыми полями, где опреции реализуются как методы класса
-инкапсулировать поля класса в независимой структуре и в ней реализовать методы Init (),Read (),Display (),toString ();
в основном классе должно быть одно поле данных, представленное объектом-стуктурой.
Задача :
Создать класс Date для работы с датой в формате "год.месяц.день". Дата представляется структурой с тремя полями типа unsigned int: для года, месяца и дня.
Класс должен включать не менее трех функций инициализации: числами, строкой вида "год.месяц.день"(например "2004.08.31) и датой.
Обязательными операциями являются: вычисление даты через заданное кол-во дней, вычитание заданного кол-ва дней из даты,
определение високосного года, присвоение и получение отдельных частей(год, месяц, день), сравнение дат(равно, до, после), вычисление кол-ва дней между датами. Вот что набросала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru