Pascal/Цикли
Урок 1 : | Въведение |
---|---|
Урок 2 : | Променливи и типове |
Урок 3 : | Условия |
Урок 4 : | Цикли |
Урок 5 : | Масиви |
Урок 6 : | Константи |
Урок 7 : | Процедури и функции |
Упражнение : | Упражнения І |
---|
Тема на този урок е как да накараме програмата си да повтаря дадена част от програмния си код, т.нар. цикъл. В Паскал, както и в други програмни езици съществуват два основни вида цикли: цикли, при които е предварително зададено колко повторения да направи цикъла, и такива, при които прекъсването на цикъла зависи от изпълнението на дадено условие. Първият вид цикли в Паскал се обозначава с думата for, а втория вид с repeat и until (повтаряй докато) или с while (докато). Върху разликата между последните два вида ще се спрем по-късно в този урок. Първо да разгледаме for циклите.
for
editFor циклите най-често се употребяват с променливи от тип integer, като в програмирането е станало трядиционно използването на променливи с имената i и j за такива цикли, но и всякакви други имена са допустими. Синтаксисът на тези цикли е както седва: for i:=1 to 10 do
, тоест "за случаите, в които и си присвоява стойности от едно до десет направи".
Следната програма демонстрира как действа един for цикъл, като изписва числата от едно до 10:
var i:integer;
begin
for i:=1 to 10 do writeln(i);
readln;
end.
Параметрите от колко до колко трябва да се изпълнява цикъла могат да се зададат и от потребителя по време на изпълнението на програмата. Ако числото, от което ззапочва цикъла е по-голямо от това, с което завършва цикъла, то думата to се замества с downto. В следната примерна програма потребителят въвежда парамтър до колко да се върти цикъла, при което на всяко испълнение на цикъла се изписва съобщението: "Vavedete chislo:" и след въвеждането на зададения брой числа програмата отпечатва съмата на всички числа.
var i, n, sum, x:integer;
begin
write('Kolko pati da se izpalni cikala:');
readln(n);
sum:=0;
for i:=1 to n do
begin
write('Vavedete chislo:');
readln(x);
sum:=sum+x;
end;
write('Sumata e ', sum);
readln;
end.
Цикли без предварително зададен брой повторения
editЗа разлика от for цикъла while и reapeat циклите не изискват предварително да се знае точно колко пъти трябва да се повтори цикъла. Това позволява например да се въвеждат данни от клавитурата до въвеждането на дадена дума или цифра, която прекратява цикъла.
repeat until
editRepeat цикъла има следния синтаксис:
repeat
<КОМАНДА>
until (<УСЛОВИЕ>);
Командите и условията между думите repeat (повтори) и until (докато) се повтарят докато условието след думата until на стане вярно. В следната програма ще дадем пример за програма, която избира едно произволно число между 1 и 10 и не прекратява действието си докато потребителя не познае, кое е числото. За да се направи такава програма е нужно да се използват командите randomize; и random(<ЧИСЛО>);, първата от които генерира произволни числа, а втората позволява да се присвои на дадена променлива произволно число, за което важи 0 <= X < ЧИСЛО и числото във скобите.
var chislo, opit:integer;
begin
randomize;
chislo:=random(10)+1;
writeln('Za da izlezete ot programata natisnete 0!');
writeln('Namislil sam si edno chislo mezhdu 1 i 10. Poznai koe!');
repeat
readln(opit);
if (chislo=opit) then writeln('Pozna!')
else writeln('Ne pozna! Opitai pak!');
until ((chislo=opit) or (opit=0));
writeln('Chao!');
readln;
end.
while
editРазликата между while и repeat циклите е, че при while цикъла той се изпълнява докато условието е изпълнено, а при repeat, докато то не се изпълни. За да се демонстрира този принцип следната програма е със същото условие като предходната, но е използван while цикъл. Забележете, че на променливата opit се задава стойност различна от тази на chislo, така че цикъла да се изпълни поне един път.
var chislo, opit:integer;
begin
randomize;
chislo:=random(10)+1;
opit:=-1;
writeln('Za da izlezete ot programata natisnete 0!');
writeln('Namislil sam si edno chislo mezhdu 1 i 10. Poznai koe!');
while not((chislo=opit) or (opit=0)) do
begin
readln(opit);
if (chislo=opit) then writeln('Pozna!')
else writeln('Ne pozna! Opitai pak!');
end;
writeln('Chao!');
readln;
end.