abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 13:55 | IT novinky

    Hodnota Bitcoinu, decentralizované kryptoměny klesla pod 70 000 dolarů (1,44 milionu korun).

    Ladislav Hagara | Komentářů: 5
    včera 13:22 | IT novinky

    Valve z důvodu nedostatku pamětí a úložišť přehodnocuje plán na vydání zařízení Steam Controller, Steam Machine a Steam Frame: „Cílem tedy stále zůstává vydat všechna tři nová zařízení v první polovině letošního roku, ale přesná data a ceny jsou dvě věci, na kterých usilovně pracujeme a jsme si dobře vědomi toho, jak rychle se v tomto ohledu může vše změnit. Takže ač dnes žádné zveřejnitelné údaje nemáme, hned jak plány finalizujeme, budeme Vás informovat.“

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Komunita

    Do 20. února lze hlasovat pro wallpapery pro Ubuntu 26.04 s kódovým názvem Resolute Raccoon.

    Ladislav Hagara | Komentářů: 2
    včera 02:22 | Nová verze

    Byla vydána lednová aktualizace aneb nová verze 1.109 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.109 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 1
    4.2. 19:33 | Zajímavý projekt

    Na Kickstarteru běží kampaň na podporu modulárního otevřeného handheldu Mecha Comet s Linuxem.

    Ladislav Hagara | Komentářů: 6
    4.2. 14:00 | Humor

    V nedávno zveřejněné kolekci dokumentů souvisejících s kontroverzním finančníkem a kuplířem Jeffrey Epsteinem se překvapivě objevil i referenční manuál unixového shellu Bash, jedná se o verzi manuálu z roku 2005. Aktuální vydání si lze stáhnout ze stránek GNU.

    NUKE GAZA! 🎆 | Komentářů: 17
    4.2. 13:55 | Nová verze

    The Document Foundation oznámila vydání nové verze 26.2 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs). Vypíchnout lze podporu formátu Markdown.

    Ladislav Hagara | Komentářů: 0
    4.2. 12:22 | Pozvánky

    Co se děje ve zprávách, ví asi každý - válka sem, clo tam, demonstrace na jednu i druhou stranu a bastlíř už má pocit, že se snad ani nic jiného neděje. To by však byl velký omyl a Virtuální Bastlírna je zde jako každý měsíc, aby vytáhla na světlo světa události ze světa vědy a techniky. Připojte se tedy nezávaznému povídání Strahovského MacGyvera! Co se tam bude probírat? PCBWay začalo dělat průhledné plošňáky, MARS končí s výrobou skříněk, FEL

    … více »
    bkralik | Komentářů: 0
    4.2. 12:11 | IT novinky

    Guvernérka státu New York Kathy Hochul (Demokraté) plánuje novou legislativu, která by měla omezit výrobu 3D tištěných zbraní. Tento návrh zákona zavádí povinnost pro všechny 3D tiskárny prodávané ve státě New York obsahovat 'software' bránící ve výrobě zbraní. Návrh zákona rovněž zakazuje lidem sdílet 'digitální plány zbraní' (blueprinty) bez povolení. Existují důvodné obavy, že se tento nešťastný nápad může šířit do dalších zemí a ovlivnit celý 3D tisk jako takový. Ostatně, s podobnou regulací nedávno přišel i stát Washington.

    NUKE GAZA! 🎆 | Komentářů: 30
    4.2. 05:11 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za prosinec 2025 a leden 2026 (YouTube). Zajímavé, že i v roce 2026 celou řadu problémů vyřeší falšování řetězce User-Agent.

    Ladislav Hagara | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (10%)
     (25%)
     (3%)
     (5%)
     (2%)
     (12%)
     (30%)
    Celkem 768 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Octave - 7 (vlastní skripty a funkce)

    7. 3. 2006 | Jiří Poláček | Programování | 10147×

    Zapisování příkazů Octave do M-souborů - skriptů a funkcí.

    Data versus skripty versus funkce

    Při rozsáhlejších výpočtech v Octave přestane příkazová řádka svým komfortem dostačovat. V tu chvíli přichází ke slovu soubory, které Octave může využívat dvěma způsoby - jednak pro ukládání dat, tj. obsahu proměnných (o tom byla řeč v minulém díle), a jednak pro zápis více příkazů, které se mají provést najednou (o tom bude řeč nyní). Ve druhém případě následně rozlišujeme mezi skripty - což není nic jiného než sada příkazů, která po vyhodnocení vykáže naprosto tytéž výsledky, jako kdybychom je zapisovali na příkazový řádek - a funkcemi - těm navíc můžeme předávat vstupní parametry a naopak výsledky výpočtu zase předávat jako parametry dalším funkcím - co to přesně znamená, je vysvětleno dále.

    M-soubory

    Vždy, když žádáme Octave o vyhodnocení nějakého příkazu - jako například funkce sinus - hledá se tento příkaz v prvé řadě mezi vestavěnými funkcemi - sem patří právě základní matematické funkce, včetně zmíněného sinu; příkaz pro změnu adresáře; výpis nápovědy nebo aktuálně zavedených proměnných apod. Pokud se zadaný příkaz nenajde mezi vestavěnými funkcemi, zkouší Octave štěstí v určitých adresářích (viz obsah proměnné DEFAULT_LOADPATH), zda se zde nenachází stejně pojmenovaný soubor s příponou „.m“. Pakliže ano, pokusí se jeho obsah interpretovat - očekává se, že zde bude skript nebo funkce. Tento princip je převzatý z Matlabu včetně oné charakterizující přípony .m, díky které se tyto soubory občas nazývají M-soubory, v angličtině M-files. Z již zmíněných funkcí Octave se v podobě M-souborů distribuují například funkce gcd, lcm, mod, tril, triu či funkce pro práci s řetězci z pátého dílu.

    Ve výchozím nastavení Octave figuruje v seznamu prohledávaných adresářů také aktuální adresář, čehož se využívá pro uživatelské skripty a funkce, kterým kromě označení M-soubory můžeme říkat také programy. Zkusme nyní v libovolném prázdném adresáři následující příkazy:

    >> ls
    >> mujskript
    error: `mujskript' undefined near line 3 column 1

    V aktuálním adresáři zatím není žádný soubor, jak ukazuje prázdný výpis po příkazu ls - volání zatím neexistující funkce mujskript tedy zákonitě skončí chybou. Vytvořme nyní v tomto adresáři soubor mujskript.m s následujícím obsahem:

    --[mujskript.m]--
    disp('Ahoj!');
    --[konec souboru]--

    Nyní můžeme sekvenci příkazů zopakovat s tímto výsledkem:

    >> ls       
    mujskript.m
    >> mujskript
    Ahoj!

    Zároveň jsme si ukázali velmi jednoduchý skript, o kterých pojednává následující odstavec.

    Skripty

    Skripty skutečně nejsou ničím jiným než prostým přenesením příkazů z příkazové řádky do souboru. Význam této skutečnosti se promítá zejména do způsobu zacházení s proměnnými:

    • skript může přistupovat k veškerým již zavedeným proměnným, tj. nejenom těm, které jsou vytvořeny přímo ve skriptu, ale také k těm, které si uživatel vytvořil v příkazové řádce před spuštěním skriptu;
    • veškeré proměnné vytvořené ve skriptu jsou nadále přístupné i po skončení skriptu;
    • tak, jak byly pozměněny obsahy proměnných ve skriptu, zůstávají i po jeho skončení.

    Mějme následující „hloupý“ skript na výpočet kořenů kvadratické rovnice:

    --[koreny.m]--
    D=4*a*c-b^2;
    x1=-b-sqrt(D);
    x2=-b+sqrt(D);
    b=x1/(2*a)
    c=x2/(2*a)
    --[konec skriptu]--

    Nyní můžeme na příkazovém řádku psát:

    >> a=1;b=4;c=-12;
    >> who           
    *** local user variables:
    a  b  c
    >> koreny        
    b = -6
    c = 2
    >> who   
    *** local user variables:
    D   a   b   c   x1  x2

    Z příkladu vidíme, že před spuštěním skriptu existovaly pouze proměnné a, b, c - po skončení skriptu přibyly navíc D, x1 a x2, přičemž hodnoty původních proměnných b a c byly pozměněny. Za povšimnutí stojí také fakt, že po spuštění skriptu se jako výsledek vypsaly výsledky příkazů skriptu, které nebyly ukončeny středníkem.

    Skript se může hodit v případě, kdy uživatel potřebuje jednorázově sestavit a odladit blok příkazů pro řešení svého problému, kdy má plně pod kontrolou používání proměnných. Užitečné jsou také startovací skripty, pomocí kterých si uživatel může spustit sekvenci příkazů, které opakovaně potřebuje vykonat po spuštění Octave, jako například nastavit vlastní prompt příkazového řádku, přepnout do určitého adresáře apod.

    Skripty se však již nehodí pro předkládání programů jiným uživatelům k využívání - v našem příkladě skriptu pro výpočet kořenů musí uživatel vědět, že koeficienty má uložit právě do proměnných pojmenovaných a, b, c, že výsledky se nacházejí v proměnných b a c a že se při výpočtu paměťový prostor „zamoří“ nově vytvořenými proměnnými, které uživatel v lepším případě na nic nepotřebuje, v horším mohou svým jménem kolidovat s jinými proměnnými, které si uživatel zavedl za jiným účelem. Tyto nepříjemnosti řeší právě funkce - striktním oddělením lokálních proměnných funkce od globálních proměnných zaváděných na příkazovém řádku.

    Funkce

    Pro proměnné ve funkci platí následující pravidla:

    • funkce může pracovat pouze s těmi proměnnými, které si zavede ve svém těle nebo deklaruje jako vstupní či výstupní proměnné;
    • žádné jiné proměnné nejsou ve funkci viditelné, nelze tedy číst jejich hodnoty natož jejich obsah.

    Funkci od skriptu odlišíme tím, že na začátku souboru uvedeme klíčové slovo function, za kterým musí následovat název funkce - ten by se měl shodovat s názvem souboru. Jednoduchá funkce tak může vypadat například takto:

    --[mojefunkce.m]--
    function mojefunkce
    a=4;
    disp(a);
    disp(b);
    --[konec funkce]--

    Proměnná a v této funkci figuruje jako lokální proměnná. Podívejme se nyní, jak bude koexistovat s globálními proměnnými a a b:

    >> a=1; b=7;
    >> mojefunkce
    4
    error: `b' undefined near line 4 column 6
    >> a,b
    a = 1
    b = 7

    Funkce vypsala hodnotu lokální proměnné a chybové hlášení o chybějící lokální proměnné b. Globální proměnné a a b zůstaly nedotčeny. „Komunikovat s vnějším prostředím“ může funkce pouze skrze vstupní a výstupní proměnné. Práci s nimi si ukažme na upraveném výpočtu kořenů kvadratické rovnice:

    --[koreny.m]--
    function x=koreny(a,b,c)
    D=b^2-4*a*c;
    x(1)=(-b-sqrt(D))/(2*a);
    x(2)=(-b+sqrt(D))/(2*a);
    --[konec funkce]--

    Za názvem proměnné je v kulatých závorkách uveden seznam vstupních proměnných, od kterých očekáváme, že jejich hodnoty budou zadány jako parametry při volání této funkce na příkazovém řádku - v těle funkce tedy s těmito proměnnými můžeme počítat (a na základě jejích různých hodnot nám bude funkce vracet různé výsledky).

    Proměnná x uvedená před názvem funkce a oddělená rovnítkem, je výstupní proměnná - jejím prostřednictvím vracíme výsledek funkce. Znamená to, že ta hodnota, která na konci výpočtu naší funkce bude uložena v proměnné x, se vypíše po skončení funkce:

    >> koreny(1,4,-12)
    ans =
            -6         2

    Díky tomu, že Octave každou proměnnou interně chápe jako matici, lze snadno jako výsledek funkce vrátit více čísel - v našem příkladě jsme proměnnou x pojali jako dvouprvkový vektor.

    Jak ukázal první příklad funkce, vstupní ani výstupní proměnné nejsou nutné, jejich užitná hodnota však tak silně klesá. Výsledek funkce může být také například vypsán pomocí příkazu disp, v takovém případě však již není možné výsledek uložit do nějaké proměnné a dále s ním pracovat:

    >> vysl=koreny(1,4,-12);
    >> sum(vysl)
    ans = -4

    Funkce budou v dalších dílech hojně využívány a dále vysvětlovány v příkladech na řídicí struktury programů v Octave.

    Nejčtenější články posledního měsíce

    Týden na ITBiz: Prodeje serverů prudce rostou a dodavatelé hlásí i další rekordní objednávky
    Týden na ScienceMag.cz: Mimozemské civilizace ve stavu dilatace času
    Událo se v týdnu 2/2026

    Nejkomentovanější články posledního měsíce

      všechny statistiky »

    Seriál Octave (dílů: 16)

    Octave - 1 (je to kalkulačka) (první díl)
    <—« Octave - 6 (práce se soubory)
    »—> Octave - 8 (větvení programu)
    Octave - 16 (a co dál?) (poslední díl)

    Související články

    Octave - 1 (je to kalkulačka)
    Octave - 2 (počítání s maticemi)
    Octave - 3 (přístup k jednotlivým položkám matice)
    Octave - 4 (je to pravda?)
    Octave - 5 (práce s řetězci)
    Octave - 6 (práce se soubory)
    Octave - 8 (větvení programu)
    Octave - 9 (cykly)
    Octave - 10 (zbylé řídicí struktury)
    Octave - 11 (kreslíme grafy)
    Octave - 12 (měřítko os a speciální grafy)
    Octave - 13 (dokončení grafiky)
    Octave - 14 (finance a statistika)
    Octave - 15 (špetka matematiky)
    Octave - 16 (a co dál?)
    Vektorový elegán Ipe
    Recenze: Kniha kódů a šifer
    Awk & sed: Příručka pro dávkové zpracování textu
    SETI@home
    Jak se píše procesor
    GnuCash - domácí účetnictví na úrovni
    Použití gnuplot pro tvorbu grafů v PHP
    Hra s písmenky - wxMaxima

    Odkazy a zdroje

    Octave

    Další články z této rubriky

    LLVM a Clang – více než dobrá náhrada za GCC
    Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
    Reverzujeme ovladače pro USB HID zařízení
    Linux: systémové volání splice()
    Programování v jazyce Vala - základní prvky jazyka
           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.