Опубликован: 02.02.2011 | Доступ: свободный | Студентов: 3318 / 936 | Оценка: 4.43 / 3.57 | Длительность: 33:06:00
Специальности: Программист
Лекция 6:

Тип указатель: указатели на функции

< Лекция 5 || Лекция 6: 123 || Лекция 7 >

Лабораторная работа 5. Тип указатель: указатели на функции.

Цель работы: изучить указатели на функции и методы передачи функций как параметров, научиться использовать указатели на функции в программных кодах на языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе данные в соответствии с форматами, обозначенными условиями задач. Программа выполняет обработку входных данных в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является допустимый диапазон значений используемых числовых типов в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 5.

Задания к лабораторной работе.

  1. Методом половинного деления решите уравнения на отрезке [a, b] с данной точностью е: \cos x=x^2,\quad 0,6\sqrt[3]{x}=\log_5 x. При решении считать, что на данном отрезке существует единственный корень. Решите первое уравнение на отрезке [0, 1], а второе на отрезке [100, 150].
  2. Решите задачу, используя один указатель на функцию. Разработайте четыре функции над двумя целыми параметрами, соответствующие арифметическим операциям (+, -, *, /). В основной программе задавайте два целых параметра и символьный знак операции до тех пор, пока не будет введен пробел в качестве знака операции. В выходных данных выводите значения функций.
  3. Вычислите суммы с данной точностью е. Используйте указатели на функции как параметры: \sum_{n=1}^{\infty}\frac{\sin n}{n} и \sum_{n=1}^{\infty}\frac{n}{e^n}.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученными методами работы с указателями на функции в языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя указатели на функции и функции в качестве параметров функций. Этапы решения задач сопроводить комментариями в коде.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. Почему запрещены арифметические операции над указателями на функции?
  2. Почему в описании указателя на функцию необходимы круглые скобки при имени указателя?
  3. Может ли функция возвращать значение типа указатель? Если да, то как объявляется прототип такой функции?
  4. Могут ли параметрами функции быть указатели на объекты? Если да, то как происходит передача фактических параметров при вызове функции?
  5. Могут ли параметрами функции быть указатели на функции? Если да, то как происходит передача фактических параметров при вызове функции?
  6. Как понимается следующее объявление:
    float *(*func)(int(*pf)(char),float);?
  7. В чем отличие результатов вызова функции через указатель с последующим разыменованием указателя и без разыменования указателя?
< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!