M-súbory



    Obsah 8. kapitoly


    8. M-súbory
    8.1. Typy m-súborov
    8.2. Tvorba skriptov
    8.2.1 Používanie bežných programátorských povelov (for, if, switch, case, while, break)
    8.3. Práca s funkciami
    8.4. Štruktúra programovacieho jazyka



    8. M-súbory




    8.1. Typy m-súborov

    M-súbory:
  • sú to súbory vytvorené zabudovaným editorom systému FreeMat, kompatibilné s programom MATLAB, majúce príponu *.m
  • obsahujú zoznam používateľom zapísaných príkazov a povelov systému FreeMat
  • tvoria teda zdrojový kód, s ktorým FreeMat vie pracovať
    Dôvody tvorby m-súborov:
  • uloženie postupnosti príkazov a povelov na disk
  • možnosť spustiť naraz celý m-súbor z prostredia FreeMat
  • spustenie jedného alebo viacej m-súborov z iného m-súboru
  • rozšírené možnosti programovania
    Typy m-súborov:
  • skripty
  • funkcie



    8.2. Tvorba skriptov



    8.2.1 Používanie bežných programátorských povelov (for, if, switch, case, while, break)

    Pre väčšiu prehľadnosť budú inicializačné a ukončovacie konštanty uvedené modrou farbou. Jadrá cyklov budú uvádzané v klasickej čiernej farbe.


    Cyklus FOR
  • opakuje jadro cyklu špecifikovaný počet opakovaní

for variable = expr- inicializácia cyklu počiatočnou a konečnou podmienkou
statements- telo cyklu, príkazy, ktoré sa budú opakovať
end- ukončenie cyklu


    Cyklus WHILE
  • opakuje jadro cyklu pokiaľ platí podmienka za WHILE

while expr- inicializácia cyklu podmienkou expr
statements- telo cyklu, príkazy ktoré sa budú opakovať
end- ukončenie cyklu


    Príkaz BREAK

break- používame na prerušenie aktívne bežiacej slučky programu


    Podmienkový príkaz IF
  • ak platí výraz v podmienke za IF, vykoná sa príkaz (príkazy), je možné použitie vnorenej podmienky ELSEIF, IF - ELSE má funkciu typu „buď - alebo“.

if expr1- inicializácia podmienkou expr1
statements- príkazy na vykonanie ak je expr1 platná (pravdivá)
elseif expr2- vnorená podmienka expr2
statements- príkazy na vykonanie ak je expr1 platná (pravdivá)
else- člen uvádzajúci príkazy pri neplatnosti expr1 a expr2
statements- príkazy na vykonanie ak je expr1 aj expr2 neplatná
end- koniec príkazu


    Prepínací príkaz SWITCH
  • prepína medzi jednotlivými možnými prípadmi (možnými vetvami) programu podľa hodnôt prepínacieho výrazu

