Организация на циклите
В практическата си дейност човек постоянно се сблъсква със задачи, при чието решаване е необходимо многократно повтаряне на едни и същи действия. За компилиране на алгоритми за решаване на такива проблеми се използват командиповторение (цикъл).
Помислете за следния пример. Нека се изисква да се определи остатъкът от делението на числото M на числото N (M и N са произволни естествени числа). Най-лесният начин за решаване на този проблем е следният: проверяваме дали M не е по-малко от N (ако M
Фиг. 34.Циклични структури
В цикълаwhile условието първо се проверява и ако е вярно, т.е. логическият израз е верен, тогава операторът се изпълнява и условието се проверява отново. Условието, записано в цикъладо е условието за продължаване на цикъла. Веднага след като спре да се изпълнява, цикълът завършва. На фигура 34 излизането от ромба "+" (или да) означава изпълнение на условието на цикъла, "-" (илине) - неизпълнение. Цикълътдо никога няма да бъде изпълнен, ако условието на входа на структурата се окаже невярно. Обикновено цикълътwhile съдържа условие за повторение, а цикълът until съдържа условие за край на цикъла. И двете структури имат един вход и един изход. Въпреки това, цикълът отдо винаги се изпълнява поне веднъж, тъй като условието се проверява след изпълнение на действието. Това затруднява проверката на коректността на програмата, така че е по-добре да използвате цикълаwhile. Инструкцията в цикъла може да бъде проста или съставна, оградена в операторни скоби. В този случай в цикъла могат да се повторят няколко оператора, а не само един. Изявленията, повтарящи се в цикъла, се наричат тяло на цикъла.
Циклите могат да бъдат организирани с помощта на различни инструменти на езика Pascal.
Оператор за безусловен преход. Този оператор позволявапреминете без проверка на условието към един от предишните оператори или към някой от следващите, т.е. променете реда на изпълнение на командите. Общ изглед на оператора:
отидете до n;
къдетоn —е цяло число от не повече от четири цифри, наречено етикет. Етикетът се появява в програмата три пъти: 1) в описателната част в разделаЕтикет;2) в оператораgoto; 3) преди оператора, към който се извършва безусловният преход, в този случай етикетът е отделен от оператора с двоеточие.
Организиране на цикли с помощта на оператори на условни и безусловни скокове. Нека се изисква да се изчисли най-големият общ делител на две естествени числа A и B. Нека използвамеалгоритъма на Евклид: ще намаляваме всеки път по-голямото от числата със стойността на по-малкото, докато двете числа станат равни.
Изходни данни | Първа стъпка | Втора стъпка | Трета стъпка | НОД(A,B)=5 |
А=25 | А=10 | А=10 | А=5 | |
B=15 | B=15 | B=5 | B=5 |
програма E5;
етикет 1,2;
променлива a, b: цяло число;
Започнете
write('Въведете две естествени числа');
readln (a,b); 1:
1: ако a = b, тогава отидете на 2;
ако a > b тогава a: = a - b else b: = b - a;
отидете до 1;
2: запис ('gcd = ',a);
ReadIn
Край.
Операторът на цикъла while. Както можете да видите от предишния пример, процесът на цикъл може да бъде организиран без използването на специални оператори. Въпреки това, когато компилирате достатъчно сериозни програми, не се препоръчва да използвате оператора за безусловен скок, тъй като можете бързо да се объркате, когато проверявате програмата.Операторът за цикълwhile изглежда така:
while условие do оператор;
и се изпълнява по следния начин: операторът (тялото на цикъла) се повтаря, докато условието (истински булев израз) бъде изпълнено. Изявлението може да бъде просто или съставно, оградено в операторни скобиbegin . край. За Евклидовия алгоритъм програмата ще изглежда така:
програма E6;
променлива a, b: цяло число;
Започнете
write('Въведете две естествени числа');
readln (a, b);
докато a<>bнаправи
if a>bthen a: = a - b else b: = b - a;