Вычислить значение выражения - Free Pascal (291)
Формулировка задачи:
Проверьте код пожалуйста, а то сам допереть не могу, в коде нет сравнения и "1-" в начале формулы (это сам допилю). Части программы проверял все работает (факториал и возведение в степень), а так выводит 0. Думаю ошибка простая просто я немного дебил и догадаться не могу.
Сравнить полученное значение с e-x
uses crt; var factorial:longint; p,s,s1,x,h,e:real; b,u:byte; begin clrscr; readln(x); while abs(e)>1000 do begin h:=h+1; b:=b+1; factorial:=1; for u:=2 to b do begin factorial:=factorial*u; end; e:=exp(ln(x)*h); s:=(e/factorial); p:=s+s1; s1:=s; end; writeln(p:3:3); readln; end.
Решение задачи: «Вычислить значение выражения»
textual
Листинг программы
uses crt;
var p,x,h,e:real;
n:integer;
begin
clrscr;
repeat
write('Введите |х|<1000 x=');
readln(x);
until abs(x)<1000;
repeat
write('Введите точность вычислений 0<e<1 e=');
readln(e);
until (e>0)and(e<1);
n:=0;
h:=1;
p:=h;
while abs(h)>e do
begin
n:=n+1;
h:=-h*x/n;
p:=p+h;
end;
writeln('Сумма ряда=',p:0:6);
write('e^-x=',exp(-x):0:6);
readln;
end.
Объяснение кода листинга программы
- Используемая библиотека: В коде используется библиотека CRT (Console I/O), которая позволяет выполнять операции ввода-вывода с консолью.
- Типы данных и переменные:
p,x,h,e: объявлены какreal, представляют числа с плавающей точкой.n: объявлен какinteger, представляет целое число.
- Цель программы: Программа предназначена для вычисления суммы ряда Тейлора для экспоненциальной функции.
- Циклы:
- Внешний цикл
repeat-untilиспользуется для ввода значения переменнойx. Цикл продолжается до тех пор, пока значениеxне удовлетворяет условию|x|<1000. - Внутренний цикл
repeat-untilиспользуется для ввода значения переменнойe. Цикл продолжается до тех пор, пока значениеeне удовлетворяет условию0<e<1.
- Внешний цикл
- Вычисления:
- Переменная
nинициализируется значением 0. - Переменная
hинициализируется значением 1. - Переменная
pинициализируется значениемh. - В цикле
whileпроисходит итеративное вычисление значенияhс помощью формулыh = -h*x/n. Значениеpобновляется с помощью формулыp = p + h. Цикл продолжается, пока абсолютное значениеhбольше заданной точностиe. - Значение
pвыводится с помощью функцииwriteln, при этом выводится только 6 знаков после запятой с помощью спецификатора формата:0:6. - Значение
e^-xвычисляется с помощью функцииexp, а затем выводится с помощью функцииwriteln.
- Переменная
- Обработка ошибок: В коде не предусмотрена обработка ошибок, связанных с вводом некорректных значений
xилиe.