Základy programování - řízení běhu programu, skripty, proměnné

Cíle

Cílem tohoto semináře je seznámit se základními konstrukcemi pro řízení běhu programu, vytvářením skriptů a s tím souvisejícími tématy.

Proměnné dle rozsahu platnosti

V Matlabu existují tři druhy promměných dle rozsahu platnosti: lokální, globální a persistentní.

Pokud u přeměnné nezadáme jinak, pak je proměnná automaticky lokální. Lokální proměnné fungují podobně jako v jiných jazicích.

Globální proměnné je potřeba deklarovat. K tomu slouží klíčové slovo global. Při první deklaraci je hodnota globální proměnné nastavena na práznou 0x0 matici. Opětovná deklarace globální proměnné samozřejmě hodnotu nemění. Více o globální proměnných je zde.

Posledním typem jsou persistentní proměnné. Ty se chovají podobně jako lokální ale stím rozdílem, že si pamatují svou hodnotu i do dalších volání funkce. Pomocí těchto proměnných lze například naprogramovat čítač. K deklaraci persistentních proměnných se používá klíčové slovo persistent. Více o persistentních proměnných je zde.

Datové typy

Seznam datových typů je uveden zde. Výchozí datový typ matice je double (Double-Precision Floating Point).

Větvení - if, elseif, else

Syntax:

if expression
    statements
elseif expression
    statements
else
    statements
end

přičemž elseif a else jsou nepovinné.

A = ones(2,3);
B = rand(3,4,5);

if isequal(size(A),size(B))
    C = [A; B];
else
    disp('A and B are not the same size.')
    C = [];
end

Další příklady naleznete zde.

Větvení - switch, case, otherwise

Syntax:

switch switch_expression
  case case_expression
        statements
  case case_expression
        statements
  otherwise
        statements
end

Q:  Kdy se používá switch?
A:  Když potřebujeme otestovat pouze konečný počet možností. Kód je pak přehlednější.

Příklady jsou zde.

Cykly - for

Syntax:

for index = values
    statements
end

Cyklus indexuje po sloupcích, tedy mezi následujícími cykly je rozdíl:

l = 1
for v = [1 5 8 17]
    disp(v)
l = l + 1
end

l = 1
for v = [1; 5; 8; 17]
    disp(v)
l = l + 1
end

Vyzkoušejte. Další příklady jsou zde.

Cykly - while

Syntax:

while expression
    statements
end

Příklady jsou zde.

Pro cykly jsou k dispozici příkazy continue a break.

Ošetření chyb: try a catch

Try a catch slouží k ošetřování vyjímek.

Syntax:

try
    statements
catch exception
    statements
end

Příklad:

try
    a = notaFunction(5,6);
catch
    warning('Problem using function. Assigning a value of 0.');
    a = 0;
end

Další příklady jsou zde.

M-soubory

M-soubor je textový soubor s příponou .m, který obsahuje zdrojový kód v jazyku Matlab. Matlab obsahuje zabudovaný editor M-souborů, ve kterém lze upravovat a ladit kód. Pro editaci slouží příkaz edit. Příkaz edit file_name tedy otevře editor a v něm zadaný soubor s názvem file_name.

Automaticky se prohledává aktuální adresář. Pokud je soubor umístěn v jiné složce, je třeba přidat tuto cložku do proměnné path (více help path přímo v Matlabu).

Skripty

Skripty jsou jedním z typů programu v Matlabu. Neobsahují žádné vstupní ani výstupní parametry, mohou pracovat pouze s hlavní pamětí. M-soubor obsahující skript by měl začínat komentářem.

Příklad skriptu. Příkazem edit mysphere_surface vytvořte M-soubor s názvem mysphere_surface a vložte do něj následující kód:

% ------------------------------------------------------------------------%
% ---------- The Surface of the sphere -----------------------------------%
%-------------------------------------------------------------------------%

r=1;
u=linspace(0,2*pi,100);
v=linspace(0,2*pi,100);
[u,v]=meshgrid(u,v);

x=r.*sin(v)*cos(u);
y=r.*sin(v)*sin(u);
z=r.*cos(v);

figure(1)
m = mesh(x,y,z);
m.FaceColor = 'flat';

xlabel('X','fontSize',10);
ylabel('Y','fontSize',10);
zlabel('Z','fontsize',10);
title('Sphere','fontsize',10)

%-------------------------------------------------------------------------%

Soubor uložte a zavřete. Skript pak lze spustit zadáním jeho názvu, tedy mysphere_surface.

Více informací ke skriptům naleznete zde.

Vstup a výstup

Po zadání vstupu slouží funkce input.

Načtení čísla:

mynumber = input('Enter the number: ');

Načtení textového řetezce:

mystr = input('Enter a string: ', 's');

Výpis lze provést pomocí funkcí disp, display nebo printf.

Vícerozměrná pole

Matlab není omezen jen na matice, umožňuje pracovat i s vícerozměrnými poli. Více v dokumentaci zde.