Писање скрипти

Један програм у програмском језика Octave чини низ наредби које се извршавају линију по линију, наредбу по наредбу. Произвољан низ наредби можемо сачувати у један фајл типа .m, који касније можемо извршити као у примеру:

[prva_skripta.m]
A = rand(3,5)
min(min(A))
>> prva_skripta
A =

    0.6852171   0.4709342   0.8744946   0.1088955   0.9055057
    0.6767950   0.6808867   0.0452116   0.2961173   0.0058840
    0.9171189   0.1731894   0.3121850   0.8828274   0.0948282

ans =  0.0058840

Улазни и излазни подаци

Интеракција са корисником могућа је коришћењем функција input и disp. Општи формат коришћења функције input је a = input("порука","s"), где је "порука" текст који описује кориснику шта треба да унесе, а "s" опциони аргумент који назначава да је променљива a текстуалног типа (string).

>> s = input("Unesite tekst: ", "s")
Unesite tekst: Zdravo!
s = Zdravo!

На сличан начин можемо дефинисати вредност променљиве другог типа. Од корисника се очекује да уноси податке у истом формату у којем би експлицитно задао вредност променљиве тог типа:

>> A = input("Unesite elemente matrice: ")
Unesite elemente matrice: [1 2;3 4]
A =

    1   2
    3   4

Функција disp за испис података може имати само један аргумент. Можемо исписати неку поруку или вредност неке променљиве:

>> disp("Elementi matrice A su:"); disp(A)
Elementi matrice A su:
    1   2
    3   4

Форматиран испис се може вршити коришћењем функције printf слично као у другим програмским језицима:

[minmax.m]
a = input("Unesite niz: ");
printf("Minimalni element niza a je: %.2f, a maksimalan %.2f \n", min(a), max(a));
>> minmax
Unesite niz: [123/4 -100.7777 200/7 50.1234]
Minimalni element niza a je: -100.78, a maksimalan 50.12

Коментари

Када пишемо дужу скрипту понекад је корисно оставити поруке које ближе описују рад програма. У програмском језику Octave коментар може почети симболом # или %.

A = rand(4,4)*9+1; % Uniformna raspodela na intervalu (1,10)

# Racunamo minimum elemenata matrice
minA = min(min(A));

# Ispisujemo minimalni element zaokruzen na dve decimale
printf("Minimalni element je: %.2f\n", minA)

Контрола тока

Гранање у програмском језику Octave слично је као у другим програмским језицима. Показаћемо на примеру програма који проверава да ли је година преступна користећи функцију rem која рачуна остатак при дељењу задатих бројева:

g = input("Unesite godinu: ");
if (rem(g,400) == 0)
  disp("Godina je prestupna jer je deljiva sa 400.");
elseif (rem(g,4) == 0 & rem(g,100) != 0)
  disp("Godina je prestupna jer je deljiva sa 4 a nije sa 100.");
else
  disp("Godina nije prestupna.");
endif

Наредбу switch користимо када више пута проверавамо вредност истог израза:

n = input("Unesite ceo broj: ");
switch(rem(n,4))
case 0
  disp("Broj je deljiv sa 4.");
case 2
  disp("Broj je paran, ali nije deljiv sa 4.");
otherwise
  disp("Broj je neparan.");
endswitch

Слично другим језицима користимо петље типа for, while и do-until. Инкременталне и декременталне операторе користимо као у програмском језику C, што ћемо видети на примеру одрељивања збира делилаца броја коришћењем различитих врсти петље:

n = input("Unesite broj: ");  
s = 0;
for d = 1:1:n-1
  if rem(n,d) == 0
    s += d;
  endif
endfor
disp(s);
n = input("Unesite broj: ");  
d = 1;
s = 0;
while d < n
  if rem(n,d) == 0
    s += d;
  endif
  d++;
endwhile
disp(s);
n = input("Unesite broj: ");  
d = 1;
s = 0;
do 
  if rem(n,d) == 0
    s += d;
  endif
  d++;
until d >= n
disp(s);

Писање функција

Функција у програмском језику Octave може имати више улазних и више излазних променљивих. Дефинише се у посебној скрипти истог назива као у примеру:

[minmax.m]
function [min_xy, max_xy] = minmax(x,y)
  min_xy = min(x,y);
  max_xy = max(x,y);
endfunction
>> [a,b] = minmax(4,3)
a =  3
b =  4

Једноставније функције се могу дефинисати у једној линији коришћењем функције inline:

>> f = inline("x + exp(-y)")
f = f(x, y) = x + exp(-y)
>> f(0,-1)
ans =  2.7183