Ю.С. Корухова - Сборник задач и упражнений по языку С++
Описание файла
PDF-файл из архива "Ю.С. Корухова - Сборник задач и упражнений по языку С++", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
1. Абстрактные типы данных (АТД). Классы.Конструкторы, деструкторы, конструктор копирования, параметры со значениями по умолчанию, работа сдинамической памятью (new и delete). Ссылки, передача параметров по ссылке. Класс как областьвидимости. Дружественные функции. Конструкторы со списком инициализации.
Статические члены класса.1. Пусть имеется описание класса комплексных чиселclass complex{double re, im;};Написать конструкторы, позволяющие создавать объект класса complexа) по двум заданным параметрамб) по заданному значению re (при этом считать im=0)в) без параметровМожно ли написать один конструктор, удовлетворяющий всем условиям а) – в)?2. Привести описание класса "обыкновенная дробь", члены-данные класса – числитель изнаменатель.
При создании объектов этого класса возможно задание значений числителя изнаменателя или только числителя (знаменатель в этом случае считается равным 1). Присоздании дроби должно проводиться сокращение, то есть дроби ½ и 6/12 должны статьодинаковыми. Нужно ли для создания копий объектов такого класса явно определятьконструктор копирования?3. Описать конструктор, деструктор и конструктор копирования для класса my_vectorclass my_vector{int len; // количество элементов в вектореint *v; //указатель на массив элементов вектора};Дополнить описание класса функцией, вычисляющей длину вектора. Описать функции,вычисляющие скалярное произведение векторов, произведение вектора на константу,сумму векторов, предполагая, что оба вектора имеют одинаковую размерность.Написать функцию-член класса next(), которая увеличивает на 1 все координатывектора.
Функция должна возвращать в качестве результата измененный вектор. Чтопроизойдет с координатами вектора v после вычисления выражения v.next().next()?4. Описать реализацию АТД. Если для него требуются вспомогательные АТД, привестиих описание полностью.1) Электрический счетчик.При создании объекта указывается диапазон значений, которые может отображатьсчетчик (при возникновении значения на 1 больше заданного максимального счетчик«сбрасывается» на 0), единицы измерения.
Для счетчика должны быть определеныоперации увеличения значения на N и печать текущего значения.2) Стек для хранения целых чисел (int).В классе должны быть функции добавления элемента на вершину стека (push), чтениеверхнего элемента стека (pop) , проверка стека на пустоту (empty), проверка, что стекполон (full). Максимальный допустимый размер стека указывается при созданииобъекта.3) Очередь для хранения вещественных чисел (double).В классе должны быть функции добавления элемента в конец очереди (put), чтениепервого элемента из очереди (get) , проверка очереди на пустоту (empty), проверка, чтоочередь целиком заполнена (full).
Максимальный допустимый размер очередиуказывается при создании каждого объекта.4) Почтовый адрес.Для объектов класса должны быть предусмотрены функции изменения индекса,города, улицы, номера дома, корпуса, квартиры, вывод адреса на экран.5) Дерево поиска.Деревом поиска (деревом сравнений) называется двоичное дерево, которое либопустое, либо состоит из одной вершины, либо для каждой из его вершин в левомподдереве содержатся только вершины с меньшими элементами, а в правом поддереве– только с большими элементами. Для объектов класса должны быть предусмотреныоперации добавления, удаления и поиска элемента.
В вершинах дерева хранятся числатипа int.6) Банковский счет.Необходимые члены-данные: дата создания счета, сумма денег, которая на немхранится, владелец счета (объект класса person, у которого есть фамилия и имя),информация о последних 10 операциях, проведенных со счетом.Операция,проводимая со счетом – объект, содержащий дату операции, вид операции(добавить/снять деньги) и сумму операции.У класса банковский счет должны быть методы: пополнить счет, снять деньги (еслиуказана недопустимая сумма – должно печататься сообщение об ошибке, сумма насчете при этом не меняется), распечатать информацию о последних 10 операциях,распечатать доступную сумму денег на счете.7) Зоопарк.Необходимые члены-данные: количество зверей, массив, содержащий информацию озверях (имя, номер клетки, название любимой еды), часы работы зоопарка адресзоопарка, фамилия сторожа.
В классе нужно определить методы, позволяющие«накормить» зверя (изменить значение соответствующего поля), поменять сторожазоопарка (записать другую фамилию сторожа в соответствующее поле).5. Есть ли ошибки в приведенном ниже фрагменте программы. Если да – исправить их,не изменяя функций f, main и не определяя новых функций. Перечислить всеконструкторы и деструкторы, которые будут вызваны при работе программы.class cat{double weight;char name[100];public:explicit cat(const char* n, double w=12.0): weight(w){strcpy(name,n);}cat(double w): weight (w) {strcpy(name,"cat");}};int f(const cat c1, const cat c2, const cat& c3,const cat & c4){return c1.weight+c2.weight+c3.weight+c4.weight;}int main(){f("Murzik", 22.0, "Kuzya",10.2);return 0;}6. Из указанных классов перечислить те, объекты которых можно создавать безпараметров (используя конструктор умолчания).class Journal{int pages;char* editor;int number;public: Journal(int p, char* ed,int num):pages(p),number(num){editor=new char[strlen(ed)+1];strcpy(editor,ed);}~Journal(){delete[] editor;}};class Book{int pages;char* name;int year;Book(int p=10){pages=p;name=new char [1];*name='\0';year=2007;}~Book(){delete[] name;}};class Page{int num;int format;};class CopyBook{enum size {A0,A1,A2,A3,A4,A5};int pages;size sz;char name[20];public:CopyBook(const CopyBook& c){sz=c.sz;strcpy(name,c.name);pages=c.pages;}};7.
Дано описание класса Dateclass Date{int day, month, year;static Date today;public:static int count;// В поле count подсчитывается количество созданных дат.};Написать для этого класса конструкторы (один или несколько) и деструктор.Предполагается создавать объект-дату по заданным значениям дня, дня и месяца или дня,месяца и года (недостающие значения берутся из даты today), корректность заданияпараметров в конструкторе проверять не требуется. Конструкторы и деструктор должныучитывать появление и удаление объекта в поле count. Привести пример функции main,в которой продемонстрированы разные способы создания объектов-дат. Какое числобудет получено в результате работы функции f()?int f(){Date d1(1,1,2009), d2(28,2),d3, d4=d1;return d1.count + Date::count;}8. Есть ли ошибки в приведенной ниже программе на Си++? Если есть – объясните, в чемони заключаются.
Если нет - прокомментировать работу программы.class Flower{int num;int height;char* name;public:Flower(int n=10, int h, char* nm = "Rose"): num(n),height(h){name=nm;}void ~Flower(){delete[] name;}};class Garden{Flower& f;public:void add_flower(Flower& f1){f=f1;}};int main(){Garden g;Flower f;return 0;}9.
Для автоматизированной системы регистрации на курсы кройки и шитья описатьклассы Course и Student. Класс Course описывает один конкретный курс. В немдолжно быть предусмотрено хранение информации об общем количестве слушателейэтого курса, максимальное допустимом количестве слушателей для этого курса. Услушателя курсов (Student) должны быть определены фамилия, имя, номер паспорта,информация о курсе, на котором он учится.
Предусмотреть функции добавленияслушателя и исключения его с курсов. Один и тот же слушатель не может учиться нанескольких курсах. Написать функцию, не являющуюся членом указанных классов,которая для двух параметров Student проверяет, учатся ли они на одном курсе.10. Привести примеры различных ситуаций, в которых будет вызываться конструкторкопирования. Привести пример описания класса, копирование объектов которогонедопустимо.11.
Привести пример класса, имеющего конструктор умолчания. Привести примеры двухразличных ситуаций, в которых работает функция-конструктор (но не конструкторкопирования)? Сформулируйте условия, при которых конструктор копирования поумолчанию в классе не создается.12. Дать определение деструктора. Привести примеры двух различных ситуаций, вкоторых вызывается деструктор.13. Есть ли ошибки в следующем фрагменте программы? Если да – объяснить, в чем онизаключаются, и исправить их. Для каждого вызова функции внутри main, используяоперацию :: , указать, функция из какой области видимости будет вызвана.class my_str{size_t len;char * str;public:my_str(const char* s): len(strlen(s)){s = new char[len+1];strcpy(str,s);}~my_str(){ delete[] str; }void strcpy(const my_str& t){if (len==t.len) strcpy(str,t.str);else {delete[] str;str=new char[t.len+1];strcpy(str,t.str);}len=t.len;}};int main(){my_str a("aaa"), b("bb");const my_str c("ccc");b.strcpy(c);strcpy(b,a);b.strcpy(b);c.strcpy(a);strcpy(a.str,b.str);return 0;}14.
Дополнить программу, не изменяя текст функции main, чтобы функция main работалав соответствии со своим описанием, приведенным в комментариях. В описании классов неиспользовать открытые нестатические члены - данные.а) int main(){Ball gb("green",20),//мяч цвета "green", диаметр - 20wb(12),//мяч цвета "white", диаметр - 12b(10);//мяч цвета "white", диаметр - 10cout<<"The smallest:"<<smallest(gb,wb,b)<<" end "<<endl;//должен быть напечатан диаметр самого маленького из мячейreturn 0;}//В результате работы программы должно быть напечатано:The smallest: 10 endwhitewhitegreenб) int main(){tiger T1,T2("Kuzya");T1.setname("Murzik").setcolor("light").setweight(200);//задаем параметры тиграT1.print(); //печать информации о тиграхT2.print();T2.setname("Tigr");if (less(T2,T1)) T2.print();//печать информации о том тигре, который по размеру меньшеelse T1.print();//печатаем количество объектов-тигровcout<<tiger::count<<endl;return 0;}2.
Перегрузка функций и операторовПерегрузка функций, алгоритм выбора перегруженной функции. Перегрузка операций с помощью функцийчленов класса, с помощью функций-друзей класса.1. Пусть класс Door описан следующим образом:class Door{int height;int width;};Привести примеры операций, которыеа) могут быть перегружены только с помощью функции-члена класса;б) могут быть перегружены только с помощью функции, не являющейся членом класса;с) могут быть перегружены как функцией - членом класса, так и функцией, неявляющейся членом класса.d) не могут быть перегружены.Написать соответствующие прототипы перегруженных операций для класса Door.2.