elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con errorC2296 en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con errorC2296 en C++  (Leído 4,132 veces)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con errorC2296 en C++
« Respuesta #10 en: 22 Marzo 2014, 19:08 pm »

No recomiendo para nada usar pow aquí, es muy mala práctica ya que pow es una función relativamente costosa y aquí no la necesitas.

La solución que propone yoel_alejrando soluciona el problema. Aunque yo opto por esta otra, más corta, más concisa, sin comparaciones y sin copypastear líneas:

Código
  1. int signo[2] = {1,-1};
  2. for(i=1; i<=n; i++)
  3.   pi = pi - signo[i%2]/(2*i+1);
  4.  


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con errorC2296 en C++
« Respuesta #11 en: 22 Marzo 2014, 20:40 pm »

No recomiendo para nada usar pow aquí, es muy mala práctica ya que pow es una función relativamente costosa y aquí no la necesitas.
....................................

Totalmente de acuerdo.

Antes que nada, le sobraban dos librerías,  <fstream>, <string> y le habría faltado tal como lo tenía  <cstdlib> para el system. Ahora con getchar faltaría <cstdio> y sin pow sobraría <cmath>.

Me apunto al no uso de pow y, como simple variante al método de amchacon, ya que creo que "*" es menos costosa como operación que "%":


Código
  1. #include <iostream>
  2. #include <cstdio>
  3.  
  4. using namespace std;
  5.  
  6. int main () {
  7.   double pi,serie=0.0;
  8.   int n,i,mas_menos=1 ;
  9.   cout << "Entre el numero de terminos a tomar: ";
  10.   cin >> n;
  11.   for(i=0; i< n; i++){
  12.      serie+=(1./(2*i+1))*mas_menos;
  13.      mas_menos*=-1;
  14.   }
  15.   pi=4*serie;
  16.   cout << pi<< endl;
  17.   getchar();
  18.   return 0;
  19. }

Yen mi código es" i<", no" i<=" ya que en dicho caso tomaría un sumando de más.

Observar el 1. en 1./(2*i+1) ya que de poner sólo 1/(2*i+1) la operación sería entre enteros y no daría el resultado esperado de double.

Y Feynmann para cuando cuelgues  código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.


« Última modificación: 23 Marzo 2014, 20:04 pm por leosansan » En línea

Feynmann

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: Problema con errorC2296 en C++
« Respuesta #12 en: 23 Marzo 2014, 15:56 pm »


Me ha molado mucho ver esas dos ultimas formas de hacerlo, sobre todo la que propone leosansan, deduzco que
 
Código
  1. variable = variable + algo. /* Es lo mismo que*/ variable += algo
Lo de las librerias tengo que tener cuidado por lo que veo.


Gracias un saludo!!
 
En línea

Novato curioso, me gustaria aprender a programar bien en C/C++ por eso estoy aqui. Pero puedo echar una mano a cualquiera que me lo pida en temas de electronica!
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con errorC2296 en C++
« Respuesta #13 en: 23 Marzo 2014, 16:21 pm »

Me ha molado mucho ver esas dos ultimas formas de hacerlo, sobre todo la que propone leosansan, deduzco que
 
Código
  1. variable = variable + algo. /* Es lo mismo que*/ variable += algo
Lo de las librerias tengo que tener cuidado por lo que veo.


Gracias un saludo!!
 

Gracias, gracias, me alegra que te haya gustado el "mas_menos".  ;)

Y sí, son formas equivalentes y más usuales:


Código
  1. variable = variable + algo. /* Es lo mismo que*/ variable += algo

Código
  1. variable = variable * algo. /* Es lo mismo que*/ variable *= algo

Código
  1. variable = variable - algo. /* Es lo mismo que*/ variable -= algo

Código
  1. variable = variable / algo. /* Es lo mismo que*/ variable /= algo

Y alguna más.

Y lo de las librerías no estaba mal en si, sólo que sobraban y es un "cante" para si te corrige algún profesor darse cuenta de tus lagunas, que tenerlas las tendrás, como todos, pero una máxima del estudiante es que al menos no se noten.

¡¡¡¡ Saluditos! ..... !!!!





En línea

Feynmann

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: Problema con errorC2296 en C++
« Respuesta #14 en: 23 Marzo 2014, 18:28 pm »

Gracias de nuevo por el aporte!

Que va, estoy aprendiendo por mi cuenta para poder implementarlo a cosillas del curro que necesito... ya me gustaria estar estudiando! jajaja
En línea

Novato curioso, me gustaria aprender a programar bien en C/C++ por eso estoy aqui. Pero puedo echar una mano a cualquiera que me lo pida en temas de electronica!
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Problema con errorC2296 en C++
« Respuesta #15 en: 24 Marzo 2014, 20:47 pm »

Me perdí de un rato en el foro, pero bueno .....

Respecto a getchar() y system("PAUSE"), aunque operan similarmente, la primera es estándar y funcionará en cualquier sistema. La segunda, se puede garantizar siempre que estés en un sistema Windows.

Lo que ocurre es que system(str) pasa la cadena str al procesador de comandos del sistema operativo. Hacer system(str) es lo mismo que abrir el Símbolo de Sistema de Windows y escribir el contenido de la cadena str en él. Y como es de suponer, la cadena será interpretada en el contexto del sistema operativo de que se trate.

Por esta razón, recomendamos usar getchar() que tiene un comportamiento predecible. Lo que hace

c = getchar();

es esperar la pulsación de una tecla, seguida de ENTER (o de la secuencia EOF) y depositar el código ASCII de esta tecla en c. Si pulsas 'A' y luego ENTER asignará en c el valor 97 que es el código ASCII de la letra 'a'.
Si pulsas sólo ENTER entonces retornará al programa inmediatamente. Por eso la invocación de getchar() es para los programadores de C un equivalente a "Pulse ENTER para continuar", jejeje.

=====================================
De todas las soluciones publicadas creo que la mejor (más eficiente computacionalmente) sería la de leosansan porque no requiere siquiera calcular el módulo i%2. Yo la reduciría "un pelín" con:
Código
  1. int signo = -1;
  2.  
  3. for (i = 1;  i<= n; i++, signo *= -1)
  4.   pi = pi + signo * 1.0/(2*i+1);

y buena la observación del "1." en lugar de "1".
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,354 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines