Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ejercicio de suma C++

Estas en el tema de Ejercicio de suma C++ en el foro de C/C++ en Foros del Web. Amigos programadores, A ver si le dan un vistazo a esta resolución y me confirman si lo hice bien o fallé en algo (o quizás ...
  #1 (permalink)  
Antiguo 28/05/2015, 20:12
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Ejercicio de suma C++

Amigos programadores,

A ver si le dan un vistazo a esta resolución y me confirman si lo hice bien o fallé en algo (o quizás fallé en todo):

Construir un programa NO recursivo qué:
1) Lea un número entero n
2) Calcule el valor de la suma s



3) Imprimir el resultado del valor calculado s

*Tener en cuenta que i es un número entero que no asume el valor -1

Resolución:

// pruebaa.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include<iostream>
using namespace std;

int main()
{
unsigned long long int n,i,s;
cout << "Introduzca numero: ";
cin >> n;
{
for(i=-20;i!=-1;i++)
{
s = n*(i/(i+1)^2);
}
cout << "suma: " <<s<< endl;
system("pause");
}
}


Gracias.
  #2 (permalink)  
Antiguo 29/05/2015, 00:21
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Ejercicio de suma C++

* La función recorre el intervalo -20<=i<=n, con un salto en i=-1. Tu estás haciendo el intervalo -20<=i<-1. Queda claro que no estás cubriendo el mismo rango

* La función es un sumatorio, es decir, hay que acumular los resultados parciales. Sin embargo tu ecuación: s = n*(i/(i+1)^2) no acumula el valor de 's' en cada iteración, sino que los valores previos se pierden

* El símbolo '^' se usa para realizar una operación XOR, dudo muchísimo que una operación XOR pueda ser equivalente al cálculo de una potencia.

* La ecuación que te han puesto únicamente usa 'n' como límite del sumatorio, en ningún caso forma parte de la ecuación... tu ecuación, en cambio, empieza incluyendo el valor de 'n'

* ¿Por qué has abierto una llave después del cin? Abrir llaves puede ser útil en determinados códigos pero me da que no sabes ni por qué lo has hecho.

Y, para terminar, si te fijas la ecuación es una división en la que el divisor va a ser SIEMPRE mayor que el denominador, luego el valor absoluto del resultado de cada iteración va a ser SIEMPRE menor que 1, es decir, "0.XXXXX". "unsigned long long int"... si bien es cierto que puede almacenar números enormes resulta que es totalmente inutil en tu caso: No solo no almacenas números enormes sino que además la clave son los decimales, detalle que el tipo elegido no es capaz de gestionar. Deberías plantearte usar float o double, con preferencia sobre este último.

Un saludo.
  #3 (permalink)  
Antiguo 29/05/2015, 05:51
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Ejercicio de suma C++

