Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sitkin_Informatika_Programmirovanie_v_DELPHI.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
600.56 Кб
Скачать

Операторцикласпоследующимусловием

Этот оператор обычно используется когда число повторений за-ранеенеизвестно,аопределяетсяв ходециклическогопроцесса

repeatоператорSuntilусловие

здесьrepeat,untilслужебныеслова;операторSтелоцикла;

условиепеременная или выражение логиче-скоготипа. Блок-схема алгоритма, реализуемогооператором цикла с постусловием,представленана рис. 7.7. ОператорSвыполняется до тех пор,покаусловиевпервые не примет значениеTrue.ОператорSвыполняетсякакминимумодинраз.

Рис.7.7

Пример7.4

Разработаемалгоритмипроектдлявычислениясуммы

k

S x

k0k!

1xx

2

2

x3

6

...

x ...

k

k!

гдеk!=1·2·3·...·(k1)·k.Напомним,чтоданнаясуммаравнаex.Суммасодержитбесконечноечислослагаемых.Нокаждоеследую-щееменьшепредшествующего,стремитсякнулюивсёменьшийвкладвноситвсумму.Поэтому,начинаяснекото-

x

a= 1;k=0;

S=0

S=S+a

k=k+1

рого слагаемого, отбросим остальные. Будем по-лагать, что точность вычисления суммы достаточ-на, если отношение очередного слагаемого к сум-ме всех предыдущих слагаемых по модулю мень-ше числа0, остальные слагаемые можно не учи-тывать. Однако заранее нельзя определить сколь-кослагаемыхвойдётвсумму,сформулированотолько условие завершения циклического процес-са.Поэтомуследуетиспользоватьоператорциклас постусловием для реализации алгоритма. Выве-демрекуррентноесоотношение

ak

ak1

x xk1

k

k!:(k1)!

xk(k1)! xxk1(k1)!k k

ak

ak1k.

Рис.7.8

В цикле (рис.7. 8) определяется значение текущегослагаемого по рекуррентной формуле, если оно неудовлетворяет условию точности, то осуществля-ется переход к новой итерации, где в её начале этослагаемоедобавляетсяксумме.Впротивномслу-

чаепроисходитвыходизциклаивыводнакопленнойсуммыбезсла-гаемого,вычисленногонапоследнейитерации,т.к.оноужеудовле-творилоусловию|ak/Sk-1|.Довходавциклследуетзадатьначаль-ные значенияa= 1 (значение первого слагаемого),k= 0 (номер перво-го слагаемого),S= 0 (чтобы получитьS=a=1 на первой итерации).procedureTForm1.Button1Click(Sender: TObject);

varx, e, a, S:real;k:byte;beginx:=StrToFloat(Edit1.Text);

e:=StrToFloat(Edit2.Text); //точность должна быть положительнойa:=1; k:=0; S:=0; //присвоение начальных значений до тела циклаrepeat//началотелацикла

S:=S+a;//добавлениеслагаемогокнакапливаемойсумме

k:=k+1;//переход кследующемуномеруслагаемого

a:=a*x/k; //вычисление текущего слагаемого по рекуррентной формулеuntilabs(a/S)<=e; //проверка условия выхода из тела циклаLabel3.Caption:='S='+FloatTostrF(S,ffFixed,10,5); //вывод суммыLabel4.Caption:='слагаемых в сумме '+IntToStr(k); //вывод числа слаг.Label5.Caption:='альтерн. знач. '+FloatToStr(exp(x)); //необязательноend;

Нарис.7.9представленыпримерыработыприложениясрасчё-томсуммыпритрёхзначенияхточностииконтрольнымзначением.

Рис.7.9