Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ПРОГР.doc
Скачиваний:
8
Добавлен:
12.11.2019
Размер:
1.67 Mб
Скачать
  1. Методические указания

7.1 Вычисление корня уравнения каждым из указанных выше методов оформить в виде функции, в которой вычислить количество итераций (повторений цикла).

7.3 Для выбора метода вычисления корня уравнения использовать меню, разработанное с применением массива указателей на функции.

7.4 За начальное приближение x0 принять найденное значение конца отрезка b, на котором заданная функция f (x) меняет знак. Алгоритм определения этого значения приведен в методических указанияx

Варианты заданий

1) Найти корень уравнения

ex – 2x – 10 = 0

с точностью = 10-4 при заданном значении начала отрезка а = 0.

2) Найти корень уравнения

0.1exsin2x + 0.5 = 0

с точностью e = 10-4 при заданном значении начала отрезка а = 5.

3) Найти корень уравнения

с точностью e = 10-4 при заданном значении начала отрезка а = -2.

4) Найти корень уравнения

e0.724x+0.3 – 2.831 = 0

с точностью e = 10-4 при заданном значении начала отрезка а = 0.

5) Найти корень уравнения

x + 0.5sin x + 1 =0

с точностью e = 10-4 при заданном значении начала отрезка а = -1.

6) Найти корень уравнения

xcos x = 0

с точностью e = 10-5 при заданном значении начала отрезка а = 0.

7) Найти корень уравнения

1.4xx = 0

с точностью e = 10-5 при заданном значении начала отрезка а = 0.

8) Найти корень уравнения

0.5xln |x| = 0

с точностью e = 10-5 при заданном значении начала отрезка а = -1.

9) Найти корень уравнения

x3 + sin x – 3.5x + 1 = 0

с точностью e = 10-5 при заданном значении начала отрезка а = 0.

10) Найти корень уравнения

с точностью e = 10-5 при заданном значении начала отрезка а = 0.

11) Найти корень уравнения

(4 + x2)(exe-x) = 18

с точностью e = 10-5 при заданном значении начала отрезка а = 1.

12) Найти корень уравнения

3x2cos 2x = 1

с точностью e = 10-5 при заданном значении начала отрезка а = 0.

13) Найти корень уравнения

с точностью e = 10-4 при заданном значении начала отрезка а = 0.

14) Найти корень уравнения

с точностью e = 10-5 при заданном значении начала отрезка а = 0.

15) Найти корень уравнения

с точностью e = 10-4 при заданном значении начала отрезка а = 1.

Лабораторная работа № 15

Тема: «Передача функций в качестве параметра функций»

  1. Цель работы

    1. Получение навыков в написании программ с использованием указателей на функции.

    2. Научиться составлять программу вычисления определенного интеграла методам средних прямоугольников и методом трапеций.

  2. Техническое обеспечение

    1. Персональная ЭВМ .

    2. Клавиатура.

    3. Дисплей.

    4. Печатающее устройство.

  3. Программное обеспечение

    1. Операционная система Windows

    2. Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

  4. Постановка задачи

Вычислить выражение, указанное в конкретном варианте, используя для вычисления интеграла один из указанных в п. 1.2 методов (по указанию преподавателя). Значение интеграла считать с погрешностью .

  1. Содержание отчета

5.1. Тема и цель работы.

5.2. Схема алгоритма решения задачи.

5.3. Текст программы.

5.4. Результаты выполнения программы.

  1. Общие сведения

    1. . Указатели на функции

Чтобы понять, как работают указатели на функции, необходимо понять, как компилируются и вызываются функции в языке С. По мере компиляции функций исходный код преобразуется в объектный и устанавливается точка(адрес) входа. При вызове функции происходит обращение к данной точке входа. Поэтому указатель на функцию может использоваться для вызова функции.

Адрес функции получается при использовании имени функции без каких-либо скобок или аргументов. (Очень похоже на массивы, где адрес получается с использованием имени массива без индексов.) Рассмотрим следующую программу, предназначенную для демонстрации особенностей объявления.

# include <stdio.h>

# include <string.h>

void check (char a, char b, int (*cmp) (const char *, const char *));

int main (void)

{

char s1[80], s2[80];

int (*p) (const char*, const char*); /* объявление указателя на функцию */

p = strcmp; /* получение адреса функции strcmp */

gets(s1);

gets(s2);

check(s1, s2, p);

return 0;

}

void check (char a, char b, int (*cmp) (const char *, const char *))

{

printf(“Сравнение строк.\n”);

if (! (*cmp) (a,b)) printf(“Равны”);

else printf(“Не равны”);

}

Когда вызывается функция check (), ей передаются два указателя на символы и один указатель на функцию. В функции check () аргументы объявляются как указатели на символы и указатель на функцию. Следует обратить внимание на способ объявления указателя на функцию. Следует использовать аналогичный метод при объявлении других указателей на функцию, за исключением тех случаев, когда отличается возвращаемый тип или передаваемые параметры. Скобки вокруг *cmp необходимы для правильной интерпретации компилятором данного выражения.

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

Рассмотрим работу функции strcmp () и функции check (). Оператор

if (! (*cmp) (a,b)) printf(“Равны”);

осуществляет вызов функции, в данном случае strcmp (), с помощью cmp, который указывает на данную функцию. Вызов происходит с аргументами a и b. Данный оператор демонстрирует общий ввод использования указателя на функцию для вызова функции, на которую он указывает. Круглые скобки вокруг *cmp необходимы вследствие наличия приоритетов.

На самом деле можно напрямую использовать cmp, как показано ниже:

if (! cmp (a,b)) printf(“Равны”);

Данная версия также вызывает функцию, на которую указывает cmp, но она использует нормальный синтаксис. Использование (*cmp) помогает всем, читающим программу, понять, что указатель на функцию используется для вызова функции вместо функции вместо вызова функции cmp.

Возможно вызвать напрямую функцию check (), используя strcmp, как показано ниже:

check (s1, s2, strcmp);

Данный оператор устраняет необходимость наличия дополнительной переменной-указателя.

Можно задаться вопросом, почему кто-то хочет написать программу таким способом. В данном примере ничего не достигается, но появляются большие проблемы. Тем не менее иногда бывают моменты, когда выгодно передавать функцию в процедуры или хранить массивы функций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]