ow no puedo ayudar mucho en esta equacion. No llego a tanto =(

Lo único que puedo decir es que no se calcula pow de esta forma x^y si no que se hace pow(x,y);

Mire este video que es un buen ejemplo paraentender como funciona pow y tambien raiz cuadrada sqrt https://www.youtube.com/watch?v=dQjnF_4PPQs

Si me muestra la formula de lo que quieres hacer sin tantos simbolos, te la puedo montar pero realmente no entiendo mucho de mates como dije.

descríbanos paso a paso el procedimiento o espere una ayuda más productiva que la miá =(.
  #4 (permalink)  
Antiguo 29/05/2015, 07:52
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Ejercicio de suma C++

La ecuación la estas poniendo mal. No estas haciendo un sumatorio sino cogiendo el último valor y multiplicándolo por N
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 29/05/2015, 13:50
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

Hola eferion, gracias por tu respuesta, pido disculpas por no haber puesto más empeño en mi resolución.

Esta vez le he dedicado un tiempo mayor a la resolución de mi ejercicio y acá va:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include<iostream>
using namespace std;

void main()
{
int a,b,i,n;
cout<<"Ingrese el valor de n: ";
cin>>n;
double c;
a=0;
b=0;
c=0;
for (i=-20; i<=n; i++)
{
a=a+i;
b=b+i+1;
c=b*b;
}
cout<<"Resultado de la suma es: "<<a/c;
getch();
}

Respecto de esto: *Tener en cuenta que i es un número entero que no asume el valor -1 / tú me comentas que la operación debe saltarse el -1

Hice algunas pruebas en el caso de que el valor de n fuer n=2 e i fuera i=-5 i <=n

a=a+i

-5
-5-4=-9
-9-3=-12
-12-2=-14
-14-1=-15
-15-0=-15
-15+1=-14
-14+2=-12


el resultado no seria -12 sino -11

b=b+i+1

-5+1=-4
-4-4+1=-7
-7-3+1=-9
-9-2+1=-10
-10-1+1=-10
-10-0+1=-9
-9+1+1=-7

y en este caso no afecta.

Hay forma de condicionar el for o solo bastaría con restarle un 1 al resultado?

cout<<"Resultado de la suma es: "<<a/c-1;

Gracias por su ayuda.

vangodp el vídeo me abre otro tema.

Gracias Malenko, ya me di cuenta que hice todo mal e intento rectificar.
  #6 (permalink)  
Antiguo 29/05/2015, 14:13
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Ejercicio de suma C++

Tienes que tener en cuenta que (a1/b1)+(a2/b2) no es igual a (a1+a2)/(b1+b2). Lo puedes verificar en seguida: (10/5)+(9/3)=2+3=5, mientras que (10+9)/(5+3)=19/8 y, desde luego, 5!=19/8.

Dicho esto, la solución que intentas aplicar de ir sumando dividendos por un lado y divisores por otro no es válida. ¿Por qué tienes tanto miedo a realizar un sumatorio de divisiones?

Por cierto, el intervalo debe ignorar i=-1, cosa que no está haciendo.

Un saludo
  #7 (permalink)  
Antiguo 29/05/2015, 15:33
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

Gracias por tu pronta respuesta.

Creo que a lo que te refieres es que la operación debería ser algo así como de corrida: ejemplo i=-2 i<=n n =2

-2/(-2+1)^2 = -2
-1/(-1+1)^2 = esto te piden que lo saltes porque sino te saldría error de división al dividir por 0
0/(0+1)^2 = -2
1/(1+1)^2 = -1.750
2/(2+1)^2 = -1.527777777777780

qué opinas? lo voy captando o nada? que puedo hacer para saltarme el -1?

editado: ya investigué, para saltarme el -1 debo usar la sentencia continue... mañana prosigo.

Esta es mi última resolución de la noche, a ver que opinas:

void main()
{
double i,n;
cout<<"Ingrese el valor de n: ";
cin>>n;
double a;
a=0;
for (i=-20;i<=n;i++) {
if (i==-1) continue;
a=a+(i/((i+1)*(i+1)));
}
cout<<"Resultado de la suma es: "<<a;
getch();
}

Última edición por Ludemarii; 29/05/2015 a las 21:21
  #8 (permalink)  
Antiguo 30/05/2015, 13:50
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Ejercicio de suma C++

Eso ya tiene mejor pinta
  #9 (permalink)  
Antiguo 30/05/2015, 14:31
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

Gracias por la ayuda.
  #10 (permalink)  
Antiguo 31/05/2015, 17:16
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

Hola, estoy practicando un poco de funciones y quise resolver este ejercicio invocando una función pero algo esta sucediendo... repaso la secuencia y no encuentro el error.

Agradecería si le pudiesen dar una mirada.

Código C++:
Ver original
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <conio.h>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. double suma(double n) {
  9. int i;
  10. double a =0;
  11. for (i=-20;i<=n;i++) {
  12.     if (i==-1) continue;
  13. a=a+(i/((i+1)*(i+1)));
  14. }
  15. return a;
  16. }
  17. int main(){
  18. double n;
  19. cout<<"Ingrese el valor de n: ";
  20. cin>>n;
  21. cout<<"Resultado de la suma es: "<<suma(n)<<endl;
  22. getch();
  23. }

Última edición por Ludemarii; 31/05/2015 a las 17:26
  #11 (permalink)  
Antiguo 31/05/2015, 18:19
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Ejercicio de suma C++

nao será include "stdafx.h" cambiar por #include "stdafx.h" ya que falta #??
  #12 (permalink)  
Antiguo 31/05/2015, 19:11
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

No entendí, vangodp. No falta el # ... igual si faltase no me dejaría ejecutar... algo raro sucede en la función, es lo que creo.
  #13 (permalink)  
Antiguo 01/06/2015, 00:12
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Ejercicio de suma C++

Cita:
Iniciado por Ludemarii Ver Mensaje
Hola, estoy practicando un poco de funciones y quise resolver este ejercicio invocando una función pero algo esta sucediendo... repaso la secuencia y no encuentro el error.
¿podrías ser un poco más explícito?
  #14 (permalink)  
Antiguo 01/06/2015, 00:53
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Ejercicio de suma C++

Tu problema reside en que todo lo que está dentro del paréntesis son valores enteros y por tanto c++ te los resolverá como valores enteros (truncando y, por tanto, perdiendo la parte decimal). Una forma de solucionarlo es multiplicar alguno de esos valores por 1.0 o cambiar esos 1 que tienes puestos por 1.0 de tal manera que ahora al ser 1.0 c++ interpreta que no estás trabajando con enteros. Yo lo haría convirtiendo dichos 1 a 1.0 por que lo considero la solución que menos ensucia el código.

Código C++:
Ver original
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <conio.h>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. double suma(double n) {
  9. int i;
  10. double a =0;
  11. for (i=-20;i<=n;i++) {
  12.     if (i==-1) continue;
  13. a=a+(i/((i+1.0)*(i+1.0)));
  14. }
  15. return a;
  16. }
  17. int main(){
  18. double n;
  19. cout<<"Ingrese el valor de n: ";
  20. cin>>n;
  21. cout<<"Resultado de la suma es: "<<suma(n)<<endl;
  22. getch();
  23. }
  #15 (permalink)  
Antiguo 01/06/2015, 02:57
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Ejercicio de suma C++

Bueno, aparte de lo comentado por xKuZz, me reafirmo.

Intenta exponer con más claridad tu problema. Básicamente por dos motivos:

  • El foro sirve de consulta para el resto de la gente. Si las dudas se exponen con claridad es más sencillo localizar preguntas similares usando el buscador del foro o Google
  • Dado que pretendes que te ayuden, no está de más intentar facilitar la vida a los voluntarios que te van a dedicar parte de su tiempo.
Un saludo.
  #16 (permalink)  
Antiguo 01/06/2015, 03:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Ejercicio de suma C++


Cita:
No entendí, vangodp. No falta el # ... igual si faltase no me dejaría ejecutar... algo raro sucede en la función, es lo que creo.
No ligue para ese ultimo jeje, se me fue la pinza, es que al copiar se me falto la # pero esta correcto.

Pero cuando te ocurra un error, no pongas el código solamente en el foro e espere que nosotros tengamos que salir catando bugs, porque te podemos sacar cosas que a lo mejor no es lo que te interesa, o incluso inventar cosas "imaginadas" como me paso. Además el foro como dijo eferion, no es solo para nosotros el foro, otras personas pueden hacer consultas y sacar información de temas ya contestados.

Intenta explicar que es lo que crees que pasa mal, o al menos explica que esperas que haga tu código, por que ni todos somos matemáticos.

Suerte Lu, practicar es lo que hace buenos programadores.
  #17 (permalink)  
Antiguo 01/06/2015, 11:53
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

Comprendo, las disculpas del caso.

La próxima seré mas explicita.

Gracias xKuZz, ahorita no estoy en una máquina con C++ así que no puedo hacer la comprobación, pero en cuanto entre a una con editor C++ lo compruebo.
  #18 (permalink)  
Antiguo 01/06/2015, 14:23
 
Fecha de Ingreso: mayo-2015
Ubicación: San Antonio de Huarochirí - Perú
Mensajes: 20
Antigüedad: 9 años
Puntos: 0
Respuesta: Ejercicio de suma C++

Gracias xKuZz, tenías toda la razón

Etiquetas: ejercicio, int, numero, programa, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:16.