С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14

Вычисление формул и деление на "0"

09.10.2016, 19:41. Показов 1304. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для аргумента , изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций:
f1(x)=x/2+x*x/4+1/2*(1-x*x)*ln(1-x)
f2(x)=sum(K от 1 до бесконечности)((x^(k+2)/k(k+2)))

Cмысл проблемы в том, что задача решается только для 7ми значений, а дальше деление на ноль при решении функции f2(x), гляньте, где я накосячил. спс.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
program opredelenie_znacheniy_funkcii;
Uses Crt;  {podgrujaem modul}
Const      {opredeljaem konstanti}
eps1=0.01; {tochnost 1/100}
eps2=0.001;{tochnost 1/1000}
eps3=0.0001;{tochnost 1/10000}
a=-0.6;    {nachalnoe znachenie x}
b=0.05;     {tochnost}
n=7;      {kollichestvo znachenij funkcii}
Var
k1,k2,k3,i:integer; {vspomogatelnie peremennie}
f1,f2_1,f2_2,f2_3,step,slag,x:extended;
begin
Clrscr;    {ochischaem ekran}
{------------------------risuem shapku tablici---------------------}
 
 
x:=a;       {nachalnoe znacenie x}
for i:=1 to n do {vichisljaem 20 znachenij}
    begin
    {--------------vichislenie f(x1)-----------------------}
     f1:=x/2+x*x/4+0.5*(1-x*x)*ln(1-x); {f(x1)-vicislenie}
     step:=x*x; {nachalnoe znachenie stepeni}
     f2_1:=0; {nachalnoe znachenie funkcii f2(x)-0.01}
     k1:=0;   {nachalnoe znachenie k v f2(x)}
     {-------------vichislenie f(x)1----------------------}
     repeat
           inc(k1);   {uvelichivaem k}
           step:=step*x;           {uvelichivaem stepen}
           slag:=step/(k1*(k1+2)); {opredelaem ocherednoe slagaemoe}
           f2_1:=f2_1+slag;        {nahodim znachenie funkcii}
           {writeln('f2_1=',f2_1,' k1=',k1);}
     until abs(f2_1)>=eps1; {vihodim iz cikla kogda chislo menshe libo ravno tochnosti eps=0.001}
     {-------------vichislenie f(x)2----------------------}
     f2_2:=f2_1;                   {znachenie f(x)1=f(x)2}
     k2:=k1;                        {prodoljaem schitat}
     repeat
           inc(k2);
           step:=step*x;           {uvelichivaem stepen}
           slag:=step/(k2*(k2+2)); {opredelaem ocherednoe slagaemoe}
           f2_2:=f2_2+slag;        {nahodim znachenie funkcii}
           {writeln('f2_2=',f2_2,' k2=',k2);}
     until abs(f2_2)>=eps2; {vihod kogda f(x)2<=eps(0.001)}
     {-------------vichislenie f(x)3----------------------}
     f2_3:=f2_2;                   {znachenie f(x)2=f(x)1}
     k3:=k2;                       {prodoljaem schitat}
     repeat
           inc(k3);
           step:=step*x;           {uvelichivaem stepen}
           slag:=step/(k3*(k3+2));  {opredelaem ocherednoe slagaemoe}
           f2_3:=f2_3+slag;        {nahodim znachenie funkcii}
           {writeln('f2_3=',f2_3,' k3=',k3);}
     until abs(f2_3)>=eps3; {vihod kogda f(x)3<=eps(0.0001)}
     {--------------vivod rezultata----------------------}
    writeln('|',x:5:2,'|',f1:12:9,'|',f2_1:5:2,'|',k1:2,'|',f2_2:6:3,'|',k2:2,'|',f2_3:7:4,'|',k3:2,'|');
    x:=x+b; {uvelichivaem na shag}
    end;
 
ReadKey
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2016, 19:41
Ответы с готовыми решениями:

Вычисление формул
Помогите решить с формами c#, спасибо огромное! Всем конфет и счастья)

Вычисление формул
Помогите пожалуйста решить задачку, желательно на Pascal: Нужно реализовать и протестировать функцию, производящей вычисление формулы,...

Вычисление формул
Помогите составить программу в Pascal для вычисления по формуле: y=(a/x)+(b/x2) y=((x+a)2-x2)/(x2)

10
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
09.10.2016, 20:10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

