Решение задач с использованием указателей
Лабораторная работа 6. Решение задач с использованием указателей
Цель работы: изучить функции с переменным числом параметров и приемов построения программ, используя указатели, научиться решать задачи с использованием функций с переменным числом параметров в языке С++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе данные различных типов (в соответствии с условиями задач), выполняет их обработку в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является допустимый диапазон значений используемых числовых типов в языке С++.
Теоретические сведения.
Выполните приведенные ниже задания.
- Напишите функцию, параметрами которой служат адреса трех переменных типа double. Функция должна возвращать адрес (значение указателя) той из переменных, адресуемых параметрами, которая имеет максимальное значение. В основной программе с помощью обращения к функции поменяйте знак значения максимальной из трех переменных. Для решения данной задачи используйте вспомогательную функцию, возвращающую адрес максимальной из переменных, адресуемых двумя параметрами-указателями.
- Напишите функцию для вычисления значения многочлена Pn(x)=anxn+an-1xn-1+...+a1x1+a0. Коэффициенты an,an-1,...,a0, аргумент x и коэффициенты передавайте в функцию с помощью списка параметров изменяемой длины. В основной программе вычислите и напечатайте значения нескольких полиномов. Для вычисления полиномов используйте схему Горнера:
Pn(x)=(...(anx+an-1)x+an-2)x+...+a1)x+a0.
- Напишите функцию, которая упорядочивает значение трех переменных, адреса которых передаются ей в качестве параметров. В основной программе продемонстрируйте применение написанной функции. Для решения данной задачи определите и используйте вспомогательную функцию, которая упорядочивает значения только двух переменных, адресуемых ее двумя аргументами.
- Напишите функцию с переменным числом параметров в соответствии с заданием, продемонстрировать вызов функции с различным числом параметров. Выполните вычисления для трех и десяти чисел. Решите задачу двумя способами: через передачу количества параметров как параметр функции и через использование признака конца списка параметров. В задаче требуется найти среднее гармоническое элементов числового ряда.
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами использования указателей на объекты и указателей на функции в языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя указатели на объекты и указатели на функции, а также функции в качестве параметров функций. Этапы решения задач сопроводить комментариями в коде.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- С какой целью в программах используют указатели на указатели?
- Что будет являться результатом однократной операции разыменования указателя, реализующего многочисленное перенаправление?
- Для чего в программе необходима инициализация указателя перед первым его использованием?
- С какой целью в прототипах функций с переменным числом параметров должны быть указаны обязательные параметры?
- Как в функции с переменным числом параметров осуществляется доступ к списку неизвестных параметров?
- Почему для доступа к списку неизвестных параметров достаточно знать адрес хотя бы одного обязательного параметра?
- Почему ошибки, связанные с некорректным использованием указателей, относятся к наиболее трудноустранимым?