Ю.С. Корухова - Сборник задач и упражнений по языку С++, страница 4
Описание файла
PDF-файл из архива "Ю.С. Корухова - Сборник задач и упражнений по языку С++", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Обработать последовательность согласно одному из правил a) – е). При вводепустой последовательности должно возникать исключение типа NullException. Типыисключений описать как классы-наследники еxception, определить для них функциюwhat(). В функции main должна быть предусмотрена обработка возникшихисключений. Информацию о типе исключения выдавать на экран.а) Если введенная последовательность символов является записью целого числа вшестнадцатеричной системе счисления – напечатать это число в десятичном виде и тотцелый тип, в котором это число можно разместить.
Если введенное число не помещаетсяни в один из встроенных целых типов – выдать исключение типа OutOfRange. Привводе строки, не удовлетворяющей условию задачи – генерировать исключение типаIllegalNumber.б) Распечатать последовательность символов, полученную из исходной удалением всехвхождений цепочки символов С++. Если цепочка С++ ни разу не встретилась в исходнойпоследовательности – сгенерировать исключение типа InvalidInput.в) Распечатать сумму всех целых десятичных чисел, которые встретились в строке.
Еслиэта сумма не помещается в тип int – сгенерировать исключение типаOverflowException. Если не встретилось ни одного числа – исключение типаNoDigits.г) Распечатать для всех символов последовательности сколько раз они в ней встретились(если символ в строке не встретился – о нем ничего не печатать). Если не встретилось ниодной строчной латинской буквы – выдать исключение типа NoLetterException.д) Все группы стоящих подряд пробелов заменить одним символом пробел. Если строкасостояла только из пробелов – выдать исключение типа OnlySpacesException.е) Удалить из каждой группы подряд идущих цифр все незначащие нули (если группасостоит только из нулей – заменить эту группу одним нулем).
Если в последовательностинет ни одной цифры - выдать исключение типа NoDigitException.10. Пусть в программе присутствуют следующие описания классов.class Base {protected:int b1,b2public:virtual void print()=0;};class Derived: public Base{int d;public:void print(){cout<<b1<<b2<<d<<endl;}};Заменить в функции main операторы приведения типов в стиле Си на подходящиеоператоры приведения типов в стиле Си++.
Приведения типов, которые могут бытьвыполнены неявно, вычеркнуть.int main(){void * vp;const char * str = “test string”;int x=5,y=10;Base * bp;Derived d, *dp;vp = str;cout<<x /(double) y << (const char*) vp <<endl;bp = (Base *) &d;dp = (Derived *) bp;return 0;}11. В приведенной ниже функции main написать преобразования типов так, чтобы всевызовы функций были корректными. Использовать преобразование const_cast (там, гдеоно не может быть выполнено неявно).void f1(const int & x){cout<< one << x <<endl;}void f2(int & x){cout<< two << x <<endl;}void f3(const int x){cout<< three << x <<endl;}void f4(int x){cout<< four << x <<endl;}void f5(const int * x){cout<< five << *x <<endl;}void f6(int * x){cout<< six << *x <<endl;}int main(){const int c = 8;int i = 45;f1(c); f2(c); f3(c); f4(c); f5(&c); f6(&c);f1(i); f2(i); f3(i); f4(i); f5(&i); f6(&i);return 0;}5.
ШаблоныСоздание шаблонов функций и шаблонов классов. Алгоритм выбора перегруженной функции с учетомшаблонных функций.1. Описать шаблонную функцию max, которая возвращает значение максимальногоэлемента для заданного массива целых чисел (int), длинных целых чисел (long), массивавещественных чисел (double) или массива строк (const char*).
При работе со строками,максимальной считать ту строку, которая имеет наибольшую длину.2. Описать шаблонную функцию copy, которая копирует значения элементов второгопараметра-массива в первый параметр-массив целых чисел (int), длинных целых чисел(long), вещественных чисел (double) или строк (char*)3. Сформулируйте алгоритм выбора перегруженной функции с учетом шаблонов.4.
Пусть описана шаблонная функцияtemplate <class T> T max (T& x, T& y) {return x > y ? x : y;}Прокомментируйте выполнение приведенного ниже фрагмента программы (считая, чтокроме шаблонной функции max других функций с таким именем нет).double x = 1.5, y = 2.8, z;int i = 5, j = 12, k;char *s1 = "mouse";char *s2 = "house", *s3;z = max(x, y);k = max <int>(i, j);z = max(x, i);z = max <double>(y, j);s3 = max(s1, s2);5.
Описать шаблонный класс Set для представления множества. Для объектов класса Setопределить операции добавления элемента в множество (add), удаление элемента (del),проверка вхождения элемента (in), пересечение (*), объединение(+) и разность (-)множеств.6. Описать шаблонный класс List для работы с однонаправленными списками. Дляобъектов класса List определить операции проверки списка на пустоту, добавленияэлемента в начало списка, в конец списка, подсчет числа вхождений элемента в список,удаление элемента из списка.
Продемонстрировать работу с шаблонным классом длясписка с целыми элементами и с элементами-строками.6. Практические заданияОписанное в условиях задач взаимодействие объектов требуется промоделировать средствами языка С++.Выполнение задач этого раздела, включающих параллельное выполнение процессов, обработку сигналовпредполагается в ОС UNIX.1. C и С++Среди начинающих программистов бытует мнение, что язык С++ является расширениемязыка С. Более строго этот тезис сформулировать можно так: ”Если программа работаетна С, то она будет работать и на С++”.
Однако, это неверно. Приведите несколькоразличных примеров программ, которые успешно компилируются и работают какпрограммы на С, но либо не компилируются, либо работают иначе, будучирассмотренными как программы на С++.2. Арифметика длинных чиселОпределить класс, реализующий арифметические операции (+, - , * , / , % ) для работы сцелыми числами произвольной длины.
Создать объекты класса и продемонстрироватьработу написанных операций.3. Предметный указательОпределить класс для работы с предметными указателями. Предметный указательстроится по заданному текстовому файлу. Словом в таком файле являетсяпоследовательность непробельных символов, разделители между словами — пробел,табуляция и символ перевода строки. Каждый компонент указателя — содержит слово иномера строк, на которых это слово встречается (количество вхождений слова в файлзаранее не известно).4. Разработка иерархии классовВыбрать предметную область, в которой можно выделить объекты как минимум трёхтипов, связанные между собой иерархическими отношениями. Используя наследование,описать классы для работы такими объектами.
Дополнительные условия:1. Базовым должен являться абстрактный класс. Среди его членов-данных долженприсутствовать указатель.2. В программе должны присутствовать операции, перегруженные как члены класса иоперации, перегруженные с помощью функций, не являющихся членами класса.3. В программе должны создаваться объекты разработанных классов, они должнывзаимодействовать, используя описанные методы и перегруженные операции.4. В описании классов должны быть описаны как минимум две виртуальные функции,работа которых также должна быть продемонстрирована в программе.5.
Игра в города1Всем известны правила игры в города: первый игрок называет произвольный город,следующий – город, название которого начинается на ту же букву, на которуюзакончилось название предыдущего города и т.д.Задан список допустимых для описанной игры городов (слова в нем не повторяются).Разработать необходимые АТД и использовать их для решения следующей задачи:определить, в каком порядке в процессе игры должны быть названы города. В игредолжны быть использованы все названия городов из списка, а если такую цепочку словпостроить не удалось, соответствующая функция должна выдавать исключение.Входные данные:В первой строке входного файла записано целое число N – количество слов в списке(1<=N<=1000), а в последующих строках – сами слова.
каждое из нихпоследовательность не более чем из 10 строчных латинских букв. Для работы с файломиспользовать библиотеку fstream.h (или fstream).Выходные данные:Названия городов в искомом порядке (если возможно несколько вариантов упорядочения– напечатать один из них, любой) или диагностическое сообщение, если при построениисписка возникло исключение.Пример входного файла:4KemerovoMinsk1оригинал задачи описан в [8]AstanaOdessaПример выходного файла:MinskKemerovoOdessaAstanaКомментарий: Одним из возможных подходов к решению является следующий: нужносоставить ориентированный граф, вершинами которого являются буквы от а до z.Каждому слову из списка сопоставим ребро, соединяющее первую и последнюю буквыслова. Одна и та же пара букв может быть соединена несколькими ребрами. Вполученном графе требуется найти Эйлеров путь, то есть путь, проходящий по каждомуребру ровно один раз.6. Великий комбинатор2В середине 70-х годов в Англии широкую популярность получила игра "Великийкомбинатор" (Mastermind), известная у нас под названием "Быки и коровы".
Правила игрыследующие. Ведущий загадывает комбинацию из 4 цифр (от 1 до 6, цифры могутповторяться), называемую кодом. Игрок пытается раскрыть код, высказывая разумныепредположения, называемые пробами. Каждая проба, как и код, представляет собойчетверку цифр. Ведущий дает ответ о количестве цифр, которые есть в коде и их позицииуказаны верно (они называются быками), и о количестве цифр, которые присутствуют вкоде, но стоят на других позициях (коровы). Игра продолжается до тех пор, пока число небудет угадано. Пример игры:загадано число 1234проба 1: 4560 ответ : быков – 0, коров – 1.проба 2: 1143 ответ : быков – 1, коров – 2.проба 3: 1234 ответ : быков – 4, коров – 0. Число угадано.Написать программу, моделирующую игру "Быки и коровы".