Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: exanime en 12 Septiembre 2014, 01:53 am



Título: Duda con este codigo
Publicado por: exanime en 12 Septiembre 2014, 01:53 am
Código:
d#include <iostream>
#include <math.h>

using namespace std;

int main()
{
double seno, m, f;
int n;
int N;
double x;
double valor1 = 0;
double valor2 = 0;
double valor3 = 0;
N = 100;
n = 1;
m = 1;
f = 1;
cout<< "dame el valor de x \n";
cin>> x;
while (N>=n)
{
valor1 = (-1) ^n;
valor2 = (2*n+1);
while (m <= valor2) {
f = f*m;
m = m+1;
}
n++;
seno = (valor1/f) * x * exp(valor2 + seno);
}
cout<< seno << " comparado con " << sin(x) << endl;

return 0;
}

Quiero que la funcion que hice para hallar el seno de deacuerdo con la comparacion, la hice para saber el verdadero valos con mostrar senox, peor no se en que estoy fallando no me da el mismo valor a comparar, me podrian pegar una ayuda? no se que hago mal


Título: Re: Duda con este codigo
Publicado por: Aberroncho en 12 Septiembre 2014, 23:45 pm
En un primer vistazo y sin entrar a analizar el algoritmo, yo diría que el problema te puede venir de que no inicializas la variable "seno" antes de utilizarla por primera vez.

La primera pasada por la línea

Código:
seno = (valor1/f) * x * exp(valor2 + seno);


tendrá un valor indefinido en la variable "seno".


Título: Re: Duda con este codigo
Publicado por: flony en 13 Septiembre 2014, 19:25 pm
en la parte
Código:
valor1 = (-1) ^n;
debería ser
Código:
pow (-1, n);


Título: Re: Duda con este codigo
Publicado por: exanime en 14 Septiembre 2014, 04:07 am
le cambie el
Código:
pow (-1, n);
pero nada me sigue diciendo
0 comparado con el valor real de cualquier numero, no se que hacer :S


Título: Re: Duda con este codigo
Publicado por: engel lex en 14 Septiembre 2014, 04:44 am
Código:
pow (-1, n);

como la progresion del poder de -1 va

-1, 1, -1, 1, -1, 1.... al infinito,

es más facil hacer

Código
  1. 1-(2*n%2)

Código:
si n es impar 
n%2 = 1
1*2 = 2
1-2= -1

si n es par
n%2 = 0
0*2=0
1-0=1

y evitas usar potencias (incluso puedes llevar un acumulador y listo para evitar el modulo), no se si me di a explicar :P


Título: Re: Duda con este codigo
Publicado por: exanime en 16 Septiembre 2014, 17:50 pm
Código:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
double seno, m, f;
int n;
int N;
double x;
double valor1 = 1;
double valor2 = 1;
double valor3 = 1;
N = 100;
n = 1;
m = 1;
f = 1;

//si n es impar
n%2 = 1
1*2 = 2
1-2= -1

//si n es par
n%2 = 0
0*2=0
1-0=1

cout<< "dame el valor de x \n";
cin>> x;
while (N>=n)
{
valor1 = 1-(2*n%2);
valor2 = ((2*n%)+1);
while (m <= valor2) {
f = f*m;
m = m+1;
}
n++;
seno = (valor1/f) * x * exp(valor2 + seno + 1);
}
cout<< seno << " comparado con " << sin(x) << endl;
system("pause");

return 0;
}

Edito:
lo que basicamente debe hacer el programa es preguntarme un numero cualquiera real
y darme el valor del SEN(X) sin usar la funcion factorial definida en librerias si no haciendola arriba que las defini como M y F, la formula es esta la que trato de poner para que me de el valor (http://upload.wikimedia.org/math/7/7/8/7783179ac90bb216947ad6585e277b21.png) y lo comparo con el valor real del sen(X) para saber si esta bien o no.

y asi lo arme pero la verdad me sigue dando asi
0 comparado con el valor real del sen(X)
y he mirado y nada, enserio he tratado de varias formas y nada :(
Ayuda PORFAVOR!


Título: Re: Duda con este codigo
Publicado por: flony en 16 Septiembre 2014, 18:30 pm
bue pase por esa si te sirve
http://foro.elhacker.net/programacion_cc/serie_de_taylor_para_senosolucionado-t359040.0.html (http://foro.elhacker.net/programacion_cc/serie_de_taylor_para_senosolucionado-t359040.0.html)
tu probema pasa basicamente porque la parte de
Código:
//si n es impar 
n%2 = 1
1*2 = 2
1-2= -1

//si n es par
n%2 = 0
0*2=0
1-0=1
deberían ser funciones que el while envíen información se ejecuten y vuelvan al while, es una opcion, la otra seria que lo haga dentro del while, recorda que "n" es la potencia y eso deberia ir iteracactuando a cada movimiento que hace el while desde 1 a 100
ojala haya sido claro  :rolleyes: y lo leas antes que te salgan diciendo, COMPRATE UN LIBRO APRENDE Y VOLVE"