Решение задач. Вычисление суммы ряда
а)
Вычислить значение
функции, заданной с помощью ряда Тейлора, для некоторого х с точностью e. Проверить правильность алгоритма, вычислив значение
функции по формуле.
б)
Вычислить и вывести на
экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на
интервале от хнач до хкон с шагом dx с
точностью e. Таблицу снабдить заголовком и шапкой. Каждая
строка таблицы должна содержать значение аргумента, значение функции,
вычисленной по формуле и количество просуммированных членов ряда.
Листинг программы:
а)
Program 1_1a; // название программы
var x,e,t,s: real; //объявление переменных
n: integer; //объявление
переменных
begin // Начало программы
repeat // повторяй вывод запроса на экран и ввод
значения с клавиатуры, пока не выполнится условие until
write ('-1<x<=1 x='); // Вывод запроса на экран
readln(x); // Ввод значения с
клавиатуры
until (x>-1) and (x<=1); // цикл
прекратился
e:=0.0001;
// Присваиваем е значение 0.0001
n:=1; //
Присваиваем n значение 1
t:=x; // Присваиваем
t значение x
s:=t; // Присваиваем
s значение t
while abs(t)/n >e do // Как только abs(t)/n
станет меньше e, цикл прекратится
begin //Открываем
операторные скобки
n:=n+1; // Увеличиваем
n на 1 шаг
t:=-t*x; // Вычисляем t
s:=s+t/n;
// Вычисляем s
end; //
Закрываем операторные скобки
writeln('s=',s:0:4);
// Вывод ответа
write('ln(',x:0:2,'+1)=',ln(x+1):0:4)
// Вывод
запроса на экран
end. //Конец программы
б)
Program
1_1b; // название
программы
const
e=0.0001; //объявление
констант
function
f(x:real;var n:integer):real; //объявление функции
var t,s:real; //объявление переменных
begin // Начало программы
n:=1; //
Присваиваем n значение 1
t:=x; // Присваиваем
t значение x
s:=t; // Присваиваем s
значение t
while abs(t)/n >e do // Как
только abs(t)/n станет меньше e,
цикл прекратится
begin //Открываем операторные скобки
n:=n+1; // Увеличиваем
n на 1 шаг
t:=-t*x; // Вычисляем t
s:=s+t/n;
// Вычисляем s
end; // Закрываем операторные скобки
f:=s; // Присваиваем f
значение s
end; // Закрываем операторные скобки
var xn,xk,x,s,dx:real; //объявление переменных
n:integer; //объявление
переменных
begin // Начало программы
repeat // повторяй вывод запроса на экран и ввод значения с клавиатуры, пока
не выполнится условие until
write('Введите
начало интервала (-1..1) xn='); // Вывод запроса на экран
readln(xn); // Ввод значения с
клавиатуры
until abs(xn)<1;
// цикл прекратился
repeat // повторяй вывод запроса на экран и ввод значения с клавиатуры, пока
не выполнится условие until
write('Введите
конец интервала, больше ',xn:0:1,' <=1 xk='); // Вывод
запроса на экран
readln(xk); // Ввод
значения с клавиатуры
until (xk>xn)and(xk<=1);
// цикл прекратился
repeat // повторяй вывод запроса на экран и ввод значения с клавиатуры, пока
не выполнится условие until
write('Введите
шаг табуляции, меньше ',xk-xn:0:1,' dx='); // Вывод запроса на экран
readln(dx); // Ввод
значения с клавиатуры
until dx<xk-xn; // цикл
прекратился
x:=xn; // Присваиваем
x значение xn
writeln('
Табулирование функции F(x)=ln((1+x)'); // Вывод запроса на экран с переходом
на новою строку
writeln('представленной
разложением в степенной ряд'); // Вывод запроса на экран с переходом на
новою строку
writeln('
на интервале ',xn:0:1,'..',xk:0:1,' с шагом ',dx:0:1);
// Вывод запроса на экран с переходом на новою строку
writeln;
// Вывод запроса на экран с переходом на новою строку
writeln('
-------------------------'); // Вывод запроса на экран с переходом на новою
строку
writeln('
| X | S | n | '); // Вывод запроса на экран с
переходом на новою строку
writeln('
-------------------------'); // Вывод запроса на экран с переходом на новою строку
while x<=xk+dx/2 do // Выполнять
подпрограмму до тех пор, пока условие не станет ложным
begin //Открываем операторные скобки
s:=f(x,n); // Вычисляем
s
writeln('
|',x:6:2,' |',s:8:4,' |',n:5,'|'); // Вывод запроса на экран с переходом
на новою строку
x:=x+dx; // Увеличиваем
x на dx
end; // Закрываем
операторные скобки
writeln('
-------------------------'); // Вывод запроса на экран с переходом на новою
строку
//проверка последнего члена по аналитической формуле
writeln('x-dx=',x-dx:0:2);
// Вывод запроса на экран с переходом на новою строку
writeln('ln((1+x))=',ln(1+x-dx):0:4);
// Вывод запроса на экран с переходом на новою строку
end. //Конец программы
Результат работы программы:
а)
б)
2) Найти количество нулей в десятичной записи целого
неотрицательного числа n (без использования строк).
Листинг программы:
Program 1_2; // Название программы
var n, k: integer; //Объявление переменных
begin // Начало программы
read(n); // Считывание n
if n=0 then k:=1 // Если n=0,
то выполняется присвоение к k единицы
else // Иначе выполняется оператор
begin//Открываем
операторные скобки
k:=0; //
Присваиваем k значение 0
while n>0 do // Как
только n станет меньше или равно 0, цикл прекратится
begin //Открываем операторные скобки
if n mod 10=0
then
inc(k); // Если n делится на 10
без остатка, то k увеличивается на 1
n:=n div 10; //
Находим частное от деления
end;
// Закрываем операторные скобки
end; // Закрываем операторные скобки
write('Количество 0= ',k); // Вывод
запроса на экран
end. //Конец программы
Результат работы программы:
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.