МОНУ НТУУ"КПІ"
Лабораторна робота № 6
По темі:
"Проектування ітераційних алгоритмів"
Виконала
студентка 1-го курсу ТЕФ
Групи ТР-01
Печененко В.О.
Перевірив:
Щербашин Ю.Д.
Київ
2010
Мета роботи: навчитися розробляти ітераційні алгоритми і програмувати їх засобами мови Turbo Pascal з використанням циклів.
Завдання: розробити алгоритм, намалювати блок-схему і написати програму обчислення значення функції
, розкладеної в степеневий ряд.Обчислення суми членів ряду проводити доти, доки абсолютна величина члена ряду не стане меншою від
(наприклад, ). При цьому порахувати кількість виконаних кроків ітерації (скільки членів ряду ввійшло в суму). Крім того, для підстраховки від зациклювання, яке може виникнути через некоректні вхідні дані, встановити ліміт кількості кроків. Якщо вихід із циклу відбувся через вичерпання ліміту, то видати про це повідомлення.При обчисленні наступного члена ряду використовувати попередній член чи його частину, а не організовувати додатковий цикл для повного його обчислення.
Порівняти (знайти абсолютне значення різниці) обчислене з використанням ряду наближене значення функції із значенням, обчисленим за формулою функції.
В алгоритмі передбачити перевірку правильності введення даних.
За алгоритмом провести розрахунки не менш ніж з трьома різними наборами вхідних даних: при різних значеннях х,
і ліміту кількості кроків.Як результат роботи видати: обчислене наближене значення функції, кількість кроків ітерації, обчислене за формулою значення функції, абсолютну різницю наближеного і "точного" значень функції.
Програма:
приprogramnabl_znach;
{rakhuienablyzheneznachenniazastepenevymriadom}
uses crt;
var x, eps, xn,an,s,f:real;
kk, n:integer;
begin
clrscr;
writeln('riad E(n=1..00)(n+1)^2*x^n pry x(-1,1)');
writeln('vvedit x'); readln(x);
if (x<-1) or (x>1) then writeln('nevirne x') {pereviryaem na virnist x}
else
begin
writeln('vvedit eps'); readln(eps);
writeln('vvedit limit kilkosti iteratsii'); readln(kk);
xn:=1; {prysvoyemo znachenia zminnyh}
n:=0;
s:=0;
repeat {r}
an:=xn*sqr(n+1); s:=s+an;
xn:=xn*x;
n:=n+1;
until (abs(an)<eps) or (n>kk); {r}
if (n>kk) then writeln('perevyscheno limit kilkosti krokiv'); {yaksho cykl zakin iteraciyamy}
writeln('resultat:');
writeln(' kilkist krokiv iteratsii:',n);
writeln(' nablyzhene znachennia funktsii:',s);
f:=(1+x)/((1-x)*(1-x)*(1-x)); {tochne znachenia}
writeln(' tochne znachennia funktsii:',f);
writeln(' |f|-|s|=',abs(f)-abs(s)); {pohybka mizh tochnym ta nabl}
end;
readkey;
end.
Приклади роботи програми:
Висновок
У цій роботі ми навчилися розробляти ітераційні алгоритми, будувати їх блок-схеми та програмувати засобами мови TurboPascal з використанням циклів. Ітерації корисні для обчислення приблизних значень деяких величин чи функцій.