Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Hezký večer, mám příklad do školy z Matlabu, už nad tím sedím nějakou dobu a nevím si rady.
Vytvořte M-funkci o dvou vstupních proměnných a jedné výstupní proměnné pro výpočet kombinačních čísel, tj. . Ošetřete, aby se výpočet kombinačních čísel prováděl jen z hodnot vhodných celých nezáporných čísel a aby se při zadání jiných hodnot objevilo chybové hlášení 'Ze zadaných hodnot kombinační číslo nelze určit!'.
Zkoušela jsem
function[N]=nchoosek (n, k)
%CombiCislo
if isscalar(n)&isreal(n)&(n>=0)&floor(n)==n
N=1;
for k
N=(n-k+n)/factorial(k) ;
end
else
error('Ze zadaných hodnot kombinační číslo nelze určit!')
end
Ale hází chybu. Prosím můžete mi někdo poradit? Děkuju moc
PS: Omlouvám se za zlomek místo kombinace, ale tu tady neumím napsat.
Offline
↑ Gilgraen:
Ahoj,
tvoje podmínka ignoruje, že máš omezení i na k. Tedy správná podmínka bude:
if isscalar(n)&isreal(n)&(n>=0)&(floor(n)==n)&isscalar(k)&isreal(k)&(k>=0)&(floor(k)==k)&(n>=k)
Potom se rozhodně podívej na cyklus for, protože to máš hodně divně. Asi ti něco vypadlo při přepisování. "for k" mi octave nebere... Každopádně ten vzorec v cyklu máš také špatně.
Jde o to, jestli se nějak implicitně předpokládá, že bys měl na té funkci procvičit cykly. Pokud ne, tak bude lepší, když si kombinační číslo přepíšeš do ekvivalentního tvaru:
Pak stačí jen vypočítat tři faktoriály a máš výsledek.
Pokud si máš procvičit cykly, tak "zapomeň" na funkci pro výpočet faktoriálu a vypočítej si čitatel:
N = 1 for i=(n-k+1):n N=N*i; endfor
Podobně si v cyklu for i=1:n vypočítáš i faktoriál.... Mimochodem, tyhle dva cykly můžeš pomocí podmínky spojit do jednoho. Zkus si to jako cvičení udělat.
Offline
Stránky: 1