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

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

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

Author24 — интернет-сервис помощи студентам
Для аргумента , изменяющегося от –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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2016, 19:41
Ответы с готовыми решениями:

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

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

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

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

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

Решение

х изменяется от -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
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
09.10.2016, 20:12 3
Вы бы приложили изображение формул как они в первоисточнике или напишите их в редакторе формул что под окном сообщений.
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
09.10.2016, 22:09  [ТС] 4
Спасибо огромное за быстрый ответ. Ваше решение понятно и навскидку правильно, согласно формул, креплю к сообщению, нет времени разбираться как их рисовать. Но хотелось бы свое решение запустить.
step:=step*x; - в этом месте при 7-м повторении step превращается в 0.
Да и совсем забыл, выскакивает ошибка - 207 Ошибочная операция с плавающей запятой. Как произведение может превратить число в 0. Еще раз проверил свое решение, либо у меня комп глючит, либо пора спать - но там все правильно.
f1_1, f2_2, f3_3 -- Это решение для определенной точности.
Вложения
Тип файла: docx формулы.docx (11.7 Кб, 2 просмотров)
0
CAPITAL OF ROCK!
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
09.10.2016, 22:23 5
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  [ТС] 6
ну тип того...
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
10.10.2016, 08:06 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Поправил у себя функцию 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  [ТС] 8
Спасибо, что не бросаете. Я бы хотел попросить у Вас вставить текст моей программы в свой паскаль и запустить. Ну такой я, вот уперся в свой текст, и знаю что все правильно должно работать и ничего там запутанного нет, все по порядку и правильно, грешу на свой компилятор.
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 14
10.10.2016, 23:21  [ТС] 9
В числителе 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
Модератор
10007 / 5364 / 3338
Регистрация: 17.08.2012
Сообщений: 16,342
12.10.2016, 18:04 10
Скорее всего, имеет место целочисленное переполнение в знаменателе, особенно, если используется 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  [ТС] 11
Спасибо, но проблему это не решило, переполнение скорее всего имеет место с переменной step, не в знаменателе, в числителе, правда значения изменились.
0
13.10.2016, 23:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2016, 23:43
Помогаю со студенческими работами здесь

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

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

Автоматическое вычисление формул
Здравствуйте. Прошу помочь советом. В excel 2007 случилась беда. Например в ячейку ввел формулу...

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

Вычисление физических формул
1.Вычисление физических формул, например, расчет выделения теплоты в проводнике по формуле...

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

Реализовать вычисление нескольких формул
Там на фото написано что нужно сделать. Помогите пожалуйста. Делать нужно только где написано...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru