Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 531; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.200.78 (0.01 с.) |