Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Формулировка задания:
Последовательность {an} задана равенствами: a1 = 0.5; an = n * (an-1 + 0.5). Вычислить предел произведения (1 + 1 / a1)*(1 + 1 / a2)*…*(1 * 1 / an)…
Вычисления закончить при (1 / an) < eps.
Ввод исходных данных и вывод результатов вычислений должен осуществляться в разных пользовательских окнах.
Program Cikly;
{Вычисление предела произведения с заданной точностью.
Входные данные: a1 - начальное значение,
eps - точность вычисления.
Выходное данное: pr - предел произведения
}
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
a1,eps,pr:Real;
n:Integer; {порядковый номер сомножителя}
txt:string; {заголовок диалогового окна}
Begin
TextBackGround(BLACK);
TextColor(15);
clrscr;
{Окно формулировки задания. Белый текст на синем фоне.}
Okno(8,15,72,20,BLUE,15,'Формулировка задания');
WriteLn('Вычисление предела произведения (1+1/a(1))*.*(1+1/a(n))*');
WriteLn('с заданной точностью 0 <eps<= 0.1');
WriteLn('Значение a(1)=0.5; a(n)=n*(a(n-1)+0.5)');
WriteLn('Вычисления закончить при (1/a(n))<eps');
{Окно ввода. Белый текст на зеленом фоне.}
Okno(9,2,71,5,2,15,'Ввод');
Write('Задайте значение точности вычисления 0<eps<=0.1 -> ');
ReadLn(eps);
If (eps<=0) Or (eps>0.1)
Then Begin
{Окно вывода сообщения об ошибке. Красный текст на зеленом фоне.}
Okno(9,7,71,8,GREEN,RED,'Сообщение об ошибке');
Write('Ошибка: точность <=0 или >0.1! Нажмите Enter');
ReadLn;
Exit;
End;
{Окно вывода результата. Белый текст на красном фоне.}
Okno(8,7,72,12,4,15,'Вывод');
{Решение с использованием управляющей структуры While-Do}
a1:=0.5;
n:=1;
pr:=1;
While Abs(1/a1)>eps
Do Begin
pr:=pr*(1+1/a1);
n:=n+1;
a1:=n*(a1+0.5);
End;
WriteLn(' While: предел = ',pr:7:4,'; число сомножителей = ',n);
{Решение с использованием управляющей структуры Repeat-Until}
a1:=0.5;
n:=1;
pr:=1;
Repeat
pr:=pr*(1+1/a1);
n:=n+1;
a1:=n*(a1+0.5);
Until Abs(1/a1)<eps;
WriteLn(' Repeat: предел = ',pr:7:4,'; число сомножителей = ',n);
{Решение с использованием управляющей структуры For-To-Do}
a1:=0.5;
pr:=1;
For n:=2 To MAXINT {наибольшее значение типа Integer = 32767}
Do Begin
pr:=pr*(1+1/a1);
a1:=n*(a1+0.5);
If Abs(1/a1)<eps
Then break; {досрочное завершение цикла}
End;
WriteLn(' For: предел = ',pr:7:4,'; число сомножителей = ',n);
ReadLn;
End.
Дата публикования: 2014-11-03; Прочитано: 241 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!