echo on
more on
format compact
clc
%======================================================================
% 7.1. M-SOUBORY
%----------------------------------------------------------------------
% Charakteristika m-souboru (m-file)
% - ASCII soubor "jmeno.m": pripona .m je povinna.
% - jmeno=nazev noveho povelu, jehoz vyvolanim se provedou prikazy
%   uvnitr m-souboru "jmeno.m".
% - Pripousti se rekurzivni volani sama sebe uvnitr tela m-souboru.
%
% Existuji 2 zakladni typy m-souboru:
% 1) Davkove m-soubory (tzv. script m-file)
%    --------------------------------------
%    Struktura:
%    *********************************************************************
%    % 1.radek napovedy pro help   \
%    % 2.radek napovedy             |
%      .                            |
%      .                             > uvodni poznamky vypisovane
%      .                            |  pri help jmeno
%    % predposledni radek napovedy  |
%    % posledni radek napovedy     /
%      prikaz_1;    % poznamka     \
%      prikaz_2;                    |
%      % poznamka                   |  vlastni vykonne prikazy libovolne
%         .                          > zakoncene nebo prolozene poznamkami
%         .                         |  komentujicimi program
%         .                         |
%      prikaz_n;                   /
%    *********************************************************************
%    Pouziti: Nahrazuji zdlouhave provadeni urcite sekvence povelu z
%             prikazove radky.
%             Tedy efekt je stejny, jako kdyby vsechny prikazy
%             davkoveho m-souboru byly provedeny primo z prikazove radky.
%             Zejmena vsechny promenne vznikle pri behu davky jsou
%             po jejim provedeni pristupne z prikazove radky.
%    Prikladem davkovych souboru jsou napriklad demonstracni soubory
%    davka1.m,davka2.m,...
%    Napr. pro tento soubor, ktery je prave spusten:
   help davka3;     % Napoveda
keyboard;
clc;
%----------------------------------------------------------------------
% 2) Funkcni m-soubory (tzv. function m-file)
%    ----------------------------------------
%    Struktura:
%    *********************************************************************
%    function [y_1,y_2,...,y_m]=jmeno(x_1,x_2,...,x_n)
%    % 1.radek napovedy pro help   \
%    % 2.radek napovedy             |
%      .                            |
%      .                             > uvodni poznamky vypisovane
%      .                            |  pri help jmeno
%    % predposledni radek napovedy  |
%    % posledni radek napoved      /
%      prikaz_1;    % poznama      \
%      prikaz_2;                    |
%      % poznamka                   |  vlastni vykonne prikazy libovolne
%         .                          > zakoncene nebo prolozene poznamkami
%         .                         |  komentujicimi program
%         .                         |
%      prikaz_n;                   /
%    *********************************************************************
%    Pouziti: - Chovaji se jako funkcni procedura s moznosti prebirat
%               vstupni  parametry  x_1,x_2,...,x_n a vracet
%               vystupni parametry  y_1,y_2,...,y_m.
%             - Od davkoveho souboru se formalne lisi pouze uvodnim
%               deklaracnim radkem pridanym pred uvodni napovedu.
%             - Vsechny promenne uvnitr procedury jsou v ni pouze
%               LOKALNI, tj. pri volani funkce se automaticky alokuji a
%               po provedeni naopak zaniknou (jsou automaticky
%               odalokovany z pameti). Vyjimku tvori pouze tzv. globalni
%               promenne uvedene v seznamu prikazu global, ktere mohou
%               byt sdileny vsude, kde jsou takto deklarovany pod stejnymi
%               jmeny, tj. v jinych m-souborech nebo z prikazove radky.
%               (napr. global x y z  deklaruje promenne x,y a z jako
%                globalni)
%             - Po prvem spusteni je funkcni m-soubor predkompilovan a
%               ulozen v pameti, coz urychluje jeho provadeni pri dalsim
%               volani.
%               Prikazem clear lze tuto pamet zabiranou predkompilaci
%               uvolnit:
%               clear jmeno1 jmeno2 ... uvolni vyjmenovane funkce
%               clear functions     ... uvolni vsechny funkce
%               clear all           ... uvolni promenne i funkce
%               clear global        ... odalokuje pouze vsechny globalni
%                                       promenne
%    Skutecne vstupni a vystupni parametry nemusi byt pri volani zadany
%    vsechny, ale vzdy je dovoleno vynechat pouze souvisly koncovy usek.
%    Vsechny vystupni parametry jsou na pocatku funkce automaticky
%    deklarovany jako prazdne matice. Na vystup se vraci posledni hodnota
%    jim prirazena za behu procedury, resp. [], pokud nebylo prirazeno nic.
%    Napr. povolene volani je
%    [v_1,v_2] = jmeno(a_1,a_2,a_3)
%    nebo
%    jmeno(a_1,a_2,a_3) ... = hodnota 1.vystupniho parametru
%
%    Fakticke osetreni korektnosti volani musi zajistit procedura
%    sama, vetsinou v uvodni casti.
%    K tomu slouzi
%    1) preddeklarovane  promenne:
%       nargin =pocet skutecne predanych vstupnich  parametru
%       nargout=pocet skutecne pozadovanych vystupnich parametru
%    2) error(t) ... je-li t neprazdny textovy retezec, pak
%                    provadeni procedury se ukonci a text t se
%                    vypise jako chybove hlaseni
%       error('') nebo error([]) ... neprovede nic
%    3) t=nargchk(n1,n2,n) ... kontrola, zda n1<=n<=n2
%       t=[]                          ... kdyz ano
%       t='Not enough input arguments'... kdyz n<n1
%       t='Too many input arguments  '... kdyz n>n2
%       Typicke pouziti jako prvy vykonny radek funkce, napr.:
%       error(nargchk(2,3,nargin)) ... kontrola, zda funkce byla volana
%                                      s alespon dvema povinnymi a
%                                      nejvyse tremi deklarovanymi parametry
%    4) Prikazy vetveni if-then-else-elseif-end popsane v dalsi
%       casti, kterymi testujeme dalsi podminky, napr. zda matice je
%       ctvercova.
%    5) Prikaz return ... legalni predcasne ukonceni funkce jeste pred
%                         dosazenim jejiho konce, kdy je ukoncena automaticky
%    6) Za nepovinne parametry dosadime vhodne implicitni hodnoty.
%       Doporucuje se prijmout tuto konvenci:
%       Je-li nepovinny vstupni parametr x_i prazdna matice, procedura
%       za nej dosadi implicitni hodnotu, jako kdyby byl vynechan.
%    Typicka struktura (zejmena uvodni casti) funkce se tedy doporucuje
%    v nasledujicim tvaru:
  type program
