4616__И_ЛР8
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
-
Федеральное государственное автономное образовательное учреждение высшего образования
«Санкт-Петербургский государственный университет аэрокосмического приборостроения»
КАФЕДРА № 2
доцент, к.т.н. Бариков Л.Н
Отчёт
по лабораторной работе №8
по дисциплине Информатика
на тему: «Рекуррентные вычисления»
Работу выполнил
студент гр. 4616 Павлов А.В
Санкт-Петербург
2016
Цель лабораторной работы: изучение концепций и освоение технологии структурного программирования, приобретение навыков структурного программирования на языке Паскаль рекуррентных вычислений.
Задание на программирование: используя технологию структурного программирования разработать программу решения индивидуальной задачи, содержащей 3 вида циклических управляющих структур: Цикл - Пока (с предусловием), Цикл - До (с постусловием), Цикл - Для (с параметром). Реализовать интерфейс, обеспечивающий заданное расположение и назначение окон на экране при выполнении программы в соответствии с индивидуальным заданием (вид интерфейса сохраняется из задания на предыдущую лабораторную работу).
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание. Выполнить постановку задачи: сформулировать условие, определить входные и выходные данные.
10
Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
Yn = 0.3 sin(Yn-1) + Yn-3; n = 3,.4, 5,...
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
2) Построить схему алгоритма, последовательно используя для решения задачи все три циклические управляющие структуры (операторы while, repeat…until, for).
3) Составить программу на языке Турбо Паскаль.
Program Recurrent_calculations;
Var
y1,y0,y2, {входное данное - значение аргумента}
eps, {входное данное - точность вычисления}
yn,yn0,yn1,yn2:Real; {текущее значение функции}
n:Integer; {номер предельного элемента}
Begin
WriteLN('Введите значение Y0,y1,y2,eps');
ReadLn(y0,y1,y2,eps);
If (eps<=0) OR (eps>0.1)
Then Begin
Write('Ошибка! ');
Exit;
ReadLn;
end;
{Цикл While}
n:=3;
yn0:=y0;
yn1:=y1;
yn2:=y2;
yn:=(0.3 * sin(y2)+(y0));
While (Abs(yn - y2)>eps)AND(n<MAXINT)
{наибольшее значение типа Integer=32767}
Do Begin
y2:=yn;
y0:=y1;
y1:=y2;
yn:=(0.3 * sin(y2)+(y0));
n:=n+1;
End;
If n=MAXINT
Then WriteLn(' Точность не достигнута.')
Else WriteLn(' Для цикла While предел y(',n,')=',yn,', n=',n);
{Решение с использованием управляющей структуры Repeat-Until}
y0:=yn0;
y1:=yn1;
y2:=yn2;
n:=3;
yn:=(0.3 * sin(y2)+(y0));
Repeat
y2:=yn;
y0:=y1;
y1:=y2;
yn:=(0.3 * sin(y2)+(y0));
n:=n+1;
Until (Abs(yn - y2)<eps) AND (n<MAXINT);
WriteLn(' Для цикла Until предел y(',n,')=',yn,', n=',n);
n:=3;
y0:=yn0;
y1:=yn1;
y2:=yn2;
yn:=(0.3 * sin(y2)+(y0));
For n:=3 To MAXINT
Do Begin
If ((Abs(yn - y2))>eps) AND (n<MAXINT)
Then Begin
y2:=yn;
y0:=y1;
y1:=y2;
yn:=(0.3 * sin(y2)+(y0));
end
else begin
WriteLn(' Для цикла For предел y(',n,')=',yn,', n=',n);
EXIT;
end
end;
ReadLn;
ReadLn;
End.
5-6) Входные данные вводить с клавиатуры по запросу. Выходные данные выводить на экран в развернутой форме с пояснениями.