Объектно-ориентированое програмирование на С++
Міністерство освіти і науки України Запорізький національний університет Кафедра інформаційних технологій Індивідуальна робота З теми: «С++. Класи і об'єкти» Виконав: студ. 2 курсу матем. ф-ту гр. 8226-1 Лапін С.М. Перевірив: Борю С.Ю. Запоріжжя 2007 Цель: Разработка простейших классов на примере разработки моделей элементарных объектов и динамических информационных структур (одно и двунаправленных списков). 1 часть работы "разработка простых классов" Постановка задачи Разработать класс, набор методов (конструктор и минимум два метода) для программной модели заданного объекта. Описание объекта и его основных свойств приводится ниже. Разработать вызывающую программу (main), использующей объекты разработанного класса и тестирующие работоспособность всех методов. Варианты заданий 14. Объект «прямоугольник заданный длинами двух сторон». Предусмотреть возможность операции присваивания, определения площади и периметра, а так же логический метод, отвечающий на вопрос - является ли прямоугольник квадратом. Конструктор должен позволить создавать объекты без и с начальной инициализацией. Програма: #ifndef rectangle__h #define rectangle__h #include <math.h> class rectangle { private: double a, b; public: rectangle(); rectangle(double, double); ~rectangle(); rectangle & operator=(const rectangle & x); double square(void); double perimeter(void); double diagonal(void); int is_square(void); void print_rectangle(void); }; #endif #ifndef conrectangle__h #define conrectangle__h #include <iostream.h> #include "rectangle.h" rectangle::rectangle() { cout<<"The constructor \"rectangle()\" worked.\n"; a=1.0; b=1.0; }; rectangle::rectangle(double x, double y) { cout<<"The constructor \"rectangle(double, double)\" worked.\n"; a=x; b=y; }; rectangle::~rectangle() { cout<<"The destructor \"~rectangle()\" worked.\n"; a=0.0; b=0.0; }; rectangle & rectangle::operator=(const rectangle & x) { if(this==&x) return *this; this->a=x.a; this->b=x.b; return *this; }; double rectangle::square(void) { return a*b; }; double rectangle::perimeter() { return 2*a+2*b; }; double rectangle::diagonal() { return sqrt(a*a+b*b); }; int rectangle::is_square() { if(a==b) return 1; return 0; }; void rectangle::print_rectangle() { char msg1[]=" ", msg2[]=" not "; cout<<"a="<<a<<" b="<<b; cout<<"\nS= "<<square()<<" m^2 P="<<perimeter()<<" m d="<<diagonal()<<" m"; cout<<"\nRectangle is"; if(is_square()) cout<<msg1; else cout<<msg2; cout<<"square.\n"; return; }; #endif #include <iostream.h> #include "conrectangle.h" void main() { rectangle r1; double a,b; char s[1]; cout<<"\nESLI VAM ETA PROGA POKAZHETSA TUPOY... NE PEREZHYVAITE! ETO DEISTVITEL'NO TAK :)\n"; do { cout<<"\n Our rectangle:\n"; r1.print_rectangle(); cout<<"Input a, b:\n"; cin>>a>>b; rectangle r2(a, b); cout<<"\n Your rectangle:\n"; r2.print_rectangle(); r1=r2; cout<<"\n Your rectangle is our now:\n"; r1.print_rectangle(); cout<<"Repeat or quit?(r/q)..."; cin>>s; } while (s[0]!='q'); return; }; Результати: D:\Studies\Labs\Cpp\Individ_6>ind1 The constructor "rectangle()" worked. ESLI VAM ETA PROGA POKAZHETSA TUPOY... NE PEREZHYVAITE! ETO DEISTVITEL'NO TAK :) Our rectangle: a=1 b=1 S= 1 m^2 P=4 m d=1.41421 m Rectangle is square. Input a, b: 456.125 789.5452485 The constructor "rectangle(double, double)" worked. Your rectangle: a=456.125 b=789.545 S= 360131 m^2 P=2491.34 m d=911.829 m Rectangle is not square. Your rectangle is our now: a=456.125 b=789.545 S= 360131 m^2 P=2491.34 m d=911.829 m Rectangle is not square. Repeat or quit?(r/q)...r The destructor "~rectangle()" worked. Our rectangle: a=456.125 b=789.545 S= 360131 m^2 P=2491.34 m d=911.829 m Rectangle is not square. Input a, b: 0.4876 0.4876 The constructor "rectangle(double, double)" worked. Your rectangle: a=0.4876 b=0.4876 S= 0.237754 m^2 P=1.9504 m d=0.689571 m Rectangle is square. Your rectangle is our now: a=0.4876 b=0.4876 S= 0.237754 m^2 P=1.9504 m d=0.689571 m Rectangle is square. Repeat or quit?(r/q)...r The destructor "~rectangle()" worked. Our rectangle: a=0.4876 b=0.4876 S= 0.237754 m^2 P=1.9504 m d=0.689571 m Rectangle is square. Input a, b: 16.23 31.06 The constructor "rectangle(double, double)" worked. Your rectangle: a=16.23 b=31.06 S= 504.104 m^2 P=94.58 m d=35.0448 m Rectangle is not square. Your rectangle is our now: a=16.23 b=31.06 S= 504.104 m^2 P=94.58 m d=35.0448 m Rectangle is not square. Repeat or quit?(r/q)...q The destructor "~rectangle()" worked. The destructor "~rectangle()" worked. D:\Studies\Labs\Cpp\Individ_6> 2 часть работы «Информационные динамические структуры» Постановка задачи Написать программу, в которой создаются динамические структуры, и выполнить их обработку в соответствии со своим вариантом. Для каждого вариант разработать следующие методы: 1. Конструктор пустого списка. 2. Добавление элемента в список (в соответствии со своим вариантом). 3. Удаление элемента из списка (в соответствии со своим вариантом). 4. Печать списка. 5. Запись списка в файл. 6. Восстановление списка из файла. 7. Деструктор списка (уничтожение). Порядок выполнения работы 1. Разработать описание класса, выделить публичные и приватные поля данных. Разработать интерфейс класса - прототипы методов. 2. Написать функцию для создания списка. Функция может создавать пустой список, а затем добавлять в него элементы. 3. Написать функцию для печати списка. Функция должна предусматривать вывод сообщения, если список пустой. 4. Написать функции для удаления и добавления элементов списка в соответствии со своим вариантом. 5. Выполнить изменения в списке и печать списка после каждого изменения. 6. Написать функцию для записи списка в файл. 7. Написать функцию для уничтожения списка. 8. Записать список в файл, уничтожить его и выполнить печать (при печати должно быть выдано сообщение "Список пустой"). 9. Написать функцию для восстановления списка из файла. 10. Восстановить список и распечатать его. 11. Уничтожить список. Варианты заданий 14. Записи в линейном списке содержат поле данных звена типа *char(строка символов). Сформировать двунаправленный список. Удалить из него К элементов с указанными номерами. Добавить К элементов с указанными номерами. Програма: #ifndef list_h #define list_h class list { private: struct element { char* info; element* up; element* down; }; element *first, *last, *current; public: list(); //constructor ~list(); //destructor void del_list(); //ochishchajet spisok void init_list(int,char*); //initsializatsia spiska fonarhym metodom void print_list(); //vyvod na ekran spiska int current_element(int); //zdelat element s nomerom "int" tekushchim, vernetsa 0; //Esli doidem do kontsa spiska,to vernetsa nomer poslednego elementa,kotoryi i budet tekushchim int next_element(); //sdelat tekushchim sledujushchiy element tekuschuego int previous_element(); //sdelat tekushchim predydushchiy element tekuschuego int num_current(); //nomer v spiske tekushchego elementa char* read_element(int &); //prochitat element s nomerom; Robe jogo tekushchim char* read_element(); //prochitat tekushchiy element void add_element(char*, int &);//dobavit element na nomer "int"; Robe novyi element tekushchim void add_after(char*); //dobavit element posle tekushchego; Robe novyi element tekushchim void add_before(char*); //dobavit element do tekushchego; Robe novyi element tekushchim void del_element(); //udalit tekushchiy element; Robe sleduushchiy element tekushchim void del_element(int &); //udalit element z nomerom "int"; Robe sleduushchiy element tekushchim int fput_list(char*); //zapisat spisok v fail s imenem char* int fget_list(char*); //vostanovit spisok iz faila s imenem char* int num_list(); //kol-vo zvenjev u spiska }; #endif #ifndef list__h #define list__h #include "list.h" #include <iostream.h> list::list() { current=last=first=NULL; }; void list::add_after(char* s) { if (current==NULL) { current=new element[1]; current->info=new char[strlen(s)+1]; strcpy(current->info,s); current->up=current->down=NULL; first=last=current; return; }; if (current==last)
Страницы: 1, 2, 3
|