pause;
%----------------------------------------------------------------------
  help program
keyboard;
clc;
%======================================================================
% 7.2. VETVENI BEHU PROGRAMU
%----------------------------------------------------------------------
% 1) Vetveni programu pomoci konstrukci if-then-else-elseif-end :       %#
%    if-end
%    if-else-end
%    if-elseif-elseif-...-end
%    if-elseif-elseif-...-else-end
%    Napr.
%    if podminka1
%       p1_1;p1_2;...
%    elseif podminka2
%           p2_1;p2_2;...
%        else
%           p3_1;p3_2;...
%    end
%    Vetvici bloky lze do sebe vnorovat, takze predchozi konstrukci
%    lze ekvivalentne zpsat take takto:
%    if podminka1
%       p1_1;p1_2;...
%    else if podminka2
%            p2_1;p2_2;...
%         else
%            p3_1;p3_2;...
%         end
%    end
%
%  Podminka1,2 jsou maticove vyrazy.
%  Podminka je splnena, prave kdyz vsechny prvky maticoveho vyrazu jsou
%  nenulove (=logicke 1).
%
%  2) Vetveni programu pomoci konstrukce switch :                        %#
%     switch v
%        case h_1
%           p1_1; p1_2;...p1_n1;
%        case h_2
%           p2_1; p2_2;...p2_n2;
%               :
%               :
%        case h_m
%           pm_1; pm_2;...pm_nm;
%        otherwise
%           po_1; po_2;...po_no;
%     end;
%     v,h_1,h_2,...,h_m jsou skalarni vyrazy a to budto vsechny numericke
%     nebo vsechny typu retezec. Pocet skupin case muze byt libovolny,
%     skupina otherwise muze chybet. Je-li v==hi pro numericke vyrazy,
%     respektive strcmp(v,hi) pro retezce, provede se posloupnost prikazu
%     pi_1,pi_2,...,pi_ni. Plati-li v==h_j resp. strcmp(v,h_j) pro nekolik
%     vyrazu h_j, provedou se prikazy pi_1,pi_2,...pi_ni pro i nejmensi
%     z takovych j. Pokud je vyraz v==hi resp. strcmp(v,hi) nepravdivy
%     pro vsechna i, provede se skupina prikazu po_1,po_2,...,po_no, 
%     pokud skupina otherwise existuje, nebo se neprovede nic, pokud
%     skupina otherwise neexistuje. Pokud i-tou skupinu zapiseme jako
%
%        case {hi_1,hi_2,...,hi_ki}
%           pi_1; pi_2;...pi_ni;
%
%     pak se prikazy pi_1,pi_2,...pi_ni provedou, pokud je pravdivy alespon
%     jeden z vyrazu v==hi_1,v==hi_2,...,v==hi_ki resp. strcmp(v,hi_1),
%     strcmp(v,hi_2),...,strcmp(v,hi_ki).

  A=round(10*rand(5,5))
  if A<5
     disp('Vsechny prvky A jsou mensi nez 5');
  elseif A<6
     disp('Vsechny prvky A jsou mensi nez 6');
      else
     disp('Alespon jeden prvek A je vetsi nebo roven nez 6');
  end;
  pause;                                               %#
  s='st'                                               %#
  switch  s                                            %# 
     case 'po'                                         %#
        disp('pondeli')                                %#
     case {'ut','st','ct'}                             %#
        disp('utery nebo streda nebo ctvrtek')         %# 
     case 'pa'                                         %#
        disp('patek')                                  %#
     otherwise                                         %# 
        disp('sobota nebo nedele')                     %# 
  end;                                                 %#
  keyboard;
  clc;
%======================================================================
% 7.3. CYKLY V PROGRAMU
%----------------------------------------------------------------------
% 1) Cyklus typu 'for':
% for x=A
%     p_1;p_2;...
% end
% Promenna cyklu nabyva hodnot sloupcu matice A
% 2) Cyklus typu 'while':
% while podminka
%     p_1;p_2;...
% end
%  Podminka je maticovy vyraz
%  Podminka je splnena, prave kdyz vsechny prvky maticoveho vyrazu jsou
%  nenulove (=logicke 1).
%  Z cyklu lze predcasne vyskocit za prvni prikaz za nim pomoci
%  prikazu 'break'.
%
  for x=A, x.', pause; end
pause;
%----------------------------------------------------------------------
  konec=0;
  n=0;
  while ~konec
        konec=input('Ukoncit smycku (ano=1,ne=0): ');
        n=n+1;
        if n>10, break; end
  end
  disp('Konec cyklu');
  n
keyboard;
clc;
%================================= KONEC ==============================
more off
echo off
