Обсуждается учебная программа по программированию на С++ для студентов, обучающихся в геодезическом вузе. Нашей целью является разработка набора типовых учебных задач геодезического содержания [1–12], которые могут использоваться преподавателями и студентами, обучающимися по специальностям картографии и геодезии в качестве домашних заданий и при выполнении учебного практикума. Задача данной работы заключалась в написании программы, иллюстрирующей перегрузку функций, на примере преобразования угла, выраженного в градусной мере в радианную. Известно, что использование перегрузки функций упрощает создание кода программы, позволяя разработчику работать только с одним именем функции. Это становится возможным благодаря тому, что в процессе компиляции программы компилятор C++ принимает во внимание количество аргументов, используемых каждой функцией, и затем вызывает именно ту функцию, которая требуется.
Рассмотрим содержательную постановку задачи. Часто в геодезических расчетах встречаются угловые величины в различном представлении. Наиболее широко используются три формата, а именно, угол представлен отдельно в градусах, минутах и секундах, либо только в градусах и минутах с целой и дробной частью и наконец, только в градусах с целой и дробной частью, то есть без угловых минут и секунд. Для вычислений тригонометрических функций от угловых величин в компьютерных программах, обычно, необходимо перевести значение угла в радианную меру и использовать стандартные математические библиотечные функции. Разработанная программа преобразует угол, представленный в градусной мере в одном из трех, отмеченных выше форматов, в значение радиан. Чтобы избежать дублирования имен функции, C++ позволяет определять несколько функций с одним и тем же именем. Таким образом, перегрузка функции предоставляет компилятору (без участия человека) выбрать среди нескольких функций нужную функцию, на основе количества и типов аргументов всех одноименных функций. Очевидным преимуществом перегрузки функции является то, что она позволяет использовать одно и то же имя для нескольких функций с разными типами параметров. Чтобы использовать перегрузку функции напишем код нескольких функций, выполняющих преобразование угла из градусной меры в радианную, но отличающихся количеством параметров или их типом, с одним и тем же именем. Программа, представленная ниже, иллюстрирует перегрузку функции в задаче преобразования угла из градусной меры в радианную.
Рассмотрим код программы. Функции, которые выполняют преобразование угла из градусной меры в радианную меру, представлены в строках с 04 по 23, как видно все три функции имеют одинаковое имя ConvertingToRadian. Отличие функций состоит в том, что в качестве входных данных эти функции получают значение угла, представленного в трех разных форматах. Первая функция (строки 04–10) в качестве параметров получает три целочисленных значения, значение угла раздельно в градусах, минутах и секундах. В строке 06 угол преобразуется в градусную меру, в виде целой и дробной частей градуса, а затем в строке 07 угол преобразуется в радианную меру. При этом используется именованная константа M_PI, то есть число «пи». Чтобы не потерять дробную часть угла при операции деления в строке 06 явно указывается с помощью десятичной точки, что выполняемое деление должно быть вещественного типа. Вторая функция (строки 11–17) также преобразует значение угла в радианную меру, но в качестве параметров функция получает целочисленное значение градусов и значение минут в виде вещественного числа типа double. Затем выполняется преобразование градусов в радианы, и полученное значение возвращается из функции оператором return. Третья функция (строки 18–23) в качестве параметра получает всего лишь один параметр – значение угла, выраженного в градусах с целой и дробной частями, в виде вещественного числа типа double и преобразует это значение в радианную меру угла. В главной функции main функция ConvertingToRadian вызывается три раза (строка 26, 29 и 32), причем каждый раз с разными аргументами, в первый раз со значением угла 57,29577°, во второй раз со значением угла в виде 57°17,75 и наконец, в третий раз со значением угла в виде 57°17/45?. Нетрудно увидеть, что это один и тот же угол в 1 радиан, но представленный в разных форматах, в виде только градусов, либо в градусах и минутах или же в градусах минутах и секундах. Очевидно, что в результате этих трех вызовов функций получим один и тот же ответ, а именно: угол 57,29577° равен: 1 радиан, или угол 57°17,75 равен: 1 радиан, или угол 57°17/45 равен: 1 радиан. Это как раз и свидетельствует о том, что в процессе выполнении программы компилятором С++ была выполнена перегрузка функции ConvertingToRadian и при каждом вызове перегруженной функции автоматически подставляется требуемый код.
Выводы
Разработана учебная объектно-ориентированная программа на языке С++ для студентов, обучающихся в геодезическом вузе. В программе демонстрируется перегрузка функции в задаче преобразования значения угла, выраженного в угловой мере в трех различных форматах, в радианную угловую меру. Данная программа подчеркивает преимущества объектно-ориентированного программирования на примере преобразования градусной угловой величины в радианную угловую меру.
Библиографическая ссылка
Заблоцкий В.Р. С++ ДЛЯ СТУДЕНТОВ КАРТОГРАФОВ И ГЕОДЕЗИСТОВ: УЧЕБНАЯ ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ПРОГРАММА «ПЕРЕГРУЗКА ФУНКЦИИ» // Международный журнал экспериментального образования. – 2016. – № 10-1. – С. 20-22;URL: https://expeducation.ru/ru/article/view?id=10532 (дата обращения: 11.10.2024).