• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Программирование итерационного цикла

Aizen_Stas

Новые
Регистрация
26 Окт 2011
Сообщения
20
Реакции
0
Баллы
0
Программирование итерационного цикла

Доброго времени суток! Уже несколько дней пытаюсь сделать данное задание,но увы ничего не получается. Тряс всех однокурсников никто внятно помочь не может. Проблема в несовпадающих значениях функции(y) и бесконечного ряда(S).

Вот задание. Посмотреть вложение Задание.docx

program work77;
const n=1000;e=0.0001;
label met;
var x,y,s,xn,xk,dx,c,a:real;
i:integer;
begin
write('Введите xn,xk,dx=');
readln(xn,xk,dx);
x:=xn;
while x<=xk do
begin
y:=ln((1+x)/(1-x));s:=0;c:=1/x;
for i:=1 to n do
begin
c:=x*x*c;
a:=c/(2*i-1);
if abs(a)<e then goto met;
s:=2*(s+a);
end;
met:writeln('x=',x:3:1,' y=',y:8:5,' s=',s:8:5,' i=',i);
x:=x+dx;
end
end.

Результаты:
x=0.5 y=1.09861 s=16.72156 i=6
x=0.6 y=1.38629 s=81.98013 i=8
x=0.7 y=1.73460 s=392.90462 i=10
x=0.8 y=2.19722 s=7427.93213 i=14
x=0.9 y=2.94444 s=35689181.46681 i=26
Делал на Pascal ABC.
 
Если еще актуально.
Не знаю, что за придурки писали методичку, но из простейшей задачки сделано черт-те-что и сбоку бантик. Не мудрено, что у Вас проблемы с алгоритмом.
Теперь по Вашей программе. Настоятельно рекомендую: забудьте обо всех goto, метках и пр. - учитесь нормальному современному программированию.
Вот один из возможных вариантов кода:
Код:
const
 n=1000;
 e=0.0001;
 Xn=0.5;
 Xk=0.9;
 Dx=0.1;
var
 X,Y,S,a:real;
 i,j,Imax:integer;
BEGIN
 Imax:=ROUND((Xk-Xn)/Dx);
 For i:=0 to Imax do
  begin
   X:=Xn+Dx*i;
   Y:=Ln((1+X)/(1-X));
   j:=1;
   a:=X;
   S:=a*2;
   Repeat
    a:=a*(2*j-1);
    Inc(j);
    a:=a/(2*j-1)*SQR(X);
    S:=S+a*2;
   Until (Abs(Y-S)<e) or (j>n);
   writeln('x=',x:3:1,' y=',y:8:5,' s=',s:8:5,' i=',j);
  end;
 readln
END.
P.S. Написано, отлажено и оттестировано на Турбо Паскале (точнее - Free Pascal). За возможные проблемы и глюки с АВС не отвечаю.
 

Вложения

  • AAA01.webp
    AAA01.webp
    9 KB · Просмотры: 71
Спасибо! Я уж совсем отчаялся...
 
Я по специальности инженер-биотехнолог,поэтому нас по информатике учат абы как
 
Назад
Сверху