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

Упражнения

Решения к упражнениям, помеченным знаком *, можно найти в приложении Ж.

*1. Вернитесь к рассмотрению примера CIRCAREA главы 2 «Основы програм- мирования на C++». Напишите функцию с именем circarea(), которая ана- логичным образом вычисляет площадь круга. Функция должна принимать один аргумент типа float и возвращать значение типа float. Напишите функ- цию main(), которая просит пользователя ввести значение радиуса, вызы- вает функцию circarea(), а затем отображает результат вычисления на экране.

*2. Возведение числа n в степень р — это умножение числа n на себя р раз. Напишите функцию с именем power(), которая в качестве аргументов при- нимает значение типа double для n и значение типа int для р и возвращает значение типа double. Для аргумента, соответствующего степени числа, за- дайте значение по умолчанию, равное 2, чтобы при отсутствии показателя степени при вызове функции число n возводилось в квадрат. Напишите функцию main(), которая запрашивает у пользователя ввод аргументов для функции power(), и отобразите на экране результаты ее работы.

*3. Напишите функцию с именем zeroSmaller(), в которую передаются с по- мощью ссылок два аргумента типа int, присваивающую меньшему из ар- гументов нулевое значение. Напишите программу для проверки работы функции.

*4. Напишите функцию, принимающую в качестве аргументов два значения типа Distance и возвращающую значение наибольшего из аргументов (не- обходимую информацию можно найти в примере RETSTRC).

 5. Напишите функцию с именем hms_to_secs(), имеющую три аргумента типа int: часы, минуты и секунды. Функция должна возвращать эквивалент пе- реданного ей временного значения в секундах (типа long). Создайте про- грамму, которая будет циклически запрашивать у пользователя ввод значе- ния часов, минут и секунд и выводить результат работы функции на экран.

6. Модифицируйте программу, описанную в упражнении 11 главы 4 «Струк- туры», складывающую два структурных значения типа time. Теперь про- грамма должна включать в себя две функции. Первая, time_to_secs(), при- нимает в качестве аргумента значение типа time и возвращает эквивалентное значение в секундах типа long. Вторая, secs_to_time(), в качестве аргумента принимает число секунд, имеющее тип long, а возвращает эквивалентное значение типа time.

7. Взяв в качестве основы функцию power() из упражнения 2, работающую только со значением типа double, создайте перегруженные функции с этим же именем, принимающими в качестве аргумента значения типа char, int, long и float. Напишите программу, вызывающую функцию power() со все- ми возможными типами аргументов.

8. Напишите функцию с именем swap(), обменивающую значениями два сво- их аргумента типа int (обратите внимание, что изменяться должны значе- ния переменных из вызывающей программы, а не локальных переменных функции). Выберите способ передачи аргументов. Напишите вызывающую программу main(), использующую данную функцию.

9. Переработайте программу из упражнения 8 так, чтобы функция swap() принимала в качестве аргументов значения типа time (см. упражнение 6).

10. Напишите функцию, которая при каждом вызове будет выводить на эк- ран количество раз, которое она вызывалась ранее. Напишите программу, которая будет вызывать данную функцию не менее 10 раз. Попробуйте реализовать данную функцию двумя различными способами: с использо- ванием глобальной переменной и статической локальной переменной для хранения числа вызовов функции. Какой из способов предпочтительней? Почему для решения задачи нельзя использовать обычную локальную пе- ременную?

11. Напишите программу, использующую структуру sterling, которая описана в упражнении 10 главы 4. Программа должна получать от пользователя значения двух денежных сумм, выраженных в фунтах, шиллингах и пен- сах, складывать эти значения и выводить результат на экран в том же формате. Необходимо разработать три функции. Первая из них должна получать от пользователя число фунтов, шиллингов и пенсов и возвра- щать соответствующее значение типа sterling. Вторая функция должна при- нимать в качестве аргументов два значения типа sterling, складывать их и возвращать значение, также имеющее тип sterling. Третья функция долж- на принимать аргумент типа sterling и выводить его значение на экран.

12. Модифицируйте калькулятор, созданный в упражнении 12 главы 4, так, чтобы каждая арифметическая операция выполнялась с помощью функ- ции. Функции могут называться fadd(), fsub(), fmul() и fdiv(). Каждая из функций должна принимать два структурных аргумента типа fraction и воз- вращать значение того же типа.

 

 

39