switch switch_expr- inicializácia definovaním výrazu switch_expr (premenná, ktorá sa bude porovnávať)
case case_expr,- definovanie výrazu pre porovnanie
statement, ..., statement- príkazy, ktoré sa uskutočnia, ak case_expr = = switch_expr
case {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement- je možné definovať príkazy pre skupinu prípadov
...
otherwise,- uvedenie všeobecnej vetvy, ktorá je platná ak nie je platná žiadna z vetiev CASE
statement, ..., statement- príkazy všeobecnej vetvy
end- koniec prepínača


    Príklad 1
    Vytvorte mocniny prvých desiatich celých čísel.


    Riešenie
    Napíšte a spustite nasledujúci M-file skript:
    for m=1:10
    x(m)=m^2;
    end;


    Príklad 2
    Nájdite pre celé číslo 0 < a ≤ 10, hodnoty C, definované nasledovne:
C=ab pre a>5 C=(2/3)ab pre a ≤ 5 ak b = 15.


    Riešenie
    Napíšte a spustite nasledujúci M-file skript:
    for a=1:10
    b=15;
       if a>5
          C(a)=a*b;
       else
          C(a)=(a*b)*(3/2);
       end
    end


    Príklad 3
    Nakreslite dve krivky y1 = 2x + 3 a y2 = 4x + 3 do toho istého grafu.


    Riešenie
    Napíšte a spustite nasledujúci M-file script:

for m=1:10m=1:10;
x(m)=m;x=m;
y1(m)=2*m+3;alebo lepšie:y1=2*m+3;
y2(m)=4*m+3;                     y2=4*m+3;
endplot(x,y1,x,y2)
plot(x,y1,x,y2)



    8.3. Práca s funkciami

    Funkcia na rozdiel od scriptu môže obsahovať vstupné parametre. Rozdiel je v povinnom kľúčovom slove function za ktorým nasledujú hranaté zátvorky, do ktorých uvádzame výstupné premenné, znak rovnosti, názov funkcie a guľaté zátvorky, do ktorých uvádzame vstupné parametre, teda vstupné premenné. Ďalej sú uvedené príklady zápisu funkcií. Je nutné si uvedomiť, že ak tvoríme skript funkcie, musíme ho pomenovať rovnako ako funkciu, aby FreeMat vedel túto funkciu volať.


    Zdrojový kód skriptu:
    % funkcia s jedným vstupným parametrom
    % Vytvorené 1.4.2006
    % Autor xy
    % ----------------------------------------
    function Fcia1par(vstpar)
       a11=vstpar
       b22=a11^2
       whos


    Následne vyskúšajte v Command Window príkazy:
    >> Fcia1par(100)
    >> par=20;
    >> Fcia1par(par)


    Zdrojový kód skriptu:
    % funkcia Fcia2par s dvomi vstupnými parametrami
    % Vytvorené 1.4.2006
    % Autor xy
    % ----------------------------------------
    function Fcia2par(vstpar1,vstpar2)
       prepona=sqrt(vstpar1^2+vstpar2^2)


    Zdrojový kód skriptu:
    % funkcia Fciavarargin s premenným počtom vstupných parametrov
    % obsahuje premennú varargin – uloženie vložených vstupných parametrov
    % Vytvorené 1.4.2006
    % Autor xy
    % ----------------------------------------
    function Fciavarargin(varargin)
       S=varargin(:)


    Následne vyskúšajte v Command Window príkazy:
    >> Fcia2par(10,10)
    >> Fciavarargin(1,10)
    >> Fciavarargin(1,10,2+3i)



    8.4. – Štruktúra programovacieho jazyka

    V nasledovnom texte sú uvedené len niektoré, často používané názvy príkazov a ich stručný význam. Nemá zmysel uvádzať tu všetky príkazy, nakoľko monoho z nich má niekedy tri a viac podôb pri volaní, veľa možností vstupných parametrov. Všetky príkazy sa dajú nájsť aj s potrebnými informáciami o syntaxe v dokumentácii FreeMat-u na stránke: http://freemat.sourceforge.net/FreeMat-4.0.pdf.


    Kontrola toku:

if- Podmienečne vykonáva príkazy.
else- IF podmienka príkazu.
elseif- IF podmienka príkazu.
end- Ukončenie FOR, WHILE, SWITCH, TRY a IF príkazov.
for- Opakovanie príkazov určitý opočet opakovaní.
while- Opakovanie príkazov ak platí podmienka za while.
break- Ukončenie slučiek WHILE alebo FOR.
continue- Posunie na ďalšiu iteráciu FOR alebo WHILE slučky.
switch- Prepínanie vetiev programu pomocou výrazu.
case- Prípad pre prepínanie v SWITCH.
otherwise- Všeobecná vetva SWITCH.
try- Začne blok “skús”.
catch- Začne blok “chytaj”.
return- Návrat ku volajúcej funkcii (nadradenej, ktorá volala danú f-ciu)
error- Zobraziť chybové hlásenie a ukončiť funkciu.
rethrow- Znovu zobraziť chybové hlásenie a ukončiť funkciu.


    Skripty, funkcie a premenné:

function- Pridať novú funkciu.
global- Definovať globálnu premennú.
persistent- Definovať konštantnú premennú.
mfilename- Meno práve vykonávaného (používaného) m-súboru.
exist- Kontrola či premenné alebo funkcie existujú.


    Vyhodnotenie a vykonávanie:

eval- Vykonanie reťazca s FreeMat výrazom.
feval- Vykonanie funkcie špecifikovanej reťazcom.
evalin- Vykonanie reťazca s FreeMat výrazom na definovanom pracovnom priestore.
builtin- Vykonať vstavanú funkciu, pričom funkcie definované používateľom s rovnakým názvom ako vstavaná sú ignorované
assignin- Priradiť hodnotu premennej na definovanom pracovnom priestore./TD>


    Zaobchádzanie s argumentmi:

nargin- Počet vstupných argumentov funkcie.
nargout- Počet výstupných argumentov funkcie.
varargin- Zoznam premenných s variabilnou veľkosťou – používané pri volaní funkcií s premenným počtom vstupných parametrov.
varargout- Ako varargin, ale týka sa výstupných parametrov.


    Zobrazenie správ:

warning- Zobraziť varovnú správu.
lasterr- Posledná chybová správa.
disp- Zobraziť premennú alebo výraz.


    Formátovanie a zápis, zobrazenie:

printf- Formátovaný výpis na obrazovku v štýle jazyka C.
fprintf- Formátovaný zápis do súboru v štýle jazyka C.
sprintf- Formátovaný zápis do reťazca v štýle jazyka C.
fscanf- Formátovaný vstup zo súboru v štýle jazyka C.
sscanf- Formátovaný vstup z reťazca v štýle jazyka C.


    Interaktívny vstup:

input- Dotaz na vstup užívateľa.
keyboard- Aktivácia (prebudenie) klávesnice v špecifikovanom okamžiku, používané pri ladení skriptov, návrat príkazom return.
pause- Vykonávanie skriptu je prerušené, kým používateľ nestlačí nejakú klávesu, je možné definovať aj pozastavenie v milisekundách.
uicontrol- Vytvorenie ovládacieho prvku užívateľského rozhrania a
jeho priradenie aktívnemu oknu figure. Funkcia má veľa parametrov, je možné definovať tlačidlo - 'pushbutton',prepínač - 'toggle', kruhové zaškrtávacie políčko - 'radiobutton', štvorcové zaškrtávacie políčko - 'checkbox', zadávacie pole - 'edit', textové pole - 'text', posúvač - 'slider', rám - 'frame', rolovací zoznam - 'listbox', kontextové menu - 'popupmenu'.