Duda con este codigo

Iniciado por exanime, 12 Septiembre 2014, 01:53 AM

0 Miembros y 1 Visitante están viendo este tema.

exanime


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

Aberroncho

#1
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


seno = (valor1/f) * x * exp(valor2 + seno);



tendrá un valor indefinido en la variable "seno".
"La ignorancia es la noche de la mente, pero una noche sin Luna ni estrellas."
(Confucio)

flony

en la parte valor1 = (-1) ^n;
debería ser pow (-1, n);
si un problema no tiene solucion entonces no es un problema...es algo inevitable

exanime

le cambie el
pow (-1, n);
pero nada me sigue diciendo
0 comparado con el valor real de cualquier numero, no se que hacer :S

engel lex

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 (cpp) [Seleccionar]
1-(2*n%2)

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

exanime

#5
#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 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!

flony

bue pase por esa si te sirve
http://foro.elhacker.net/programacion_cc/serie_de_taylor_para_senosolucionado-t359040.0.html
tu probema pasa basicamente porque la parte de
//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"
si un problema no tiene solucion entonces no es un problema...es algo inevitable