Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Формулировка задания:
Последовательность функций Yn = Yn(X), где 0 < X < 1 определяется следующим образом: Y1 = (X + 1) / 2; Yn = (X + Yn-1 + 1) / 2; n = 2,3,4…
Для заданного значения X найти предел последовательности, принимая за таковой значение Yn, удовлетворяющее условию |Yn – Yn-1| < e, где 0 < e <= 0.1.
Ввод исходных данных и вывод результатов вычислений должен осуществляться в разных пользовательских окнах.
Program Recur_2;
{Последовательность функций yn= yn(x), где 0 < x < 1 определяется
следующим образом: y(1)=(x+1)/2; y(n)=(x+y(n-1)+1)/2; n=2,3,4...
Для заданного x найти предел последовательности, принимая за таковой
значение y(n), удовлетворяющее условию |y(n) - y(n-1)|<eps,
где 0 < eps <= 0.1.
}
Uses Crt; {Подключение модуля}
{Процедура вывода пользовательского окна на экран}
PROCEDURE Okno(xv,yv,xn,yn,colfona,colbukv:BYTE;zag:STRING);
VAR
i:INTEGER;
BEGIN
Window(xv,yv,xn,yn); {Установка размеров окна}
TextColor(colbukv); {Установка цвета шрифта}
TextBackGround(colfona); {Установка цвета фона}
ClrScr; {переводит курсор в левый верхний угол окна и
очищает окно, заливая его цветом установленного фона}
GoToXY((xn-xv) DIV 2 - Length(zag) DIV 2,1);
Write(zag);
Window(xv+1,yv+1,xn-1,yn);
END;
Var
x, {входное данное - значение аргумента}
eps, {входное данное - точность вычисления}
y1, {текущее значение функции}
yn:Real; {значение предела последовательности}
n:Integer; {номер предельного элемента}
Begin
TextBackGround(BLACK);
TextColor(15);
ClrScr;
{Окно формулировки задания. Белый текст на синем фоне.}
Okno(5,15,75,20,BLUE,15,'Формулировка задания');
WriteLn('Последовательность функций yn=yn(x), где 0<x<1 определяется');
WriteLn('следующим образом: y(1)=(x+1)/2; y(n)=(x+y(n-1)+1)/2; n=2,3,4...');
WriteLn('Для заданного x найти предел последовательности, принимая за таковой');
WriteLn('значение y(n), удовлетворяющее условию |y(n)-y(n-1)|<eps');
Write('где 0 < eps <= 0.1');
{Окно ввода исходных данных. Белый текст на зеленом фоне.}
Okno(9,2,71,5,2,15,'Ввод');
Write(' Введите значение точности: eps=');
ReadLn(eps);
If (eps<=0)OR(eps>0.1)
Then Begin
{Окно вывода сообщения об ошибке. Красный текст на зеленом фоне.}
Okno(10,11,70,13,GREEN,RED,'Сообщение об ошибке');
Write(' Ошибка ввода! Значение eps должно быть <=0.1 и >0');
ReadLn;
Exit;
End;
Write(' Введите значение аргумента: x=');
ReadLn(x);
If (x<=0)OR(x>=1)
Then Begin
{Окно вывода сообщения об ошибке. Красный текст на зеленом фоне.}
Okno(10,11,70,13,GREEN,RED,'Сообщение об ошибке');
Write(' Ошибка ввода! Значение x должно быть >0 и <1');
ReadLn;
Exit;
End;
{Окно вывода результата. Белый текст на красном фоне.}
Okno(8,7,72,12,4,15,'Вывод');
{Цикл While}
n:=1;
y1:=0;
yn:=(x+1)/2;
While (Abs(yn - y1)>eps)AND(n<MAXINT)
{наибольшее значение типа Integer=32767}
Do Begin
y1:=yn;
yn:=(x+y1+1)/2;
n:=n+1;
End;
If n=MAXINT
Then WriteLn(' Точность не достигнута.')
Else WriteLn(' Для цикла While предел y(',n,')=',yn:1:7,', n=',n);
{Цикл Repeat}
n:=1;
y1:=0;
yn:=(x+1)/2;
Repeat
y1:=yn;
n:=n+1;
yn:=(x+y1+1)/2;
Until (Abs(yn-y1)<eps)OR(n>=MAXINT);
If n=MAXINT
Then WriteLn(' Точность не достигнута.')
Else WriteLn(' Для цикла Repeat предел y(',n,')=',yn:1:7,', n=',n);
{Цикл For}
yn:=(x+1)/2;
for n:=2 To MAXINT
Do Begin
y1:=yn;
yn:=(x+y1+1)/2;
If(Abs(yn-y1)<eps)
Then Break;
End;
If n=MAXINT
Then WriteLn(' Точность не достигнута.')
Else WriteLn(' Для цикла For предел y(',n,')=',yn:1:7,', n=',n);
ReadLn;
End.
Дата публикования: 2014-11-03; Прочитано: 215 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!