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;
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.
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
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:10 | m=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; |
end | plot(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
% 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)
>> 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)
% 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(:)
% 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)
>> 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'. |
- prečítané 3739x