х изменяется от -0.6 до 0.35 и деления на 0 нигде быть не может.
Я накидал программку для одной точности по Вашим формулам, как я их понял, думаю что они написаны с ошибками или изначально ошибочны, поскольку значения сильно не сходятся.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const xn=-0.6;
      dx=0.05;
      e=0.0001;
      n=20;
function f1(x:real):real;
begin
f1:=x/2+x*x/4+(1-x*x*ln(1-x));
end;
function f2(x,e:real):real;
var k:integer;
    t,s:real;
begin
k:=1;
t:=x*x*x;
s:=t/3;
while abs(t/(k*(k+2)))>e do
 begin
  k:=k+1;
  t:=t*x;
  s:=s+t/(k*(k+2));
 end;
f2:=s;
end;
var x:real;
    k:integer;
begin
x:=xn;
for k:=1 to n do
 begin
  writeln('x=',x:5:2,' f1=',f1(x):7:4,' f2=',f2(x,e):7:4);
  x:=x+dx;
 end;
end.
Миниатюры
Вычисление формул и деление на "0"  
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
09.10.2016, 20:12
Вы бы приложили изображение формул как они в первоисточнике или напишите их в редакторе формул что под окном сообщений.
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
09.10.2016, 22:09  [ТС]
Спасибо огромное за быстрый ответ. Ваше решение понятно и навскидку правильно, согласно формул, креплю к сообщению, нет времени разбираться как их рисовать. Но хотелось бы свое решение запустить.
step:=step*x; - в этом месте при 7-м повторении step превращается в 0.
Да и совсем забыл, выскакивает ошибка - 207 Ошибочная операция с плавающей запятой. Как произведение может превратить число в 0. Еще раз проверил свое решение, либо у меня комп глючит, либо пора спать - но там все правильно.
f1_1, f2_2, f3_3 -- Это решение для определенной точности.
Вложения
Тип файла: docx формулы.docx (11.7 Кб, 2 просмотров)
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
09.10.2016, 22:23
https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{2}\left(x \right)=\sum_{k=1}^{\infty}\frac{{x}^{k+2}}{k*\left(k+2 \right)}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{1}\left(x \right)=\frac{x}{2}+\frac{{x}^{2}}{4}+\frac{\left(1-x \right)*\ln \left(1-x \right)}{2}
1
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
09.10.2016, 22:26  [ТС]
ну тип того...
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
10.10.2016, 08:06
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Поправил у себя функцию F1, там опечатался, но никакого деления на 0 нет, хотя результаты функций не сходятся.
Вы что-то неправильно написали в своем запутанном коде вот и маетесь, на глаз же видно что деления на 0 при х=[-0.6..0.35] не может быть.
Используйте хотя бы мой код.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const xn=-0.6;
      dx=0.05;
      e=0.0001;
      n=20;
function f1(x,e:real):real;
var k:integer;
    t,s:real;
begin
k:=1;
t:=x*x*x;
s:=t/3;
while abs(t/(k*(k+2)))>e do
 begin
  k:=k+1;
  t:=t*x;
  s:=s+t/(k*(k+2));
 end;
f1:=s;
end;
function f2(x:real):real;
begin
f2:=x/2+x*x/4+(1-x)*ln(1-x)/2;
end;
var x:real;
    k:integer;
begin
x:=xn;
for k:=1 to n do
 begin
  writeln('x=',x:5:2,' f1=',f1(x,e):7:4,' f2=',f2(x):7:4);
  x:=x+dx;
 end;
end.
Миниатюры
Вычисление формул и деление на "0"  
1
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
10.10.2016, 21:39  [ТС]
Спасибо, что не бросаете. Я бы хотел попросить у Вас вставить текст моей программы в свой паскаль и запустить. Ну такой я, вот уперся в свой текст, и знаю что все правильно должно работать и ничего там запутанного нет, все по порядку и правильно, грешу на свой компилятор.
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
10.10.2016, 23:21  [ТС]
В числителе 2й формулы х через определенное количество циклов превращается в 0, и происходит деление 0/к(к+2).
Сделал следующее, вставил выход из цикла при появлении в числителе нуля, опой чувствую, что не правильно, но по другому не считает.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
program opredelenie_znacheniy_funkcii;
 
Const      {opredeljaem konstanti}
eps1=0.01; {tochnost 1/100}
eps2=0.001;{tochnost 1/1000}
eps3=0.0001;{tochnost 1/10000}
a=-0.6;    {nachalnoe znachenie x}
b=0.05;     {tochnost}
n=20;      {kollichestvo znachenij funkcii}
Var
k1,k2,k3,i:integer; {vspomogatelnie peremennie}
f1,f2_1,f2_2,f2_3,step,slag,x:real;
begin
 
