Vytvořte skou funkci s2cos_graf bez parametrů. Tato funkce s2cos_graf bude vykreslovat graf křivky dané rovnicí y = sin 2 (x) cos(x) pro x z intervalu, jehož dolní mez, horní mez a krok zadá z klávesnice. Je třeba ošetřit, aby dolní mez byla menší než horní, aby krok byl kladný a nepřevyšoval hodnotu 1/10 z rozdílu mezi horní a dolní mezí intervalu. Pro výpočet y = sin 2 (x) cos(x) bude vytvořena další funkce s2cos s jedním vstupním parametrem x a jedním výstupním parametrem y. Funkce s2cos bude volána ve funkci s2cos_graf. Funkce mohou být napsány každá v samostatném souboru a uloženy ve stejné složce nebo mohou být napsány v jednom souboru (nejprve hlavní funkce s2cos_graf a potom funkce s2cos). Nejdříve vytvoříme funkci s2cos_graf: function s2cos_graf dolni = input('zadejte pocatecni hodnotu: '); horni = input('zadejte koncovou hodnotu: '); krok = input('zadejte krok: '); if (horni <= dolni) return; if (krok <= 0) krok musí být kladný disp('je pripustny pouze kladny krok...'); return; elseif (krok > ((horni - dolni)./ 10)) disp('krok je prilis velky...'); return; ; osa_x = dolni:krok:horni; osa_y = s2cos(osa_x); plot(osa_x, osa_y) je požadován krok max 1/10 ze zadaneho intervalu volání funkce s2cos se vstupem osa_x pro výpočet y Tuto funkci s2cos musíme nyní vytvořit : funkce s2cos pro výpočet y = sin 2 (x) cos(x) function y = s2cos(x) operace prvek po y = (sin(x).^ 2).* cos(x); prvku nutné Funkce s2cos je využita ve funkci s2cos_graf. Příklady volání funkce s2cos_graf jejím názvem : s2cos_graf Zadejte pocatecni hodnotu: 0 Zadejte koncovou hodnotu: 2*pi Zadejte krok: 100 Krok je prilis velky... s2cos_graf Zadejte pocatecni hodnotu: 0 Zadejte koncovou hodnotu: 2*pi Zadejte krok: 2*pi/100 Funkci s2cos lze volat i z příkazového řádku, pokud je uložena v samostatném souboru. Příklady volání funkce s2cos jejím názvem : vstup = 0:0.1:1; kolik = s2cos(vstup); Funkce s2cos slouží pro výpočet, pak vykreslíme graf plot(vstup, kolik) Pro vstup 0: y = s2cos(0) y = 0 function y = s2cos(x) y = (sin(x).^ 2).* cos(x); Pro jiný vstup tatáž funkce: x = [-pi:0.1:pi]; vysledek = s2cos(x); A ještě vykreslíme graf plot(x,vysledek) Vytvořte skou funkci s2cos_fajn bez parametrů. Tato funkce s2cos_fajn bude vykreslovat graf křivky dané rovnicí y = sin 2 (x) cos(x) pro x z intervalu, jehož dolní mez, horní mez a krok zadá z klávesnice. Je třeba ošetřit, aby dolní mez byla menší než horní, aby krok byl kladný a nepřevyšoval hodnotu 1/10 z rozdílu mezi horní a dolní mezí intervalu. Pokud se zmýlí, bude mu umožněno dolní mez, horní mez a krok zadat znovu. Pro výpočet y = sin 2 (x) cos(x) bude využita funkce s2cos. Takže vylepšíme skou funkci s2cos_graf, která byla uvedena dříve, a přidáme cykly. 1
function s2cos_fajn dolni = input('zadejte pocatecni hodnotu: '); horni = input('zadejte koncovou hodnotu: '); if (horni > dolni) krok = input('zadejte krok: '); if (krok <= 0) disp('je pripustny pouze kladny krok...'); elseif (krok > ((horni - dolni)./10)) disp('krok je prilis velky...'); ; ; osa_x = dolni:krok:horni; osa_y = s2cos(osa_x); plot(osa_x, osa_y) function y = s2cos(x) y = (sin(x).^ 2).* cos(x); function s2cos_fajn dolni = input('zadejte pocatecni hodnotu: '); horni = input('zadejte koncovou hodnotu: '); if (horni > dolni) krok = input('zadejte krok: '); if (krok <= 0) break - ukončí disp('je pripustny pouze kladny krok...'); běh cyklu a elseif (krok > ((horni - dolni)./10)) disp('krok je prilis velky...'); ; ; osa_x = dolni:krok:horni; osa_y = s2cos(osa_x); plot(osa_x, osa_y) vyskočí z něj za jeho koncový, continue - vyvolá okamžitě další otočku cyklu function y = s2cos(x) y = (sin(x).^ 2).* cos(x); Volání funkce jejím názvem: s2cos_fajn Zadejte pocatecni hodnotu: 10 Zadejte koncovou hodnotu: 0 Dolni mez je mensi nebo stejna s horni! Zadejte pocatecni hodnotu: 1 Zadejte koncovou hodnotu: 5 Zadejte krok: 20 Krok je prilis velky... Zadejte krok: 0.1 a už se vykreslí graf se zadanými hodnotami... Vytvořte skou funkci s2cos_super bez parametrů. Tato funkce s2cos_super bude vykreslovat graf křivky dané rovnicí y = sin 2 (x) cos(x) pro x z intervalu, jehož dolní mez, horní mez a krok zadá z klávesnice. Je třeba ošetřit, aby dolní mez byla menší než horní, aby krok byl kladný a nepřevyšoval hodnotu 1/10 z rozdílu mezi horní a dolní mezí intervalu. Pokud se zmýlí, bude mu umožněno dolní mez, horní mez a krok zadat znovu. Ve funkci bude provedeno ošetření počtu chyb e, maximální počet chyb, které může udělat, bude 10. Pro výpočet y = sin 2 (x) cos(x) bude využita funkce s2cos. Takže k funkci s2cos_fajn(), která byla uvedena dříve, přidáme počítání chyb. function s2cos_super kolik_chyb = 0; dolni = input('zadejte pocatecni hodnotu: '); horni = input('zadejte koncovou hodnotu: '); if (horni > dolni) kolik_chyb = kolik_chyb + 1; switch kolik_chyb case 0 disp('chybka programu, nula chyb, tady nemam byt?!?!'); case 1 disp('tak to byla prvni chyba...'); case 2 disp('tak to byla druha chyba...'); case 3 disp('tak to bylo do tretice...'); case {4, 5, 6, 7, 8, 9} disp(['uz ',num2str(kolik_chyb),... '. chyba, to snad neni mozne!']); Pokračování case 10 disp('jubileum, 10. chyba! Bude konec!'); otherwise disp('uz si nemame co rici... Jsi beznadejny pripad.'); return; ; krok = input('zadejte krok: '); if (krok <= 0) disp('je pripustny pouze kladny krok...'); elseif (krok > ((horni - dolni)./10)) disp('krok je prilis velky...'); ; ; osa_x = dolni:krok:horni; osa_y = s2cos(osa_x); plot(osa_x, osa_y) Ošetření počtu chyb u zadávání kroku bychom provedli podobně function y = s2cos(x) y = (sin(x).^ 2).* cos(x); 2
Volání funkce jejím názvem: s2cos_super Zadejte pocatecni hodnotu: 3 Zadejte koncovou hodnotu: 0 Tak to byla prvni chyba... Dolni mez je mensi nebo stejna s horni! Zadejte pocatecni hodnotu: 5 Zadejte koncovou hodnotu: 0 Tak to byla druha chyba... Dolni mez je mensi nebo stejna s horni! Zadejte pocatecni hodnotu: 6 Zadejte koncovou hodnotu: -1 Tak to bylo do tretice... Dolni mez je mensi nebo stejna s horni! Zadejte pocatecni hodnotu: 0 Zadejte koncovou hodnotu: 20 Zadejte krok: 0.1 a už se vykreslí graf se zadanými hodnotami... Uživatel v tomto případě udělal 3 chyby při zadávání. Součet náhodných čísel ve vektoru s počtem prvků, které zadá, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na obrazovku zpomaluje tím, že zobrazíme okno (proužek) o stavu výpočtu. h = waitbar(x,'zpráva') vytváří a zobrazuje proužek částečně zaplněný podle velikosti x, které by mělo být mezi 0 a 1. V horní části se zobrazuje aktuální text zprávy. Pozn.: rem(x,y) zbytek po celočíselném dělení, např. rem(3,2) ans = 1 3/2=1, zbytek 1 (3 je liché číslo) rem(4,2) ans = 0 4/2=2, zbytek 0 (4 je sudé číslo) rem(78,5) ans = 3 78/5=15, zbytek 3 function testsumacewbar pocet_cisel = input('zadej pocet cisel vetsi nez milion: '); if(pocet_cisel>1e6) break vektor = rand(1,pocet_cisel); tic prvni = sum(vektor); toc disp('pomoci sum: '); disp(prvni) tic druhy = 0; h = waitbar(0,'makam jako drak...'); for cykl=1:length(vektor) druhy = druhy + vektor(cykl); if(rem(cykl,10000) ~= 0) waitbar(cykl/length(vektor)); close(h); toc disp('pomoci cyklu for: '); disp(druhy) function testsumacewbar pocet_cisel = input('zadej pocet cisel vetsi nez milion: '); if(pocet_cisel>1e6) break musí být zadán počet větší než 10 6 vektor = rand(1,pocet_cisel); tic prvni = sum(vektor); toc disp('pomoci sum: '); disp(prvni) součet prvků ve vektoru pomocí sum tic druhy = 0; h = waitbar(0,'makam jako drak...'); for cykl=1:length(vektor) druhy = druhy + vektor(cykl); if(rem(cykl,10000) ~= 0) waitbar(cykl/length(vektor)); close(h); toc disp('pomoci cyklu for: '); disp(druhy) function testsumacewbar pocet_cisel = input('zadej pocet cisel vetsi nez milion: '); if(pocet_cisel>1e6) break musí být zadán počet větší než 10 6 vektor = rand(1,pocet_cisel); tic prvni = sum(vektor); toc disp('pomoci sum: '); disp(prvni) součet prvků ve vektoru pomocí sum součet prvků ve vektoru pomocí for jen každý 10000cí obrat provede výpis tic druhy = 0; h = waitbar(0,'makam jako drak...'); for cykl=1:length(vektor) druhy = druhy + vektor(cykl); if(rem(cykl,10000) ~= 0) zbytek po dělení waitbar(cykl/length(vektor)); close(h); zavření toc okna disp('pomoci cyklu for: '); disp(druhy) Volání funkce jejím názvem, např.: testsumacewbar Zadej pocet cisel vetsi nez milion: 5 Zadej pocet cisel vetsi nez milion: 50 Zadej pocet cisel vetsi nez milion: 1e7 Elapsed time is 0.011707 seconds. Pomoci sum: 4.9997e+006 Elapsed time is 2.582634 seconds. Pomoci cyklu for: 4.9997e+006 Spotřebovaný čas pomocí for s výpisem Spotřebovaný čas pomocí sum 3
Pozn.: ke vstupu dat Mimo input lze použít i menu. Tento příkaz obsahuje kromě výzvy pro e i několik možných voleb (počet volíme podle potřeby). Uživatel si zvolí volbu, jejíž pořadové číslo bude pak přiřazeno proměnné. Např.: b = menu('vyber si barvu','cervena','modra','zelena') b = 1 červenou b = 2 modrou b = 3 zelenou Stejný výsledek lze dosáhnout i příkazem input (a např. if, příp. switch). Funkce menu celý postup pouze může usnadnit. Vytvoření ské funkce vyberzmenu bez parametrů. Tato funkce vyberzmenu bude vykreslovat grafy křivek dané rovnicemi: f(x) = sin 3 (x 2 ) červeně, f(x) = 2 sin 3 (x 2 ) modře, f(x) = 3 sin 3 (x 2 ) zeleně. Křivka bude vykreslena podle volby e vždy pro x z intervalu od 0 do 5. Pro výpočet y = sin 3 (x 2 ) bude vytvořena další funkce sin3x2 s jedním vstupním parametrem x a jedním výstupním parametrem y. Funkce sin3x2 bude volána ve funkci vyberzmenu a její výstup bude využit při vykreslení grafů. Pozn.: pause čekání na stisk klávesy pause(1.45) čeká 1,45 sec. a pak pokračuje function vyberzmenu volba = menu('vyber si barvu','cervena','modra','zelena','konec'); switch volba case 1 barva = 'Cervena'; plot(0:0.01:5,sin3x2(0:0.01:5),'r'); title([barva,' sin^3x^2 ']) case 2 barva = 'Modra'; plot(0:0.01:5,2.*sin3x2(0:0.01:5),'b'); title([barva,' 2.sin^3x^2 ']) case 3 barva = 'Zelena'; plot(0:0.01:5,3.*sin3x2(0:0.01:5),'g'); title([barva,' 3.sin^3x^2 ']) case 4 disp('konec, okna budou zavřena') pause(1.5); close all; % zavře všechna grafická okna otherwise function y = sin3x2(x) y=(sin(x.^2)).^3; function vyberzmenu volba = menu('vyber si barvu','cervena','modra','zelena','konec'); switch volba case 1 barva = 'Cervena'; plot(0:0.01:5,sin3x2(0:0.01:5),'r'); title([barva,' sin^3x^2 ']) case 2 barva = 'Modra'; plot(0:0.01:5,2.*sin3x2(0:0.01:5),'b'); title([barva,' 2.sin^3x^2 ']) case 3 barva = 'Zelena'; plot(0:0.01:5,3.*sin3x2(0:0.01:5),'g'); title([barva,' 3.sin^3x^2 ']) case 4 disp('konec, okna budou zavřena') pause(1.5); close all; % zavře všechna grafická okna otherwise Toto by nemělo nastat 1 2 3 4 function y = sin3x2(x) y=(sin(x.^2)).^3; Volání funkce vyberzmenu Volání funkce vyberzmenu Rozsahy os y se liší červenou červenou modrou 4
Volání funkce vyberzmenu červenou modrou Rozsahy os y se liší konec Konec, okna budou zavřena ('formatovací sekvence', argumenty) vypíše argumenty v požadovaném formátu v pořadí v jakém jsou zapsány. Formátovací sekvence začínají znakem % : %d nebo %i desítkové číslo (znaménkové) %o číslo v osmičkové soustavě %u desítkové číslo (neznaménkové) %x nebo %X číslo v šestnáctkové soustavě (a f nebo A F) %f desetinné číslo %e nebo %E desetinné číslo v exponenciálním tvaru (e nebo E) %g nebo %G použito %f nebo %e resp. %E exponenciální tvar se použije, je-li třeba, tj. je-li číslo moc velké nebo malé. Navíc vypouští nevýznamné nuly %c tisk znaku (z proměnné) %s tisk textového řetězce (z proměnné) Pozn. %% - tiskne znak % Důležité řídící znaky: \n nová řádka \t tabelátor \r návrat na začátek téhož řádku (záleží na operačním systému) \a v některých operačních systémech pípnutí \b Backspace vymazání předchozího znaku \\ - tiskne znak \ (zpětné lomítko) a = 56; b = 134; tisk hodnot uložených v proměnných a, b na obrazovku ('%d %d\n', a, b); 56 134 a = 56; b = 134; - tisk hodnot na 8 znaků, zleva doplněny mezery ('%8d %8d\n',a,b); 56 134 - tisk hodnot na 8 znaků, zleva doplní poprvé nuly, podruhé mezery ('%08d %8d\n',a,b); 00000056 134 a = 56; b = 134; - tisk hodnot na 8 znaků, zleva doplněny mezery ('%8d %8d\n',a,b); 56 134 a = 56; b = 134; uvedené číslo říká "alespoň 8 znaků", nesmí oříznout delší celé číslo. - tisk hodnot na 8 znaků, zleva doplněny mezery ('%8d %8d\n',a,b); 56 134 - tisk hodnot na 8 znaků, zleva doplní poprvé nuly, podruhé mezery ('%08d %8d\n',a,b); 00000056 134 6+2=8 5+3=8 - tisk hodnot na 8 znaků, zleva doplní poprvé nuly, podruhé mezery ('%08d %8d\n',a,b); 00000056 134 6+2=8 5+3=8 ('%6d\n',1000); 1000 ('%4d\n',1000); 1000 ('%2d\n',1000); 1000 5
a = 56; b = 134; - tisk hodnot na 8 znaků, zleva doplněny mezery ('%8d %8d\n',a,b); 56 134 - tisk hodnot na 8 znaků, zleva doplní poprvé nuly, podruhé mezery ('%08d %8d\n',a,b); 00000056 134 6+2=8 5+3=8 uvedené číslo říká "alespoň 8 znaků", nesmí oříznout delší celé číslo. 4 znaky => žádná mezera, 0 +4= 4 číslo 1000 má 4 číslice, 6 znaků => 2 mezery, 2 +4= 6 ('%6d\n',1000); 1000 ('%4d\n',1000); 1000 ('%2d\n',1000); 1000 2 znaky => žádná mezera, celé číslo 1000 výpis desetinného čísla ('%f\n', x); 123.345600 tři desetinná místa ('%.3f\n', x); zaokrouhluje dvě desetinná místa ('%.2f\n', x); osm desetinných míst ('%.8f\n', x); 123.34560000 Pozn. %f zobrazení čísla v pevné řádové čárce desetinné tečky a z toho (tj. na celou část zbývá minimálně 12, celá část má 3 číslice =>doplněno 9 mezerami) ('%15.2f\n', x); desetinné tečky a z toho (tj. na celou část zbývá minimálně 12, celá část má 3 číslice =>doplněno 9 mezerami) ('%15.2f\n', x); 9 mezer 3 číslice 1 des. tečka 2 desetinná místa 9 + 3 = 12 9 + 3 + 1 + 2 = 15 ('%15.2f\n', x); ('%015.2f\n',x); 000000000 ('%15.2f\n', x); ('%015.2f\n',x); 000000000 6
('%15.2f\n', x); ('%015.2f\n',x); 000000000 ('%06.2f\n',x); nula není doplněna, už je vypsáno 6 znaků (2 desetinná ('%15.2f\n', x); ('%015.2f\n',x); 000000000 3 + 1 + 2 = 6 ('%06.2f\n',x); nula není doplněna, už je vypsáno 6 znaků (2 desetinná ('%15.2f\n', x); ('%015.2f\n',x); 000000000 3 + 1 + 2 = 6 ('%06.2f\n',x); nula není doplněna, už je vypsáno 6 znaků (2 desetinná ('%04.2f\n',x); vypsáno 6 znaků (2 desetinná ('%15.2f\n', x); ('%015.2f\n',x); 000000000 3 + 1 + 2 = 6 ('%06.2f\n',x); nula není doplněna, už je vypsáno 6 znaků (2 desetinná ('%04.2f\n',x); 4 1 2 = 1 vypsáno 6 znaků (2 desetinná ('%15.2f\n', x); ('%015.2f\n',x); 000000000 3 + 1 + 2 = 6 ('%06.2f\n',x); nula není doplněna, už je vypsáno 6 znaků (2 desetinná ('%04.2f\n',x); 4 1 2 = 1 vypsáno 6 znaků (2 desetinná uvedené číslo říká "alespoň 4 znaky celkem", nesmí být oříznuta delší celá část. + značí vždy tisknout znaménko + nebo, např.: %+d, %+f c = 7; d = -34; ('%+d %+d %+.1f\n', c, d, x); +7-34 +123.3 - znamená zarovnat doleva, např.: %-8.3f ('%-8.3f\n', x); ('%-15.3f\n', x); 7
+ značí vždy tisknout znaménko + nebo, např.: %+d, %+f c = 7; d = -34; ('%+d %+d %+.1f\n', c, d, x); +7-34 +123.3 - znamená zarovnat doleva, např.: %-8.3f ('%-8.3f\n', x); Pozn. bez znaménka doplnění ('%-15.3f\n', x); mezerami ('%15.3f\n', x); ('%8.3f\n', x); nejsou mezery a = 234; b = 398; ('V desitkove soustave: %d %d\n', a, b); V desitkove soustave: 234 398 ('V osmickove soustave: %o %o\n', a, b); V osmickove soustave: 352 616 ('V 16kove soustave: %x %x\n', a, b); V 16kove soustave: ea 18e ('V 16kove soustave: %X %X\n', a, b); V 16kove soustave: EA 18E m = 123.3456; ('%f\n', m); 123.345600 ('%e\n', m); 1.233456e+002 ('%E\n', m); 1.23456E+002 ('%g\n', m); ('%G\n', m); n = 1.23440000e34; ('%f\n', n); 12344000000000001000000000000000000.000000 ('%e\n', n); 1.234400e+034 ('%E\n', n); 1.234400E+034 ('%g\n', n); 1.2344e+034 ('%G\n', n); 1.2344E+034 Pozn.: porovnání s format,který nastavuje výstupní formát zobrazení čísla na obrazovku, např. y = 123.4567890123456789; format long e y y = 1.234567890123457e+002 format short e y y = 1.2346e+002 format long g y y = 123.456789012346 format short g y y = 123.46 format y y = 123.4568 ('%f\n',y) 123.456789 ('%e\n',y) 1.234568e+002 ('%.4e\n',y) 1.2346e+002 ('%.12e\n',y) 1.234567890123e+002 ('%g\n',y) 123.457 funkce pro výpis podílu pomocí disp a různými způsoby, dělenec codelit a dělitel cimdelit jsou vstupními parametry funkce function vystupytest1(codelit,cimdelit) if(cimdelit==0) disp('nulou nedelim!!!') return x = codelit / cimdelit; disp(['vysledek je: ',num2str(x)]); hlaska = 'Vysledek je: '; format short disp(hlaska); disp(x); format long g; disp(hlaska); disp(x); format rat; disp(hlaska); disp(x); ('\nvysledek je %.3f\n',x); Volání funkce: vystupytest1(17,3) Vysledek je: 5.6667 Vysledek je: 5.6667 Vysledek je: 5.66666666666667 Vysledek je: 17/3 Vysledek je 5.667 Nebo: vystupytest1(-59,0) Nulou nedelim!!! function vystupytest2(codelit,cimdelit) if(cimdelit==0) disp('nulou nedelim!!!') return x = codelit / cimdelit; ('Vysledek je x = %-8.3f\nA to je spravne...\n',x); ('\nnebo presneji x = %-8.6f\n', x); ('\nnyni prehledne v tabulce:\n'); (' %15s %15s %15s \n','delenec','delitel','podil'); (' %15.3f %15.3f %15.3f \n\n', codelit,cimdelit,x); vystupytest2(17,3) volání funkce Vysledek je x = 5.667 A to je spravne... Nebo presneji x = 5.666667 Nyni prehledne v tabulce: Delenec Delitel Podil 17.000 3.000 5.667 8
function vystupytest3(codelit,cimdelit) if(cimdelit==0) disp('nulou nedelim!!!') return x = codelit / cimdelit; function vystupytest4(codelit,cimdelit) if(cimdelit==0) disp('nulou nedelim!!!') return x = codelit / cimdelit; ('\njeste jednou, tentokrat zarovnano doleva:\n'); (' %-15s %-15s %-15s \n', 'Delenec','Delitel','Podil'); (' %-15.3f %-15.3f %-15.3f \n\n', codelit,cimdelit,x); Volání funkce: vystupytest3(17,3) Jeste jednou, tentokrat zarovnano doleva: Delenec Delitel Podil 17.000 3.000 5.667 ('\na oddeleno jen tabelatorem:\n'); ('%15s\t%15s\t%15s\t\n','Delenec', 'Delitel', 'Podil'); ('%15.3f\t%15.3f\t%15.3f\n\n', codelit,cimdelit,x); Volání funkce: vystupytest4(17,3) A oddeleno jen tabelatorem: Delenec Delitel Podil 17.000 3.000 5.667 Vstup a tisk znaků (příp. textového řetězce) zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: n ('Bylo zadano: %c\n', zadany_znak); Bylo zadano: n zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? ('Bylo zadano: %s\n', zadany_text); Bylo zadano: Ahoj, jak je? Pozn. zadany_text = input('zadejte text: ', 's'); Zadejte text: Ano! ('Bylo zadano: %c\n', zadany_text); Bylo zadano: A Bylo zadano: n Bylo zadano: o Bylo zadano:! Pozn.: k zadávání znaků Pokud zadá více znaků, lze se přebytečných zbavit např. takto: zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: Ahoj, jak je? if (length(zadany_znak) > 1) zadany_znak = zadany_znak(1,1); ; ('Bylo zadano: %c\n', zadany_znak); Bylo zadano: A Pozn.: k zadávání znaků Pokud zadá více znaků, lze se přebytečných zbavit např. takto: zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: Ahoj, jak je? if (length(zadany_znak) > 1) zadany_znak = zadany_znak(1,1); ; ('Bylo zadano: %c\n', zadany_znak); Bylo zadano: A Pozn.: k zadávání znaků Pokud zadá více znaků, lze se přebytečných zbavit např. takto: zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: Ahoj, jak je? if (length(zadany_znak) > 1) zadany_znak = zadany_znak(1,1); ; ('Bylo zadano: %c\n', zadany_znak); Bylo zadano: A ('Bylo zadano: %5c\n', zadany_znak); Bylo zadano: A 9
Pozn.: k zadávání znaků Pokud zadá více znaků, lze se přebytečných zbavit např. takto: zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: Ahoj, jak je? if (length(zadany_znak) > 1) zadany_znak = zadany_znak(1,1); ; ('Bylo zadano: %c\n', zadany_znak); Bylo zadano: A Doplněno 4 mezerami, 4 +1= 5 ('Bylo zadano: %5c\n', zadany_znak); Bylo zadano: A Tisk do řetězce r = sprintf('formatovací sekvence', argumenty) vrací řetězec, do řetězce r jsou vypsány argumenty v požadovaném formátu v uvedeném pořadí, stejně jako u, formátovací sekvence jsou také stejné jako u. Příklady: zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? hlaska = sprintf('bylo zadano: %s\n', zadany_text); figure % prázdné grafické okno title(hlaska) % titulek grafu z řetězce hlask Tisk do řetězce r = sprintf('formatovací sekvence', argumenty) vrací řetězec, do řetězce r jsou vypsány argumenty v požadovaném formátu v uvedeném pořadí, stejně jako u, formátovací sekvence jsou také stejné jako u. Příklady: zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? hlaska = sprintf('bylo zadano: %s\n', zadany_text); figure % prázdné grafické okno title(hlaska) % titulek grafu z řetězce hlaska disp(hlaska) Bylo zadano: Ahoj, jak je? ('%s\n',hlaska) Bylo zadano: Ahoj, jak je? Tisk do řetězce r = sprintf('formatovací sekvence', argumenty) vrací řetězec, do řetězce r jsou vypsány argumenty v požadovaném formátu v uvedeném pořadí, stejně jako u, formátovací sekvence jsou také stejné jako u. Příklady: zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? hlaska = sprintf('bylo zadano: %s\n', zadany_text); figure % prázdné grafické okno title(hlaska) % titulek grafu z řetězce hlaska disp(hlaska) Bylo zadano: Ahoj, jak je? ('%s\n',hlaska) Bylo zadano: Ahoj, jak je? Tisk do řetězce sprintf Příklady: zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? hlaska = sprintf('bylo zadano: %s\n', zadany_text); msgbox(hlaska,'problem','error'); Tisk do řetězce sprintf Příklady: zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? hlaska = sprintf('bylo zadano: %s\n', zadany_text); msgbox(hlaska,'problem','error'); msgbox(zpráva,titulek,ikona) - vytvoří okno se zprávou, titulek se objeví v liště, ikona určuje, jaký obrázek ('error', 'help', 'warn') se zobrazí v okně se zprávou. Pozn.: další okna viz help - pod heslem Predefined Dialog Boxes msgbox(zpráva,titulek,ikona) - vytvoří okno se zprávou, titulek se objeví v liště, ikona určuje, jaký obrázek ('error', 'help', 'warn') se zobrazí v okně se zprávou. Pozn.: další okna viz help - pod heslem Predefined Dialog Boxes 10
Funkce jednoduchá kalkulačka Uživatel zadá dvě čísla a bude vybírat z operací: +, -, *, /, \. Pokud zadá matici nebo vektor, jako zadané číslo je uvažován prvek v prvním řádku a prvním sloupci. Uživateli bude umožněno po skočení výpočtu provádět další výpočet nebo zadat jiná čísla a opět pokračovat ve výpočtech. function kalkulacka a = input('zadej prvni cislo:'); if (length(a)>1) a = a(1,1); b = input('zadej druhe cislo:'); if (length(b)>1) b = b(1,1); znak = menu('vyber','+','-','*','/','\','jina cisla','konec'); switch (znak) case 1 s = sprintf('%.1f + %.1f = %.2f',a,b,a+b); case 2 s = sprintf('%.1f - %.1f = %.2f',a,b,a-b); case 3 s = sprintf('%.1f * %.1f = %.2f',a,b,a.*b); case 4 s = sprintf('%.1f / %.1f = %.2f',a,b,a./b); case 5 s = sprintf('%.1f \\ %.1f = %.2f',a,b,a.\b); case 6 msgbox('zadej jina cisla','informace','warn'); case 7 msgbox('konec','informace','warn'); return; msgbox(s,'vypocet','help'); Volání funkce kalkulacka Zadej prvni cislo:15 Zadej druhe cislo:3 Volání funkce kalkulacka Zadej prvni cislo:15 Zadej druhe cislo:3 + * * Volání funkce kalkulacka Zadej prvni cislo:15 Zadej druhe cislo:3 + Volání funkce kalkulacka * / jiné zadání Zadej prvni cislo:1 Zadej druhe cislo:2 11
Volání funkce kalkulacka \ Volání funkce kalkulacka \ jiné zadání jiné zadání Konec Zadej prvni cislo:1 Zadej druhe cislo:2 Zadej prvni cislo:1 Zadej druhe cislo:2 12