Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2017, 15:38   #1
guardi
Пользователь
 
Регистрация: 24.09.2017
Сообщений: 27
По умолчанию Правильно ли выполнена проверка на погрешность?

Код:
program number15;
var 
a,x,x0,hx,xn,y,e,s,s1,s2:real;
n,kn:integer;
begin
x0:=0.1;
hx:=0.15;
xn:=1.6;
e:=1E-4;
kn:=10;
x:=x0;
while x < xn do
 begin
  if x < 0.5 then
   begin
    n:=0;
    s:=0;
    s1:=s;
    repeat
     s2:=s1;
     s:=s+(exp(2*n*ln(x)))/4*n+1;
     n:=n+1;
   until abs(s1-s2) < e;
   y:=((sqr(x)+3*x+4)/(5*x+1))*s;
   writeln('x = ',x, ' y = ',y:2:4);
   end
  else
   begin
    s1:=0;
    for n:=1 to kn do
     s1:=s1+(exp(n*ln(x))/n);
    y:=(x/3)*s;
    writeln('x = ',x, ' y = ',y:2:4);
   end;
   x:=x+hx;
 end;
end.
Собственно,вот эти строки:
n:=0;
s:=0;
s1:=s;
repeat
s2:=s1;
s:=s+(exp(2*n*ln(x)))/4*n+1;
n:=n+1;
until abs(s1-s2) < e;
Изображения
Тип файла: jpg Screenshot_2.jpg (15.5 Кб, 115 просмотров)
guardi вне форума Ответить с цитированием
Старый 10.12.2017, 15:45   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Нет. У вас же цикл бесконечный, т.к. s1, s2 не изменяются в цикле.
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 16:45   #3
guardi
Пользователь
 
Регистрация: 24.09.2017
Сообщений: 27
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Нет. У вас же цикл бесконечный, т.к. s1, s2 не изменяются в цикле.
А не поможите исправить,чтобы цикл заканчивался,если погрешность стала меньше,чем заданная,как поступить?
guardi вне форума Ответить с цитированием
Старый 10.12.2017, 17:22   #4
guardi
Пользователь
 
Регистрация: 24.09.2017
Сообщений: 27
По умолчанию

А вот так?

begin
n:=0;
s:=0;
t:=1;
while abs(t) > e do
begin
n:=n+1;
t:=exp(2*n*ln(x))/(4*n+1);
s:=s+t;
end;
guardi вне форума Ответить с цитированием
Старый 10.12.2017, 18:06   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Наверно, нет.

Тебе надо не (абсолютное) значение в точке проверять, а "изменение расчётной величины", т.е. разность.
Разность между теперешним значением и значением на предыдущем шаге.
По идее эта разность (с каждый шагом) будет уменьшаться.

А ну сделай "ручной счёт", покажи суть задачи на пальцах...
Если долго считать с помощью калькулятора, - можешь в С++ подсчитать (организовав простенький цикл на 100 точек, а потом разность в ручную найти).
Покажи свои расчёты здесь...
И только после этого переходи к решению своей задачи...

p.s.: тебе будет полезно поискать на форуме подобные задачи, - здесь их целая куча...
Надо только формулу свою подставить...

Последний раз редактировалось ura_111; 10.12.2017 в 18:09.
ura_111 вне форума Ответить с цитированием
Старый 10.12.2017, 18:24   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Тебе надо S находить:

На первом шаге S1 несчем сравнивать.
При втором расчёте S2, можно найти |S1-S2|
При расчёте в третей точке - можно найти |S2-S3|
....
....
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чем объясняется погрешность при сложение вещественных чисел и какими способами можно устранить эту погрешность в Pascal crolikoff Помощь студентам 16 02.02.2016 13:58
Что не правильно? Программа на C++ находит минимум правильно, а максимум нет. В чем погрешность? rafael999 Помощь студентам 3 26.10.2013 11:21
правильно ли выполнена блок-схема e73t4ph Общие вопросы C/C++ 7 23.05.2012 15:16
ошибка: "Не выполнена проверка подлинности" artemavd БД в Delphi 1 28.06.2010 14:28
Ошибка "Не выполнена проверка подлинности" Михаил Юрьевич БД в Delphi 8 12.07.2009 22:13