155GIT1 / 7. cvičení: Porovnání verzí
mBez shrnutí editace |
|||
(Není zobrazeno 15 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 2: | Řádek 2: | ||
{{Cvičení|155GIT1|7|Uživatelské funkce}} | {{Cvičení|155GIT1|7|Uživatelské funkce}} | ||
== Náplň | == Náplň == | ||
# uživatelské funkce | # uživatelské funkce | ||
# chybová hlášení, nápověda k funkci | # chybová hlášení, nápověda k funkci | ||
# drobné | # drobné úlohy | ||
== Ukázky == | == Ukázky == | ||
Řádek 12: | Řádek 12: | ||
=== Uživatelské funkce === | === Uživatelské funkce === | ||
Syntax | '''Syntax''' | ||
function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn) | function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn) | ||
Řádek 21: | Řádek 21: | ||
<source lang=octave> | <source lang=octave> | ||
function [min_x, max_x, mean_x] = stat(x) | function [min_x, max_x, mean_x] = stat(x) | ||
min_x = min(x); | min_x = min(min(x)); | ||
max_x = max(x); | max_x = max(max(x)); | ||
mean_x = mean(x); | mean_x = mean(x(:)); % stejný výsledek jako mean_x = mean(mean(x)) | ||
end | end | ||
</source> | </source> | ||
Příklad volání | '''Příklad volání''' | ||
<source lang=octave> | <source lang=octave> | ||
data = rand( | data = rand(5) | ||
[mi, ma, mn] = stat(data) | [mi, ma, mn] = stat(data); | ||
fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', mi, ma, mn) | fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', mi, ma, mn) | ||
</source> | </source> | ||
Řádek 41: | Řádek 41: | ||
<source lang=octave> | <source lang=octave> | ||
function [min_x, max_x, mean_x] = stat(x) | function [min_x, max_x, mean_x] = stat(x) | ||
% vypocet minimalni, maximalni a prumerne hodnoty | % vypocet minimalni, maximalni a prumerne hodnoty matice | ||
if any(any( imag(x)~=0 )) | |||
error('stat: Vstupni matice obsahuje komplexni cisla.') | |||
end | |||
min_x = min(min(x)); | |||
max_x = max(max(x)); | |||
mean_x = mean(x(:)); | |||
end | end | ||
</source> | </source> | ||
Vyvolání nápovědy k uživatelské funkci: | Vyvolání nápovědy k uživatelské funkci: | ||
<source lang=octave> | <source lang=octave> | ||
help stat | help stat | ||
</source> | </source> | ||
Volání funkce (chybná vstupní data): | Volání funkce (chybná vstupní data): | ||
<source lang=octave> | <source lang=octave> | ||
data1 = [data | data1 = [data, 5+2i * ones(5,1)] | ||
[mi, ma, mn] = stat(data1) | [mi, ma, mn] = stat(data1) | ||
</source> | </source> | ||
Řádek 71: | Řádek 71: | ||
=== Drobné úlohy === | === Drobné úlohy === | ||
'''Funkce pro načtení neformátovaných dat po řádcích''' | '''Funkce pro načtení neformátovaných dat po řádcích''' | ||
Řádek 111: | Řádek 77: | ||
<source lang=octave> | <source lang=octave> | ||
function teckazacarku(file) | function teckazacarku(file) | ||
% vyhleda vsechny carky v souboru a zameni je za tecku | % vyhleda vsechny carky v souboru a zameni je za tecku | ||
% IN: file ... jmeno vstupniho souboru (textovy retezec) | % IN: file ... jmeno vstupniho souboru (textovy retezec) | ||
if ischar(file) == 0 | |||
error('Jmeno vstupniho souboru musi byt textovy retezec.'); | |||
end | |||
vstup = fopen(file,'r'); | |||
filenew = [file(1:end-4), '_upr', file(end-3:end)]; % jméno nového souboru | |||
filenew = [file(1:end-4), '_upr', file(end-3:end)]; % | vystup = fopen(filenew,'w'); | ||
vystup = fopen(filenew,'w'); | |||
konec = 0; % | konec = 0; % indentifikátor konce souboru | ||
while konec==0 | while konec==0 | ||
radek = fgets(vstup); % fgets() načte 1 řádek souboru (se znakem \n) | |||
for i=1:length(radek) | |||
if radek(i) == ',' | |||
radek(i) = '.'; | |||
end | |||
end | |||
fprintf(vystup,'%s',radek); | |||
konec = feof(vstup); % feof() vrátí pro konec souboru hodnotu 1, jinak vrací hodnotu 0 | |||
end | end | ||
fclose all; | fclose all; | ||
fprintf('Data ulozena do souboru %s\n',filenew); | fprintf('Data ulozena do souboru %s\n',filenew); | ||
</source> | </source> | ||
datový soubor [ | datový soubor [http://athena.fsv.cvut.cz:8000/GIT1/cv7/carky.txt carky.txt] ke stažení | ||
Volání funkce: | Volání funkce: | ||
<source lang=octave> | <source lang=octave> | ||
teckazacarku('carky.txt') | teckazacarku('carky.txt') | ||
</source> | </source> | ||
Řádek 150: | Řádek 117: | ||
* [[155GIT1 / 7. cvičení / Příklady|7. cvičení - příklady]] | * [[155GIT1 / 7. cvičení / Příklady|7. cvičení - příklady]] | ||
<!-- | |||
{{Cvičení|155GIT1|7|Test Matlab/Octave}} | |||
; Zadání testu | |||
* https://moodle-vyuka.cvut.cz/course/view.php?id=5130 | |||
; Výsledky testu | |||
* [https://docs.google.com/spreadsheets/d/1We6CEro7T5q766HukoxxTLYYTlvEdsV0i1B1VcHUD6s/edit?usp=sharing souhrnné výsledky] | |||
--> | |||
<!-- --> |
Aktuální verze z 13. 4. 2023, 03:59
Uživatelské funkce
Náplň
- uživatelské funkce
- chybová hlášení, nápověda k funkci
- drobné úlohy
Ukázky
Uživatelské funkce
Syntax
function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn) end % end neni povinne
Každá funkce musí být uložena ve vlastním souboru s příponou .m. Název souboru musí odpovídat názvu funkce! Klíčové slovo function musí být na prvním řádku souboru.
function [min_x, max_x, mean_x] = stat(x)
min_x = min(min(x));
max_x = max(max(x));
mean_x = mean(x(:)); % stejný výsledek jako mean_x = mean(mean(x))
end
Příklad volání
data = rand(5)
[mi, ma, mn] = stat(data);
fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', mi, ma, mn)
Chybová hlášení, nápověda
function [min_x, max_x, mean_x] = stat(x)
% vypocet minimalni, maximalni a prumerne hodnoty matice
if any(any( imag(x)~=0 ))
error('stat: Vstupni matice obsahuje komplexni cisla.')
end
min_x = min(min(x));
max_x = max(max(x));
mean_x = mean(x(:));
end
Vyvolání nápovědy k uživatelské funkci:
help stat
Volání funkce (chybná vstupní data):
data1 = [data, 5+2i * ones(5,1)]
[mi, ma, mn] = stat(data1)
Příkaz return
- je-li v běhu funkce vykonán příkaz return, je okamžitě činnost funkce ukončena (bez vykonání evtl.dalších příkazů) a na pozici jejího volání jsou vráceny aktuálně vypočtené hodnoty výstupních parametrů funkce
Drobné úlohy
Funkce pro načtení neformátovaných dat po řádcích
např. záměna čárky za tečku:
function teckazacarku(file)
% vyhleda vsechny carky v souboru a zameni je za tecku
% IN: file ... jmeno vstupniho souboru (textovy retezec)
if ischar(file) == 0
error('Jmeno vstupniho souboru musi byt textovy retezec.');
end
vstup = fopen(file,'r');
filenew = [file(1:end-4), '_upr', file(end-3:end)]; % jméno nového souboru
vystup = fopen(filenew,'w');
konec = 0; % indentifikátor konce souboru
while konec==0
radek = fgets(vstup); % fgets() načte 1 řádek souboru (se znakem \n)
for i=1:length(radek)
if radek(i) == ','
radek(i) = '.';
end
end
fprintf(vystup,'%s',radek);
konec = feof(vstup); % feof() vrátí pro konec souboru hodnotu 1, jinak vrací hodnotu 0
end
fclose all;
fprintf('Data ulozena do souboru %s\n',filenew);
datový soubor carky.txt ke stažení
Volání funkce:
teckazacarku('carky.txt')