Autor Tema: Ayuda con programas de C++

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

03 Mayo, 2010, 06:09 pm
Leído 2180 veces

pher

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 29
  • Karma: +0/-0
  • Sexo: Femenino
Hola a todos!
Estoy intentando realizar algunos programas en C++ y estoy atascada en algunos.
En uno me piden escribir un programa para calcular cos(x) a partir de su serie de potencias. El problema es que, al dividir por el factorial, enseguida me da error por dividir por un numero demasiado grande. Pero con enseguida me refiero en la segunda o tercera iteracion! Seguramente tendre mal programado el algoritmo, alguien me echa un cable?
Por otro lado tambien estoy algo atascada en la programacion del algoritmo de steffensen para calcular raices de funciones.
Agreadeceria que alguien me echara una mano. Muchas gracias a todos! ;)

03 Mayo, 2010, 06:45 pm
Respuesta #1

Phicar

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 513
  • Karma: +1/-0
  • Sexo: Masculino
    • redinfocol.org
Seria bueno que pusieras el algoritmo para tratar de ayudarte sobre ese :)

sobre lo de stteferson, publica lo que tienes tambien..de 0's es dificil ayudarte :)
redinfocol.org

03 Mayo, 2010, 06:53 pm
Respuesta #2

pher

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 29
  • Karma: +0/-0
  • Sexo: Femenino
Vale, a ver, creo que tengo el de Steffensen, creo que he conseguido que funcione bien (perdonad, a lo mejor encontrais mi manera de programar un poco cutre, pero soy un poco novata xD):
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;

//Funcion
double funcion (double x)
{
       return pow(x,2) - cos(x);
}

int main()
{
    double x;
    double ant=1;
    double cuad;
    double fun;
    double inter;
    double fun2;
    double res;
    double epsilon=1;
    int i=0;
   
    while (epsilon>1.e-10)
    {
          fun=funcion(ant);
          cuad=fun*fun;
          inter=ant+fun;
          fun2=funcion(inter);
          x=ant-(cuad)/(fun2-fun);
          epsilon=ant-x;
          res=x;
          ant=x;
          i++;
    }
   
    cout << "Numero de iteraciones= " << i << endl;
    cout << "Raiz de la funcion= " << setprecision(10) << res << endl;
   
    system("pause");
}

En cuanto al del coseno, lo único que tengo es esto:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
   float i=30; int j=10, m, k; double fact=1;
   float t, res=0;
   float uno=-1;
   ofstream fichero;
      
   fichero.open("cosenos.txt");
   if(!fichero)
      cout << "Error al abrir el fichero" << endl;
   else
   {
      while (i<=150)
      {
              while(j>0)
              {
                  k=2*j;
                  while (k>0)
                  {
                       
                        fact=fact*k;
                        k--;
                  }
                  t=(pow(uno,j)*pow(i,2*j))/fact;
                  res=res+t;
                  cout << res << endl;
                  j--;
              }
              j=10;
              fichero << setprecision(12) << i << "\t" << res << endl;
              cout << setprecision(12) << i << "\t" << res << endl;
              i=i+30;
              res=0;
              fact=1;
             
        }
      
      fichero.close();
   }
   system ("pause");
}
El profesor me lo miro y me dijo que era correcto, pero muy bien no tiene que estar, porque se me va a la porra...
Muchas gracias a todos! ;)

04 Mayo, 2010, 03:40 am
Respuesta #3

topo23

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 937
  • Karma: +0/-0
En la parte del coseno hay un error en tu codigo, no inicializas correctamente la variable fact cada vez que vas a calcular el factorial

Código: [Seleccionar]
          while (i<=150)
          {
              while(j>0)
              {
                  k=2*j;
                  fact = 1.0; // <--- No reinicializabas esta variable
                  while (k>0)
                  {
                       
                        fact=fact*k;
                        k--;
                  }
                  t=(pow(uno,j)*pow(i,2*j))/fact;
                  res=res+t;
                  cout << res << endl;
                  j--;
              }

.

04 Mayo, 2010, 03:03 pm
Respuesta #4

pher

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 29
  • Karma: +0/-0
  • Sexo: Femenino
Ostras, es verdad! Por eso el factorial se hacia taaaan grande!
Muuchas grancias!  ;D