Писање скрипти
Један програм у програмском језика 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