Dobrý den, do školy jsem dostala, pro mě neřešitelný, úkol v programu Microsoft Visual C#. Mám sestavit algoritmus, který vypočte se zadanou přesností hodnotu funkce cos(x). Přiložila jsem obrázek této funkce. Budu ráda za každou pomoc nebo řešení.
Fórum › C / C++
Algortimus funkce cos(x)
![](img/forum_vlakno_help_vyreseno.png)
Neumíš napsat cyklus na násobky dvou a otáčení znaménka?
Jinak teda i tu první jedničku můžeš napsat jako další kroky, pokud půjdeš od nuly: 0^0 / 0! = 1 / 1.
To otáčení znaménka můžeš udělat násobením 1 nebo -1 a to zase můžeš spočítat podle kroku cyklu.
Takže úplně obecně takhle:
sum = 0;
for (i = 0; i <= max; i++)
sum += (pow(-1, i) * pow(x, i * 2)) / fac(i * 2);
Milionkrát řešená věc, kterou by nějak měl zvládnout každý.
#4 Kit
Jen doplním:
4! = 2! * 3 * 4
6! = 4! * 5 * 6
a podobně s mocninama
x^4 = x^2 * x^2
x^6 = x^4 * X^2
kde x^2 je x*x
Určitě to jde udělat v cyklu. V podstatě jsou třeba 3 proměnné - jedna si pamatuje "okamžitou" mocninu x, druhá "okamžitý" faktoriál a třetí znaménko jako "okamžitou" mocninu -1
hu
O hlavu jí to neomlátí, protože to nejspíš je přesně to, co chtěl. Využití předchozích hodnot se samo nabízí a zase je to věc, nad kterou není potřeba přemýšlet.
double mycos(double x)
{
unsigned long f = 1;
double sum = 0.0, p = 1.0;
for(int i = 2, s = 1; i <= max2; i += 2, s = -s)
{
p *= x * x;
f *= i * (i-1);
sum += s * p / f;
}
return 1.0 - sum;
}
#6 gna
Ještě se to dá drobet zjednodušit:
double mycos(double x)
{
double p = 1.0;
double sum = 1.0;
for(int i = 2, s = -1; abs(p) < eps; i += 2, s = -s)
{
p *= x * x / i / (i-1);
sum += s * p;
}
return sum;
}
ok. PS, tyhle zapisy nemam moc rad, protoze se z nich hur da vycist, co ovlada cyklus a co je mimo nej nezavisle. Jakoze, kdyz bys chtel zvysit pocet cyklu, tak musis zkouknout vsechno a najit tu promenou, kterou je treba zmenit.
for(int i = 2, s = 1; i <= max2; i += 2, s = -s)
Tady vidis, ze cyklus je ovladany ickem a max2
s = 1;
for (int i = 2; i <= max2; i += 2)
{
s = -s;
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
F-ce Sin, Cos ... — založil Lodhart
Chyba v COS, počítá nesmisly — založil Coal_Asasin
Moderátoři diskuze