{------------------------risuem shapku tablici---------------------}
 
 
x:=a;       {nachalnoe znacenie x}
for i:=1 to n do {vichisljaem 20 znachenij}
    begin
    {--------------vichislenie f(x1)-----------------------}
     f1:=x/2+x*x/4+0.5*(1-x*x)*ln(1-x); {f(x1)-vicislenie}
     step:=x*x; {nachalnoe znachenie stepeni}
     f2_1:=0; {nachalnoe znachenie funkcii f2(x)-0.01}
     k1:=0;   {nachalnoe znachenie k v f2(x)}
     {-------------vichislenie f(x)1----------------------}
     repeat
           inc(k1);   {uvelichivaem k}
           step:=step*x;           {uvelichivaem stepen}
           if step=0 then break;
           f2_1:=f2_1+step/(k1*(k1+2));        {nahodim znachenie funkcii}
           {writeln('f2_1=',f2_1,' k1=',k1);}
     until abs(f2_1)>eps1; {vihodim iz cikla kogda chislo menshe libo ravno tochnosti eps=0.01}
     {-------------vichislenie f(x)2----------------------}
     f2_2:=f2_1;                   {znachenie f(x)1=f(x)2}
     k2:=k1;                        {prodoljaem schitat}
     repeat
           inc(k2);
           step:=step*x;           {uvelichivaem stepen}
           if step=0 then break;
           slag:=step/(k2*(k2+2)); {opredelaem ocherednoe slagaemoe}
           f2_2:=f2_2+slag;        {nahodim znachenie funkcii}
           {writeln('f2_2=',f2_2,' k2=',k2);}
     until abs(f2_2)>eps2; {vihod kogda f(x)2<=eps(0.001)}
     {-------------vichislenie f(x)3----------------------}
     f2_3:=f2_2;                   {znachenie f(x)2=f(x)1}
     k3:=k2;                       {prodoljaem schitat}
     repeat
           inc(k3);
           step:=step*x;           {uvelichivaem stepen}
           if step=0 then break;
           slag:=step/(k3*(k3+2));  {opredelaem ocherednoe slagaemoe}
           f2_3:=f2_3+slag;        {nahodim znachenie funkcii}
           {writeln('f2_3=',f2_3,' k3=',k3);}
     until abs(f2_3)>eps3; {vihod kogda f(x)3<=eps(0.0001)}
     {--------------vivod rezultata----------------------}
    writeln('|',x:5:2,'|',f1:12:9,'|',f2_1:5:2,'|',k1:3,'|',f2_2:6:3,'|',k2:3,'|',f2_3:7:4,'|',k3:3,'|');
    x:=x+b; {uvelichivaem na shag}
    end;
 writeln('-----------------------------------------------------');
 
end.
Миниатюры
Вычисление формул и деление на "0"  
0
Модератор
10388 / 5676 / 3399
Регистрация: 17.08.2012
Сообщений: 17,323
12.10.2016, 18:04
Скорее всего, имеет место целочисленное переполнение в знаменателе, особенно, если используется Turbo Pascal. Очень распространённая ошибка: сложение, перемножение или возведение в целочисленную степень чисел с ограниченным количеством разрядов. Следует писать не вот так:
Pascal
40
           slag:=step/(k2*(k2+2)); {opredelaem ocherednoe slagaemoe}
А вот так:
Pascal
40
           slag:=step/k2/(k2+2); {opredelaem ocherednoe slagaemoe}
Чтобы Паскаль даже не помышлял целые числа перемножать.
1
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
13.10.2016, 23:43  [ТС]
Спасибо, но проблему это не решило, переполнение скорее всего имеет место с переменной step, не в знаменателе, в числителе, правда значения изменились.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2016, 23:43
Помогаю со студенческими работами здесь

Вычисление формул
Дана строка. В строке записана формула. Подскажите, Самый простой способ вычисления формул.

Вычисление формул
Добрый день, помогите написать в Python формулы

Вычисление формул
Доброго времени суток. Я не разбираюсь в C#, но сдать эти задачи по учёбе нужно. Очень надеюсь на вашу помощь, решить хотя бы часть...

Автоматическое вычисление формул
Здравствуйте. Прошу помочь советом. В excel 2007 случилась беда. Например в ячейку ввел формулу &quot;=СУММ(A1:A2)&quot;она отразила...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru