Pomoć oko zadatka

Teme vezane za console/GUI programiranje u C/C++ jeziku
2 post(ov)a • Stranica: 1/1.

Pomoć oko zadatka

PostPostao/la krga86 » 20 ruj 2015, 20:03

Pozdrav
Uradio sam zadatak za izračunavanje sinusa nekog ugla u radijanima.Medjutim negde pravim gresku,molio bih vas za pomoc?

cpp code
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int n,r,z;
double tmp(0),alfa;

cout<<"Unesite ugao alfa u radijanima?\n";
cin>>alfa;

cout<<"Unesite broj clanova reda?\n";
cin>>n;
double result=sin(alfa);
for(int i=0;i<=n;i++)
{

if(i%2==1)

{
long faktorijel=1;
r=2*i+1;
z=(pow(alfa,r));
for(int k=1; k<=r ;k++)
{
faktorijel=faktorijel*k;
}
tmp-=z/faktorijel;

}

else

{
long faktorijel=1;
r=2*i+1;
z=(pow(alfa,r));
for(int m=1; m<=r ;m++)
{
faktorijel=faktorijel*m;
}
tmp+=z/faktorijel;

}
}cout<<"sinus je\n"<<tmp;
cout<<"sinus je\n"<<result;
}

Re: Pomoć oko zadatka

PostPostao/la gagiD » 21 ruj 2015, 02:18

Poz i dobrodosao.

1. Za kod koristi BBCode(pise gore Select syntax), mnogo je preglednije
2. Ne stedi space i tabove :D Gore je SyntaxHighlighter malo popravio situaciju. Moras izabrati stil kojim ces pisati, prvo da tebi bude citljivije pa i ostalima.
https://en.wikipedia.org/wiki/Indent_style

Za zadatak koristis ovu formulu?
slika

Rjesenje bi mozda moglo izgledati ovako:
cpp code
#include <iostream>
#include <cmath>

using namespace std;

unsigned long long fac(unsigned long long n) {
return n == 1 ? 1 : n * fac(n - 1);
}

double sin666(double x) {
double sinX = x;
bool isPositive = false;

for (int i = 3; i <= 10; i += 2) {
double tmp = pow(x, i) / (double)fac(i);

if (isPositive) {
sinX += tmp;
isPositive = false;
} else {
sinX -= tmp;
isPositive = true;
}
}

return sinX;
}


int main()
{
double alfa;
cout << "Unesite ugao alfa u radijanima" << endl;
cin >> alfa;

double result = sin(alfa);
double result2 = sin666(alfa);

cout << "sinus(cmath) je " << result << endl;
cout << "sinus(666) je " << result2 << endl;
}


Ali opet imas problem s tacnoscu:
Kod: Označi sve
[03:14:02-gagi@gagi sin]$ ./sin
Unesite ugao alfa u radijanima
0.123
sinus(cmath) je 0.12269
sinus(666) je 0.12269
[03:15:06-gagi@gagi sin]$ ./sin
Unesite ugao alfa u radijanima
2.465
sinus(cmath) je 0.62614
sinus(666) je 0.626632


Problem je sto faktorijel jako brzo raste pa overflow desava brzo. Tako da ti sigurno treba BigInt tip, a mozda jos nesto :D


2 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.