
matlab - dělení devíti
Dobrý den,
pokouším se v Matlabu napsat jednoduchý program, ale moc nevím jak na to. Cílem je abych zadal nějaký interval... a Matlab mi vypsal čísla, která jsou z toho intervalu dělitelná devíti.
Neporadil by mi někdo prosům jakou mám použít funkce?
1. určitě tam bude cyklus
2. použiji funkci mod
3. jakou fci použít aby mi Matlab řekl, že zrovna toto číslo je dělitelné devíti?
Děkuji
najdeš první číslo z intervalu dělitelné 9 (buď reálným modem čísla, nebo ciferným součtem a mod 9), následně budeš k tomu číslu přičítat 9 a vypisovat, dokud bude menší nebo rovno hornímu limitu intervalu.
Já jsem myslel, že pomocí mod zjistím pouze zda dělení funkce vyjde bezezbytku...
Ne, tím zjistíš zbytek po dělení.
No, když vydělíš konkrétní číslo devíti beze zbytku, tím zjistíš, že toto číslo je dělitelné devíti.
Nevím, jestli to pomůže, ale znakem dělitelnosti 9 je ciferný součet dělitelný 9. Takže uděláš ciferný součet, je-li větší, než 9, tak opakuješ, až vznikne jednociferné číslo. Je-li výsledkem 9, je původní číslo dělitelné 9, jinak není.
Pro člověka se tenhle postup hodí, ale pro stroj je oproti funkci modulo ukrutně pomalý.
Přesně tak, navíc ono se to dá ještě zjednodušit/optimalizovat, vezmu první číslo z intervalu, udělám mod 9, vezmu zbytek tohoto dělení (mod) a pokud je roven nule, mám první číslo dělitelné devíti. Pokud je větší než nula, tento zbytek přičtu k tomuto číslu a mám první číslo z intervalu dělitelné devíti. Následně už jen přičítám 9, dokud se nedostanu z intervalu.
Ale čo ak v reťazci nebo v poli je napr. 9, je tam i 27 ale nieje tam 18... modulo každej hodnoty je istejšie.
V zadání je interval. Ten je daný počáteční a konečnou hodnotou.
Jo pravda, som to prehliadol.
napiš do příkazového řádku help mod a dostane se ti daleko obsáhlejšího popisu a ještě obsáhlejšího při doc mod. To se dá aplikovat na každý příkaz včetně vlastních funkcí a skriptů (za předpokladu, že se člověk namáhal s napsáním pár slov jako dokumentace).
V matlabu je třeba zajímavé, že funkce mod bere i necelá čísla. Vůbec neni problém dělat modulo 2*pi (převod úhlu do základního intervalu) a podobné vylomeniny.
Jinak matlab má velice slušnou nápovědu a řadu příkladů. Jen jako u všeho musí člověk trochu předvídat, co hledá. Zejména s úplnými základy je trochu problém, samozřejmě že to v nápovědě je, ale těžko najdete třeba cell array, když nevíte, že hledáte cell array.
Budeš používať modulo a ak zvyšok je nula zapíšeš dané číslo do ďalšieho pola. Jednoduchá podm9enka if/else nebo použiť ternary operator. To vložit do cyklu for kde i bude index pola.
U reťazca je to obdobne.
Takhle to dopadá, když někdo chce programovat, aniž by se naučil a pochopil algoritmizaci problému.
Načrtnu postup:
Určitě by se to dalo postupovat i jinak, tohle je jedna z možností.
Tak tak, základem každého programu v libovolném jazyce je algoritmizace problému.
Jen tak pro zajímavost speciálně pro matlab se to dá vyřešit i bez explicitního cyklu, zkusím naznačit