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

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



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

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



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