155GIT1 / 5. cvičení: Porovnání verzí

Z GeoWikiCZ
mBez shrnutí editace
 
(Není zobrazeno 5 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
{{Geoinformatika}}
{{Geoinformatika}}
{{Cvičení|155GIT1|5|Uživatelské funkce}}
{{Cvičení|155GIT1|5|1. test}}


== Náplň cvičení ==
== Náplň ==


# uživatelské funkce
; Zadání testu
# chybová hlášení, nápověda k funkci
* https://moodle-vyuka.cvut.cz/course/view.php?id=10915
# drobné smíšené ú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 <tt>.m</tt>. Název souboru musí odpovídat názvu funkce! Klíčové slovo <tt>function</tt> musí být na prvním řádku souboru.
<source lang=octave>
function [min_x, max_x, mean_x] = stat(x)
    min_x = min(min(x));
    max_x = max(max(x));
    mean_x = mean(x(:));    % stejny vysledek jako mean_x = mean(mean(x))
end
</source>
'''Příklad volání'''
<source lang=octave>
data = rand(5)
[mi, ma, mn] = stat(data);
fprintf('min  = %.3f\nmax  = %.3f\nmean = %.3f\n', mi, ma, mn)
</source>
=== Chybová hlášení, nápověda ===
<source lang=octave>
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 imaginarni cisla.')
    end
    min_x = min(min(x));
    max_x = max(max(x));
    mean_x = mean(x(:));
end
</source>
Vyvolání nápovědy k uživatelské funkci:
                         
<source lang=octave>
help stat
</source>
Volání funkce (chybná vstupní data):
<source lang=octave>
data1 = [data, 5+2i * ones(5,1)]
[mi, ma, mn] = stat(data1)
</source>
=== Příkaz return ===
* je-li v běhu funkce vykonán příkaz <tt>return</tt>, 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 výpočet nekonečné řady do zadané přesnosti (příklad iterativního výpočtu)'''
např. výpočet funkce arctg(), viz {{wikipedia|Taylorova řada}}:
<source lang=octave>
function [arctgx] = arctg(x,mez)
% vypocet funkce arctg rozvojem v radu do zadane presnosti
% IN:  x      ... vektor argumentu funkce
%      mez    ... zadana presnost vypoctu
% OUT: arctgx ... vektor vypoctenych uhlu z intervalu <-pi/2,pi/2>
if any(x > 1) | any(x < -1)
    error('arctg: Vstupni hodnoty musi byt z intervalu <-1,1>.')
end
% vypocet pro kazdy prvek daneho vektoru samostatne
for i=1:length(x)
    % start iterace pro i-ty vstupni prvek
    y0 = 100; % vkladam fiktivni hodnotu, kterou x na vstupu nikdy nemuze nabyt
    % 1.iterace
    n = 1;
    y = x(i);
    while  abs( y-y0 ) > mez
        % n-ta iterace
        n = n+1;
        y0 = y;
        y = y0 + (-1)^(n+1) *  x(i)^(2*n-1)  / (2*n-1);
    end
    % ulozeni vypoctene hodnoty do vystupni promenne
    arctgx(i) = y;
    fprintf('Pocet iteraci vypoctu: %d\n',n)
end
</source>
'''Funkce pro načtení neformátovaných dat po řádcích'''
např. záměna čárky za tečku:
<source lang=octave>
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)];  % jmeno noveho souboru
vystup = fopen(filenew,'w');
konec = 0;  % indentifikator konce souboru
while konec==0
    radek = fgets(vstup);  % fgets() nacte 1 radek souboru (se znakem \n)
    for i=1:length(radek)
        if radek(i) == ','
            radek(i) = '.';
        end
    end
    fprintf(vystup,'%s',radek);
    konec = feof(vstup);  % feof() vrati pro konec souboru hodnotu 1, jinak vraci hodnotu 0
end
fclose all;
fprintf('Data ulozena do souboru %s\n',filenew);
</source>
datový soubor [http://geo102.fsv.cvut.cz/vyuka/155GIT1/data/carky.txt carky.txt] <!--[ftp://athena.fsv.cvut.cz/ZFG/GIT1/carky.txt carky.txt]--> ke stažení
Volání funkce:
<source lang=octave>
teckazacarku('carky.txt')
</source>


== Úlohy ==
== Úlohy ==
* [[155GIT1 / 5. cvičení / Příklady|5. cvičení - příklady]]
* [[155GIT1 / 5. cvičení / Příklady|5. cvičení - příklady]]
-->
<!-- -->

Aktuální verze z 7. 2. 2024, 15:53