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

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

09.10.2016, 19:41. Показов 1249. Ответов 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
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
64306 / 47603 / 32742
Регистрация: 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
Почетный модератор
 Аватар для Puporev
64306 / 47603 / 32742
Регистрация: 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!
 Аватар для JokeR.BY
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
Почетный модератор
 Аватар для Puporev
64306 / 47603 / 32742
Регистрация: 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
Модератор
10140 / 5476 / 3370
Регистрация: 17.08.2012
Сообщений: 16,730
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2016, 23:43
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Сайт компании Red-Star-Soft переехал на новый хостинг!
Etyuhibosecyu 06.03.2025
Как и советовал Rius, я покинул хостинг от "Ru-Center" и перенес сайт red-star-soft. com на хостинг с более позитивными отзывами (спойлер: найти его было далеко не просто) (чтобы прочитать текст,. . .
Альтернативная сериализация в Java: сравнение Kryo, Protobuf и Avro
Jamaican 06.03.2025
Сериализация — один из краеугольных процессов в Java-разработке. Превращение объектов в поток байтов для хранения или передачи по сети с последующим восстановлением звучит просто, но реализация этого. . .
Битва Java-кешей: Сравниваем Ehcache, Caffeine и Hazelcast
Jamaican 06.03.2025
Производительность — вечный Святой Грааль для Java-разработчиков. Мы оптимизируем алгоритмы, настраиваем JVM, распараллеливаем процессы, но неизменно приходим к одному и тому же средству ускорения —. . .
Параметры подтверждения сообщения Kafka
Jamaican 06.03.2025
Среди распределённых систем и высоконагруженных приложений Apache Kafka занимает особое место. Эта платформа потоковой обработки данных давно стала стандартом де-факто для организаций, которым. . .
Оптимизация времени запуска Spring Boot
Jamaican 06.03.2025
Вы когда-нибудь сидели, барабаня пальцами по столу, пока ваше Spring Boot приложение медленно поднимается? Этот момент, когда вы успеваете сходить за кофе, пообщаться с коллегами и вернуться, а. . .
Деплой Kubernetes в Java: масштабирование Spring Boot приложений
Jamaican 06.03.2025
Когда ваше Spring Boot приложение внезапно получает всплеск трафика или требует плавного обновления без простоя — традиционные методы деплоя часто пасуют. Именно здесь на сцену выходит Kubernetes —. . .
Бессерверные приложения Java: сравнение AWS Lambda и Azure Functions
Jamaican 06.03.2025
Что такое "бессерверные приложения" и почему они так привлекательны? Вопреки названию, серверы никуда не исчезли — просто теперь управление инфраструктурой перекладывается на плечи облачного. . .
Безопасность микросервисов с OAuth2 и OpenID Connect
Jamaican 06.03.2025
С ростом популярности микросервисов растут и проблемы, связанные с их безопасностью. В отличие от монолитных приложений, где безопасность можно было обеспечить централизованно, микросервисная. . .
Структурное логирование в Spring Boot
Jamaican 06.03.2025
Представьте, что вы управляете сотней микросервисов в продакшн-среде. Внезапно один из сервисов начинает давать сбои, и вам нужно срочно выяснить причину. Вы открываете логи и видите бесконечные. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
bytestream 05.03.2025
В эпоху цифровизации безопасность веб-приложений становится не просто рекомендацией, а жизненной необходимостью. Если вы разрабатываете приложения на JavaScript, вам наверняка знакома эта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru