Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример 2. Формулировка задания:



Формулировка задания:

Последовательность функций 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.038 с)...