Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Наредбе и контролне структуре у Octave-у

Увод

У овом поглављу бавимо се елементима програмирања у Octave-у. У досадашњем градиву


већину ствари смо могли да обавимо простим позивањем једне наредбе у Octave-у (или
евентуално низа од неколико једноставних наредби). За примене које нам следе у
наставку биће неопходно да програмирамо сложеније алгоритме који у себи укључују
условно извршавање и петље. Због тога је неопходно да се најпре упознамо са
могућностима програмског пакета Octave када је програмирање у питању. У наставку
следи брзи преглед наредби и контролних структура у Octave-у. Подразумева се да је
читалац упознат са основним концептима процедуралног програмирања (да разуме
појмове као што су променљива, израз, наредба, гранање, петља, и сл.).

Просте наредбе

Најједноставније наредбе смо већ упознали. Сваки израз у Octave-у представља наредбу.
Ефекат овакве наредбе је израчунавање вредности тог израза. Ако израз садржи оператор
доделе (=), тада се израчуната вредност уписује у променљиву (или променљиве) на левој
страни доделе. У супротном, вредност израза се уписује у променљиву ans. Ако се израз
завршава знаком ; (тачка-зарез) тада се његова вредност неће исписати на излазу, а у
супротном хоће.

С обзиром да знак ; (тачка-зарез) нема улогу краја наредбе (као у C-у и другим сличним
језицима), већ се наредба завршава на крају реда, није могуће да израз који чини наредбу
заузима више линија. За то је потребна посебна  синтакса, која подразумева оператор ...
(три тачке) на крају линије ако желимо да се израз настави и у следећој линији. Нпр:

А = [1 2 3;
     4 5 6;
     7 8 9];

ће пријавити грешку. Да би се ова грешка избегла, потребно је или све написати у једном
реду:

А = [1 2 3; 4 5 6; 7 8 9];

или написати овако:

А = [1 2 3; ...
     4 5 6; ...
     7 8 9];
Наредбе гранања

Најпростији облик наредбе гранања је:

if(<uslov>)
 <telo>
end
где је <uslov> било који логички израз (или израз који се може конвертовати у логички),
а  <telo> се састоји из једне или више наредби (простих или сложених). Сложенији облици
наредбе гранања подразумевају else грану:

if(<uslov>)
  <if_telo>
else
<else_telo>
end
или вишеструко гранање:

if(<uslov1>)
<if1_telo>
elsif(<uslov2>)
<if2_telo>
...
else
 <else_telo>
end

Друга наредба гранања је наредба switch која омогућава гранање по случајевима, на


основу вредности израчунатог израза. Њена синтакса је:

switch(<izraz>)
 case <labela1>
   <naredbe1>
case <labela2>
 <naredbe2>
...
otherwise
 <naredbe>
end

Наредба се извршава тако што се израчуна <izraz>, а онда се његова вредност пореди са


константним вредностима у лабелама датих case-ова. Уколико се пронађе
такав case, извршава се блок наредби који му одговара. За разлику од C-а, блок наредби за
дату лабелу не садржи break; на крају. Наредбе се извршавају до првог следећег case-а, 
otherwise-а или end-а.
otherwise део се извршава ако се вредност израза  не поклапа ни са једном лабелом у
датим  case-овима. Лабела може да садржи и више константних вредности у витичастим
заградама, раздвојених зарезима. У том случају се тај case односи на било коју од
наведених вредности.

Итеративне наредбе (петље)

Најједноставнија петља је while петља. У питању је стандардна петља са предусловом.


Њена синтакса је:

while(<uslov>)
<telo>
end

при чему се <telo> извршава докле год је услов испуњен.

Друга врста петље је do-until петља. У питању је петља са постусловом. Њена синтакса је:

do
<telo>
until(<uslov>);

Наредбе у телу петље се извршавају бар једном, а понављају се све док се услов не испуни.
Другим речима, <uslov> дефинише услов изласка из петље (супротно од
понашања do-while петље у C-у и сличним језицима где се наводи услов останка у петљи).
О овоме треба водити рачуна, ако сте раније имали искуства са C-оликим језицима.

Последњи тип петље је бројачка (for) петља. Њена синтакса је:

for v=<exp>
<telo>
end
Ова наредба ради тако што променљива v у свакој итерацији узима вредност једне по
једне колоне матрице која је вредност израза <exp> (сетимо се да је у Octave-у све матрица,
дакле и скалари и вектори). Ако је <exp> скалар, онда петља има само једну итерацију, при
чему v узима вредност тог скалара. Ако је <exp> вектор-врста, тада је то стандардна
итерација кроз вектор, при чему променљива v у свакој итерацији узима следећу вредност
из вектора; ако је <exp> матрица, тада је v у свакој итерацији вектор-колона.
Типично, for петља се користи на следећи начин:

for i = 1:n
<telo>
end
где бројачка променљива i у свакој итерацији узима следећу вредност опсега 1:n.

Као и у другим програмским језицима, и овде је могуће петљу прекинути пре времена, ако
наступи неки разлог за то, као и прекинути текућу итерацију и наставити са следећом.  У ту
сврху се користе наредбе break; и continue; респективно, слично као и у C-оликим језицима.

You might also like