BigEdu.ru

Види циклів

1. Доти, поки не...

Повернемося до обчислення квадратного кореня (приклад 4.4):

X:=(a+1)/2; Y:=0.5*(X+a/X);

while abs(X-Y)>d do

begin

X:=Y; Y:=0.5*(X+a/X);

end;

Цей алгоритм задає послідовність дій такого вигляду:

X:= (a+1)/2;

Y:= 0.5*(X+a/X);

обчислення умови продовження: true;

X:=Y;

Y:= 0.5*(X+a/X);

обчислення умови продовження: true;



X:=Y;

Y:= 0.5*(X+a/X);

обчислення умови продовження: false.

Якщо в цій послідовності замінити найперший оператор на Y:=(a+1)/2; X:=Y, то вона буде циклічною, починаючи з другого оператора, і циклом буде

X:=Y;

Y:= 0.5*(X+a/X);

обчислення умови продовження

Можна було б подумати про оператор

do X:=Y;

Y:=0.5*(X+a/X);

while abs(X-Y)>d;

або в загальному вигляді

do послідовність операторів

while умова.

Такого оператора в мові Паскаль немає, а є схожий за виглядом

repeat

послідовність операторів

until умова

Він називається repeat-оператором, або оператором циклу з пост-умовою ("пост" означає "після"), і дослівно перекладається українською мовою як

повторювати

послідовність операторів

доти, поки не умова.

"Поки не" перетворює умову в умову завершення. Справа в тім, що спочатку виконується послідовність операторів (тіло), потім обчислюється умова, і якщо вона хибна, то знову виконується тіло тощо. Виконання оператора завершується після того, як при обчисленні умови одержано значення true. Таким чином, істинність умови означає завершення, а не продовження виконання всього оператора. Ми б назвали цей оператором циклу з умовою завершення, але такий термін у літературі не зустрічався.

Перепишемо алгоритм із прикладу 4.4 з використанням repeat-оператора. Цикл повинен починатися оператором X:=Y, тому перед циклом треба задати ініціалізацію Y. Умовою завершення повинно стати

not abs(X-Y)>d, або abs(X-Y)У діалекті Турбо Паскаль остання заборона відсутня. Крім того, при порівнянні k і hv насправді обчислюється значення виразу khv. Разом ці особливості дозволяють написати цикл for, тіло якого виконується аж ніяк не при значеннях параметра циклу, указаних у заголовку. Наприклад, для обчислення функції n!!, означеної за непарного n як 1 3 … n і як 2 4 … n за парного, в Турбо Паскаль можна, здавалося б, зробити такий трюк:

ff:=1; if odd(n) then lb:=1 else lb:=2;

{n і lb або обидва парні, або обидва непарні}

for k := lb to n do

begin ff:=ff*k; k:=k+1 end

Але це неправильно! Між двома послідовними виконаннями ff:=ff*k значення k збільшується двічі на 1 (явно і неявно), і, поки kn/2, то останній цикл також задає зайві обчислення. Наприклад, при n=8, k=7 тіло циклу виконується 7 разів, хоча значення 8 утворюється вже після першого виконання. Скористаємося тим, що , і напишемо остаточний варіант:

function C (n, k : integer) : integer;

var d : integer;

begin

if k > n div 2 then k:=n-k;

d:=1;

for i := 1 to k do d:=d*(n+1-i) div i;

C:=d

end;

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Рефераты по информатике 1. Доти, поки не... Повернемося до обчислення квадратного кореня (приклад 4.4): X:=(a+1)/2; Y:=0.5*(X+a/X); while abs(X-Y)>d do begin X:=Y;
Оценок: 433 (Средняя 5 из 5)

Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.

© 2016 - 2022 BigEdu.ru