
- •Экзаменационный вопрос №1 базовые понятия алгоритмизации
- •Экзаменационный вопрос №2 средства изображения алгоритмов
- •Экзаменационный вопрос № 3 базовые канонические структуры алгоритмов
- •Экзаменационный вопрос № 16. Общая характеристика языка программирования паскаль
- •Экзаменационный вопрос № 17. Программирование ввода-вывода данных различного типа
- •Экзаменационный вопрос № 18. Программирование линейных вычислительных процессов
- •Экзаменационный вопрос № 19. Программирование разветвляющихся вычислительных процессов с использованием if -then –else
- •Экзаменационный вопрос № 20. Программирование разветвляющихся вычислительных процессов с использованием оператора case
- •Экзаменационный вопрос № 21.
- •Экзаменационный вопрос № 22. Программа вычисления корней квадратного уравнения
- •Экзаменационный вопрос № 23. Программирование разветвляющихся структур с использованием в цикле операторов repeat – until
- •Экзаменационный вопрос № 24. Программа вычисления суммы бесконечного ряда
- •Экзаменационный вопрос № 25. Программирование циклических вычислительных структур
- •Экзаменационный вопрос № 26. Программирование с использованием цикла с параметрами
- •Экзаменационный вопрос № 27. Программирование циклов с постусловием
- •Экзаменационный вопрос № 28. Программирование с использованием подпрограмм
- •Экзаменационный вопрос № 29. Алгоритмы нахождения корней уравнений
- •Экзаменационный вопрос № 30. Алгоритмы численного интегрирования
- •Экзаменационный вопрос № 31. Программа вычисления определенного интеграла методом прямоугольников
- •Экзаменационный вопрос № 32. Программа вычисления определенного интеграла методом трапеций
- •Экзаменационный вопрос № 33. Программа вычисления определенного интеграла методом симпсона
- •Экзаменационный вопрос № 34. Программа вычисления корней алгебраического уравнения методом половинного деления
- •Экзаменационный вопрос № 35. Программа вычисления корней алгебраического уравнения методом ньютона
- •Экзаменационный вопрос № 36. Программа вычисления корней алгебраического уравнения методом хорд
- •Экзаменационный вопрос № 37. Программирование операций в одномерных массивах
- •Экзаменационный вопрос № 38. Программирование операций в двумерных массивах (На примере задания 1)
- •Экзаменационный вопрос № 39. Программирование операций в двумерных массивах (На примере задания 2)
- •Экзаменационный вопрос № 40. Построение графических изображений
- •Экзаменационный вопрос № 41. Программа для построения объекта с циклическим изменением цвета
- •Экзаменационный вопрос № 42. Программа для построения динамического объекта
Экзаменационный вопрос № 34. Программа вычисления корней алгебраического уравнения методом половинного деления
Задание. Используя подпрограмму-процедуру, составить программу для определения корней уравнения методом половинного деления.
Исходные данные.
№
|
Уравнение f(x) = 0 |
Метод |
Интерв [а; b] |
Точн. вычисл. |
Ответ |
Число итер-й |
1 |
F = x – – 1,1sin x = 0,245 |
Половинного деления |
[–5; 5] |
10–3 |
1,307 |
14 |
Код программы.
Program primer1;
uses crt;
Var x: real; iter: integer; {x - значение вычисляемого корня}{iter - кол-во итераций}
Const
eps =0.001; {точность вычислений}
a:=–5.0 ; {a — левая граница отрезка }
b:=5.0; {b — правая граница отрезка}
Function Y(x:real) : real;
begin
Y:= x–1.1*sin(x)–0.245; {вычисление функции в точке}
end;
Procedure Metod_PolDel ( a, b : real; eps: real);
var с:real;
begin
repeat
c:=(a+b)/2; {Нахождение значения середины отрезка [a;b]}
if Y(a)*Y(c)<0 then
{Условный оператор, проверка на различие знаков функции на границе отрезка}
{Y(a) — вычисление искомой функции на левой границе отрезка}
{Y(b) — вычисление искомой функции на правой границе отрезка}
b:=c {Измен-е значен. правого конца, если Y(a) и Y(c) оказались разных знаков}
else {Если условие на отличие знаков функции на границе отрезка не выполн.}
a:=c; {Изменение значения левого конца, если Y(a) и Y(c) оказались с одинак. знаками}
iter:=iter+1; {Происходит увеличение числа итераций}
until b–a<=eps;
{b-a<=eps — проверка точности достижения результата}
{Если b–a оказалось <=eps, то цикл завершает свое выполнение}
{Если b–a оказалось >eps, то цикл проводит еще одну итерацию}
x:=(b+a)/2; {Получение корня функции}
end;
begin
clrscr; {clrscr — метод из модуля CRT, осуществляющий очистку экрана}
writeln(‘a=’,a:2:1);
writeln(‘b=’,b:2:1);
Metod_PolDel(a,b,eps); {вызов процедуры, вычисляющей корень уравнения}
writeln('Ответ: x=',x:5:3);
writeln(‘Кол-во итераций: i=’,iter);
write(‘Нажмите ENTER’); {Вывод сообщения на экран}
readln(); end;
Экзаменационный вопрос № 35. Программа вычисления корней алгебраического уравнения методом ньютона
Задание. Используя подпрограмму-процедуру, составить программу для определения корней уравнения методом Ньютона.
№
|
Уравнение f(x) = 0 |
Метод |
Интерв [а; b] |
Точн. вычисл. |
Ответ |
Число итер-й |
1 |
F = ctg x – x/8 = 0 |
Ньютона |
[1; 5] |
10–5 |
1,397 82 |
4 |
Код программы.
Program primer2;
uses crt;
Var x: real; iter: integer; {x - значение вычисляемого корня}{iter - кол-во итераций}
Const
eps =0.001; {точность вычислений}
a:=–5.0 ; {a — левая граница отрезка }
b:=5.0; {b — правая граница отрезка}
Function Y(x:real) : real;
begin
Y:= x–1.1*sin(x)–0.245; {вычисление функции в точке}
end;
Procedure Metod_PolDel ( a, b : real; eps: real);
begin
Y:= cos(x)/sin(x)–x/8;
{Вычисление значения искомой функции в заданной точке x}
end;
function Y1(x:real):real;
begin
Y1:=–1/(sin(x)*sin(x))–1/8;
{Вычисление значения первой производной искомой функции в заданной
точке x}
end;
function Y2(x:real):real;
begin
Y2:=2*cos(x)/(sin(x)*sin(x)*sin(x));
{Вычисление значения второй производной искомой функции в заданной
точке x}
end;
Procedure Metod_New ( a, b : real; eps: real);
var x0,x1 :real;
{x0 — первое приближенное значение корня функции}
{x1 — второе приближенное значение корня функции}
begin
if Y(a)*Y2(a)>0 then
{Условный оператор, проверка на отличие знаков функции и ее второй
производной}
{Y(a) — вычисление искомой функции на левой границе отрезка}
{Y2(b) — вычисление второй производной функции на левой границе отрезка}
x1:=a {Выбор начального приближения корня функции от левого конца
отрезка}
else {Если условие на отличие знаков функции и ее второй
производной не выполняется}
x1:=b; {Выбор начального приближения корня функции от правого конца отрезка}
repeat
x0:=x1;
{Изменение начального приближения корня искомой функции}
x1:=x0–Y(x0)/Y1(x0);
{Вычисление следующего приближенного решения корня функции}
iter:=iter+1; {Происходит увеличение числа итераций}
until abs(x0–x1)<=eps;
{abs(x0–x1)<=eps — проверка точности достижения результата}
{Если abs(x0–x1) оказалось <=eps, то цикл завершает свое выполнение}
{Если abs(x0–x1) оказалось >eps, то цикл проводит еще одну итерацию}
x:=x1; {Получение корня функции}
end;
begin
clrscr; {clrscr — метод из модуля CRT, осуществляющий очистку экрана}
writeln(‘a=’,a:2:1);
writeln(‘b=’,b:2:1);
Metod_New(a,b,eps);
{вызов процедуры, вычисляющей корень уравнения}
writeln('Ответ: x=',x:5:3);
writeln(‘Кол-во итераций: i=’,iter);
write(‘Нажмите ENTER’); {Вывод сообщения на экран}
readln();
end;