Оператор повторение
Операторът за повторениеrepeatима две функции:
1. Условието се проверява след следващото изпълнение на операторите на тялото на цикъла (следващата итерация) и по този начин се гарантира поне едно изпълнение на цикъла.
2. Критерият за прекратяване на цикъла е равенството на израза с константатаTrue.
Поради тази причина цикълътrepeatчесто се нарича цикълpostconditionили цикълDO",, тъй като спира да се изпълнява веднага щом стойността на израза на условието, написан след думатаuntil,е равна наTrue (вярно).
Операторът за повторениеrepeatсе състои от заглавкаrepeat,тяло и крайно условие до.
Изявленията, затворени между думитеrepeat и until,са тялото на цикъла. Първо се изпълнява тялото на цикъла, след което се проверява условието за излизане от цикъла. Ето защо цикълът, организиран с помощта на оператораrepeat, във всеки случайще бъде изпълнен поне веднъж. Ако резултатът от булевия израз еFalse,тогава тялото на цикъла се активира още веднъж; ако резултатът еTrue, цикълът излиза.
Когато програмирате операторите на тялото на цикъла, трябва да се уверите, че поне един от операторите на тялото на цикъла засяга стойността на условието, в противен случай цикълът ще се изпълнява неограничено време.
Пример на програма, използваща оператора repeat
Пример за действие на оператораrepeatе програматаDemoRepeat, която въвежда и сумира произволен брой цели числа. Ако е въведена стойност 999, резултатът от сумирането се показва на екрана.
ReadIn(X); прочете следващата X стойност от клавиатурата>
Writeln('Сума на въведените числа= ',Сума) ;
В този пример, в секцията за деклариране на променливи, се декларира променливаXот тип integerцяло числоиСумаот реален типreal.
В началото на изпълнението на програмата стойността на сбора от числата се нулира. След това се декларира цикъл със запазената думаrepeat, последвана от оператори на тялото на цикъла, които показват заявката'Value X = ',прочитат стойносттаX, въведена от клавиатурата. Операторътifпроверява дали не е равно на числото999и ако не е равно на999, увеличава стойността на суматаSumсъс стойността на числотоX. В края на цикъла операторътдо X = 999проверява крайното условие на цикъла. Ако стойността на изразаX = 999е истина, тогава цикълът ще приключи и управлението в програмата ще бъде прехвърлено към оператора след думатаuntil, т.е. първият оператор извън цикълаrepeat. Това е извикване на процедуратаWriteln, която ще отпечата съобщението'Сумата от въведените числа е равна на'и ще отпечата стойността на променливатаSum.
Пример на програма с използване на оператори за присвояване, повторение и избор
Операция, Ans: char;
операция на случай на
readln(Ans); Четене на отговора на въпрос>
До (Ans='N') или (Ans='n');
Разделът за описание на променливи описва променливи - операндиX, Yи резултат от аритметични операцииRezultот реален тип, както и символна променливаOperation, която съхранява стойността на знака на аритметичната операция, и символна променливаAns-, на която е присвоена стойност"Y"или" N".
Процесът на извършване на аритметични операции от калкулатора се организира с помощта на оператораrepeatи продължава, докато на променливатаAnsне бъде присвоена стойност'N'или'n'.
В тялото на цикъла те първо се изискват и от тях се четатстойностите на клавиатурата на операндите X и Y, след което знакът на аритметичната операция се изисква и чете. Операторът за изборcaseпо стойността на променливатаOperation (селектор)избира знака на операцията и в зависимост от нейната стойност извършва аритметична операция. Например, ако стойността на променливатаOperationе равна на стойността на константата за избор'-', тогава се изпълнява операторът за присвояванеRezult := X-Yи т. н. Ако стойността на променливатаOperationне е равна на никоя стойност на константата за избор, тогава контролът се прехвърля към оператора след думатаelseи съобщениетоПоказва се "Грешка при въвеждане". След това на екрана се показва подканата'Продължи (Y/N)'и стойността на променливата за символен типAnsсе чете от клавиатурата. Ако стойността на израза(Ans='N') или (Ans='n')еFalse, тогава цикълът ще се повтори отново, в противен случай цикълът ще приключи и управлението в програмата ще бъде прехвърлено към оператораend.