![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Разработать класс MyDate (дата-время)Содержание книги
Поиск на нашем сайте
Данные хранятся в виде:
Дополнительно в классе должны быть реализованы следующие функциию #pragma once #include "io.h" class MyDate { int day,month,year; static int daytab[2][13]; static char* MonthName[13]; static char* DayNames[8]; public:
int get_day() {return day;} int get_month() {return month;} int get_year() {return year;} int get_day()const {return day;} int get_month()const {return month;} int get_year()const {return year;}
int validate(); void set_day (int d){int tmp= day; day=d; if(!validate()) day=tmp;} void set_month (int m){int tmp=month; month=m; if(!validate()) month=tmp;} void set_year (int y){int tmp=year; year=q; if(!validate()) year=tmp;}
char* get_ DayOfWeek(); MyDate get_Now(); MyDate Parser(char*); void AddDays (long); //аргумент может быть отрицательным числом void AddMonths (int); //аргумент может быть отрицательным числом void AddYears (int); //аргумент может быть отрицательным числом
static int dayofyear(int y,int m,int d); static void day_month(int d,int y,int *m,int* dd); static int vis(int y) { return ((!(y%4))&&(y%100)||(!(y%400))); }
char* ToPchar(); String* ToString(); unsigned long ToLong();
public: MyDate(void); ~MyDate(void); MyDate(int d,int m,int y); MyDate (char* s); MyDate (const MyDate&); void assign (const MyDate& t); void dispose (); MyDate* copy();
int equal(const MyDate& t); int cmp(const MyDate& t);
int input(File fp); int input(); int output(File f); int output(); int input(TextBox * t1, TextBox * t2, TextBox * t3);
};
#include "stdafx.h" #include " MyDate.h" using namespace System; using namespace System::Windows::Forms;
int MyDate::daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; char* MyDate::MonthName[13]={"Wrong month","January","February","March","April","May","June","July","August","September","October","November","December"}; char* MyDate::DayNames[8]={"Wrong day","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; void MyDate::AddDays(long d) { if(d>0) { while(d--) { day++; if(day>daytab[vis(year)][month]) { day=1; month++; if(month==13) { month=1; year++; } } } } else { while(d++) { day--; if(!day) { month--; if(!month) { month=12; year--; if(!year) { year=1; month=1; day=1; return; } } day=daytab[vis(year)][month]; } } } } void MyDate::AddMonth(long m) { if(m>0) while(m--) { month++; if(month==13) { month=1; year++; } } else while(m++) { month--; if(!month) { month=12; year--; if(!year) {year=1;month=1;return;} } } int k; if (day>(k=daytab[vis(year)][month])) day=k; } void MyDate::AddYear(long y)
{ year+=y; if (year<=0) { year=1; month=1; day=1; } int k; if (day>(k=daytab[vis(year)][month])) day=k; }
long ToLong(); { unsigned long d,m,y; d=day;y=1;m=1; while(y<year) { d+=365+vis(y); y++; } while(m<month) { d+=daytab[vis(year)][m]; m++; } return d; } char* MyDate::get_DayOfWeek() { long dd=(get_AllDays())%7+1; char*s=new char[strlen(DayNames[dd])+1]; strcpy(s,DayNames[dd]); return s; } int MyDate::dayofyear(int y,int m,int d) { int dd=d; while(--m) { dd+=daytab[vis(y)][m]; } return dd; } void MyDate::day_month(int d,int y,int *m,int* dd) { *m=1; while(d>daytab[vis(y)][*m]) { d-=daytab[vis(y)][(*m)++]; } *dd=d; return; } MyDate::MyDate(void) {day=month=year=0; }
MyDate::~MyDate(void) { } MyDate::MyDate(int d,int m,int y) { day=d; month=m; year=y; if(!validate()) ExeptionInvalidValue("MyDate");
} int MyDate::validate() { return (year>0&&month>0&&month<=12&&day>0&&day<=daytab[vis(year)][month]); } MyDate::MyDate (char* s){} MyDate::MyDate (const MyDate& d) {day=d.day; month=d.month; year=d.year;} void MyDate::assign (const MyDate& d) {day=d.day; month=d.month; year=d.year;} void MyDate::dispose (){} MyDate* MyDate::copy() {return new MyDate();} char* MyDate::ToPchar() {char s[256],buf[256],*s1; s[0]='\0'; itoa(day,buf,10); strcat(s,buf); strcat(s,"."); itoa(month,buf,10); strcat(s,buf); strcat(s,"."); itoa(year,buf,10); strcat(s,buf); s1=new char[strlen(s)+1]; strcpy(s1,s); return s1;} String* MyDate::ToString() {return new String(ToPchar());}
int MyDate::equal(const MyDate& d) {return day==d.day && month==d.month && year==d.year;}
int MyDate::cmp(const MyDate& d) {if(year!=d.year)return year-d.year; else if(month!=d.month)return month-d.month; else return day-d.day; }
int MyDate::input(File fp) {int state=1; state&=::input(fp,&day); if(eof(fp)) return 0; state&=::input(fp,&month); if(eof(fp)) return 0; state&=::input(fp,&year); if(eof(fp)) return 0; return state;} int MyDate::input() {int state=1; ::output("day"); state&=::input(&day); if(eof()) return 0; ::output("month"); state&=::input(&month); if(eof()) return 0; ::output("year"); state&=::input(&year); if(eof()) return 0; return state;} int MyDate::output(File f) {return fprintf(f,"%d\t%d\t%d\n", day,month,year); } int MyDate::output() {return output(stdin);} int MyDate::input(TextBox * t1, TextBox * t2, TextBox * t3) {int state=1; state&=::input(t1,&day); state&=::input(t2,&month); state&=::input(t3,&year); return state;}
2. Разработать класс Price ( стоимость ) Класс должен содержать функции ввода и вывода данных, в которых присутствует символ денежной единицы, а так же функции сравнения. Для иностранной валюты ввести коэффициенты перевода в рубли. Данные хранятся в виде:
3. Дополнить класс MyString (строка) Вариант 1. (оптимальное использование памяти)
Память под строку выделяется ровно столько, сколько необходимо для хранения символов. Любая операция, приводящая к увеличению или уменьшению числа символов, сопровождается выделением нового участка памяти и освобождением старого
В классе должны быть определены функции class MyString {char* s; int len; public: //… int find(MyString * item); MyString* substring(int pos,int count); MyString* erase(int pos,int count); MyString* insert(int pos, MyString * item); MyString* remove(MyString * item); MyString* replace(MyString *Old, MyString *New);
MyString ** split(int& count) Разбивает строку на массив слов MyString ** split(MyString* splits, int& count); Разбивает строку на массив подстрок, используя строку символов - разделителей static MyString * concate(MyString* s1, MyString* s2); Соединяет(сцепляет) две строки static MyString * concate(MyString* mas[], int count); Соединяет(сцепляет) массив строк static MyString * join(MyString* mas[], int count, char split); Соединяет(сцепляет) массив строк, вставляя между ними символ разделитель };
Вариант 2. (оптимальная эффективность операций)
Память под строку выделяется больше необходимого размера. Выделением нового участка памяти при реализации операций над строками производится только в случае ее исчерпания. Для этого используется функция void resize(int newsize); В классе должны быть определены функции #define MAX_SIZE 256 class MyString {char* s; char* cur; int size; public: //… MyString() {cur=s=new char [size =MAX_SIZE]; *s=’\0’; } void resize(int newsize);
MyString & mystring::operator= (const MyString & a){ if(this!=&a) { if(size< a.length()) {delete[] s; s=new char[a. size]; } strcpy(s,a.s); size =a. size; cur=s+ a.length(); } return *this;}
int find(int first,int last,const MyString & item); MyString substring(int pos,int count); int erase(int pos,int count); int insert(int pos, const MyString & item); int remove(int first,int last,const MyString & item); int replace(int first,int last,const MyString &Old,const MyString &New);
MyString * split(int& count) Разбивает строку на массив слов MyString * split(const MyString& splits, int& count); Разбивает строку на массив подстрок, используя строку символов - разделителей static MyString concate(const MyString& s1, const MyString& s2); Соединяет(сцепляет) две строки static MyString concate(MyString mas[], int count); Соединяет(сцепляет) массив строк static MyString join(MyString mas[],int count,char split); Соединяет(сцепляет) массив строк, вставляя между ними символ разделитель };
|
||||||
Последнее изменение этой страницы: 2016-07-11; просмотров: 539; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.190.121 (0.007 с.) |