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

Z GeoWikiCZ
mBez shrnutí editace
mBez shrnutí editace
Řádek 7: Řádek 7:
# uživatelské funkce
# uživatelské funkce
# chybová hlášení
# chybová hlášení
# opakování, ukázky drobných smíšených úloh
# drobné smíšené úlohy


== Ukázky ==
== Ukázky ==
Řádek 17: Řádek 17:
  function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn)
  function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn)
   
   
  end
  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!
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!
Řádek 23: Řádek 23:
<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(x);
     max_x = max(x);
     max_x = max(x);
     mean_x = mean(x);
     mean_x = mean(x);
end
end
</source>
</source>
Řádek 32: Řádek 34:


<source lang=octave>
<source lang=octave>
[mi, ma, mn] = stat(rand(1, 100))
data = rand(10,1)
fprintf('min  = %.3f\nmax  = %.3f\nmean = %.3f\n', [mi, ma, mn])
[mi, ma, mn] = stat(data)
fprintf('min  = %.3f\nmax  = %.3f\nmean = %.3f\n', mi, ma, mn)
</source>
</source>


=== Chybová hlášení ===
=== Chybová hlášení ===
<source lang=octave>
function [min_x, max_x, mean_x] = stat(x)
% vypocet minimalni, maximalni a prumerne hodnoty vektoru
    if any(imag(x)) > 0
        error('stat: Vstupni vektor obsahuje imaginarni cisla.')
    end
    min_x = min(x);
    max_x = max(x);
    mean_x = mean(x);
end
</source>
Vyvolání nápovědy k funkci:
<source lang=octave>
help stat
</source>
Volání funkce:
<source lang=octave>
data1 = [data; 5+2i; 4-3i]
[mi, ma, mn] = stat(data1)
</source>


=== Drobné úlohy ===
=== Drobné úlohy ===


Funkce pro načtení neformátovaných dat po řádcích; zamění čárky za tečky:
Funkce pro výpočet nekonečné řady do zadané přesnosti
datový soubor [ftp://athena.fsv.cvut.cz/ZFG/GIT1/carky.txt carky.txt] ke stažení
 
např. výpočet funkce arctg():
 
<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>
<source lang=octave>
function teckazacarku(file)
function teckazacarku(file)
(bude doplneno)
 
    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
    end
   
    fclose all;
    fprintf('Data ulozena do souboru %s\n',filenew);
 
end
end
</source>
Volání funkce:
datový soubor [ftp://athena.fsv.cvut.cz/ZFG/GIT1/carky.txt carky.txt] ke stažení
<source lang=octave>
teckazacarku('carky.txt')
</source>
</source>


Řádek 52: Řádek 144:
== Úlohy ==
== Úlohy ==


* http://peso.fsv.cvut.cz/vyuka/git1/parcely/parcely.html
* budou doplněny záhy

Verze z 6. 4. 2016, 08:51

Uživatelské funkce

Náplň cvičení

  1. (z 6.cvičení) složené podmínky
  2. uživatelské funkce
  3. chybová hlášení
  4. 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 .m. Název souboru musí odpovídat názvu funkce!

function [min_x, max_x, mean_x] = stat(x)

    min_x = min(x);
    max_x = max(x);
    mean_x = mean(x);

end

Příklad volání:

data = rand(10,1)
[mi, ma, mn] = stat(data)
fprintf('min  = %.3f\nmax  = %.3f\nmean = %.3f\n', mi, ma, mn)

Chybová hlášení

function [min_x, max_x, mean_x] = stat(x)
% vypocet minimalni, maximalni a prumerne hodnoty vektoru

    if any(imag(x)) > 0
        error('stat: Vstupni vektor obsahuje imaginarni cisla.')
    end
    min_x = min(x);
    max_x = max(x);
    mean_x = mean(x);

end

Vyvolání nápovědy k funkci:

help stat

Volání funkce:

data1 = [data; 5+2i; 4-3i]
[mi, ma, mn] = stat(data1)

Drobné úlohy

Funkce pro výpočet nekonečné řady do zadané přesnosti

např. výpočet funkce arctg():

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


Funkce pro načtení neformátovaných dat po řádcích

např: záměna čárky za tečku:

function teckazacarku(file)

    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
    end
    
    fclose all;
    fprintf('Data ulozena do souboru %s\n',filenew);

end

Volání funkce: datový soubor carky.txt ke stažení

teckazacarku('carky.txt')


Úlohy

  • budou doplněny záhy