ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 4) онлайн

Упражнения

Решения к упражнениям, помеченным знаком *, можно найти в приложении Ж.                 *1.         Номер телефона, например (212) 767—8900, можно условно разделить на                                три части: код города (212), номер телефонной станции (767) и номер                                абонента (8900). Напишите программу с использованием структуры, поз-                                воляющую раздельно хранить эти три части телефонного номера. Назо-                                вите структуру phone. Создайте две структурные переменные типа phone.                                Инициализацию одной из них произведите сами, а значения для другой                                запросите с клавиатуры. Затем выведите содержимое обеих переменных                                на экран. Результат работы программы должен выглядеть приблизитель-                                но так:

Введите код города, номер станции и номер абонента:

415 555 1212

Мой номер (212) 767-8900

Ваш номер (415) 555-1212

*2.                         Расположение точки на плоскости можно задать с помощью двух коорди-                 нат: x и y. Например, если точка имеет координаты (4, 5), то это значит, что                 она отстоит на 4 единицы справа от вертикальной оси и на 5 единиц вверх

от горизонтальной оси. Сумма двух точек определяется как точка, име- ющая координаты, равные сумме соответствующих координат слагаемых.

Напишите программу, использующую для интерпретации точки на плоско- сти структуру с названием point. Определите три переменные типа point, и две из них инициализируйте с помощью значений, вводимых с клавиа- туры. Затем присвойте третьей переменной значение суммы первых двух переменных и выведите результат на экран. Результат работы программы может выглядеть следующим образом:

Введите координаты точки p1: 3 4 Введите координаты точки p2: 5 7 Координаты точки p1+p2 равны 8.11

*3. Создайте структуру с именем Volume, содержащую три поля типа Distance из примера englstrc, для хранения трех измерений помещения. Определи- те переменную типа Volume, инициализируйте ее, вычислите объем, зани- маемый помещением, и выведите результат на экран. Для подсчета объема переведите каждое из значений типа Distance в значение типа float, равное соответствующей длине в футах и хранимое в отдельной переменной. За- тем для вычисления объема следует перемножить три полученные веще- ственные переменные.

4. Создайте структуру с именем employee, содержащую два поля: номер со- трудника типа int и величину его пособия в долларах типа float. Запроси- те с клавиатуры данные о трех сотрудниках, сохраните их в трех струк- турных переменных типа employee и выведите информацию о каждом из сотрудников на экран.

5. Создайте структуру типа date, содержащую три поля типа int: месяц, день и год. Попросите пользователя ввести день, месяц и год в формате 31/12/2002, сохраните введенное значение в структурной переменной, а за- тем извлеките данные из этой переменной и выведите их на экран в том же формате, в каком они вводились.

6. Как мы говорили, стандартные средства ввода/вывода C++ вместо значе- ний перечисляемых типов данных выводят их внутреннее представление в виде целых чисел. Для того чтобы преодолеть это ограничение, вы мо- жете использовать конструкцию switch, с помощью которой устанавлива- ется соответствие между значением переменной перечисляемого типа и ее внутренним представлением. Пусть, например, в программе определен пе- речисляемый тип данных etype, отражающий должность сотрудника:

                enum etype { laborer, secretary, manager, accountant, executive, researcher };

Напишите программу, которая сначала по первой букве должности, введен- ной пользователем, определяет соответствующее значение переменной, по- мещает это значение в переменную типа etype, а затем выводит полностью название должности, первую букву которой ввел пользователь. Взаимодей- ствие программы с пользователем может выглядеть следующим образом:

                Введите первую букву должности                 (laborer, secretary, manager, accountant,

                executive, researcher); a

                полное название должности: accountant

Возможно, вам понадобится два ветвления switch: одно — для ввода значе- ния, другое — для вывода.

7. Добавьте поля типа enum etype (см. упражнение 6) и struct date (см. упраж- нение 5) в структуру employee из упражнения 4. Организуйте программу таким образом, чтобы пользователь вводил 4 пункта данных о каждом из трех сотрудников: его номер, величину зарплаты, его должность и дату принятия на работу. Программа должна хранить введенные значения в трех переменных типа employee и выводить их содержимое на экран.

8. Вернитесь к упражнению 9 главы 2 «Основы программирования на C++». В этом упражнении требуется написать программу, которая хранит значе- ния двух дробей в виде числителя и знаменателя, а затем складывает эти дроби согласно арифметическому правилу. Измените эту программу так, чтобы значения дробей хранились в структуре fraction, состоящей из двух полей типа int, предназначенных для хранения числителя и знаменателя. Все значения дробей должны храниться в переменных типа fraction.

9. Создайте структуру с именем time. Три ее поля, имеющие тип int, будут называться hours, minutes и seconds. Напишите программу, которая просит пользователя ввести время в формате часы, минуты, секунды. Можно запрашивать на ввод как три значения сразу, так и выводить для каж- дой величины отдельное приглашение. Программа должна хранить время в структурной переменной типа time и выводить количество секунд в вве- денном времени, определяемое следующим образом:

                long totalseсs = t1.hours*3600 + t1.minutes*60 + t1.seconds

10. Создайте структуру с именем sterling, хранящую денежные суммы в старой английской системе, описанной в упражнениях 8 и 11 главы 3 «Циклы и ветвления». Поля структуры могут быть названы pounds, shillings и pence и иметь тип int. Программа должна запрашивать у пользователя значение денежной суммы в новых десятичных фунтах (значение должно хранить- ся в переменной типа double), затем переводить эту сумму в старую систе- му, сохранять переведенное значение в переменной типа sterling и выво- дить на экран полученную сумму в фунтах, шиллингах и пенсах.

11. Используя структуру time из упражнения 9, напишите программу, кото- рая получает от пользователя два значения времени в формате 12:59:59, сохраняет их в переменных типа struct time, затем переводит оба значения в секунды, складывает их, переводит сумму в исходный формат, сохраня- ет его в переменной типа time и выводит полученный результат на экран в формате 12:59:59.

12. Переработайте программу-калькулятор для дробей, описанную в упраж- нении 12 главы 3 так, чтобы каждая из дробей хранилась как значение пе- ременной типа struct fraction, по аналогии с упражнением 8 этой главы.

 

 

21