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

Un ejercicio que me está frustrando.

Estas en el tema de Un ejercicio que me está frustrando. en el foro de C/C++ en Foros del Web. Buenas, soy bastante nuevo en el foro y mucho también en la programación. Estoy empezando con C++ y lo domino digamos que cercano a lo ...
  #1 (permalink)  
Antiguo 02/11/2011, 15:04
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Pregunta Un ejercicio que me está frustrando.

Buenas, soy bastante nuevo en el foro y mucho también en la programación. Estoy empezando con C++ y lo domino digamos que cercano a lo que se diría a medias...

Hoy estuve bastante frustrado porque no conseguía la manera de resolver la lógica de un problema que la profesora nos dejó, pero un amigo me dio un par de pautas y ya tengo el norte fijo.

El programa en sí es simple: "Un programa que lea un número ingresado por un usuario e imprima si es perfecto o no".

Un número perfecto es aquel cuya suma de sus divisores es igual a el mismo. Ejemplo: 6. 2 + 3 + 1= 6.

El código que tengo hasta ahora es este:

Código:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
	int x, aux, i; 
	cout <<"Ingrese un número"; 
	cin >>x;
	i = x;
	aux = x;
	while (i>0)
	i--;
		if (x%1 == 0)
		{
			aux = aux + i; 
		}
		if (x == aux)
			cout <<"El número es perfecto";
	return 0;
}
Y el problema que me presenta es que no importa que número ingrese, siempre, SIEMPRE me devuelve el mensaje "el número es perfecto".

He pensado también en hacerlo con un bucle for, que sería algo como for (i=0; i<=x; i--). Porque hasta donde entiendo debo decrecer la variable i (igualada al número ingresado por el usuario) para ir buscando cuales son los divisores... Aún no capto completamente la lógica, debo serles sincero, estoy trabajando casi por instinto y creo que ya es momento de lanzar mi duda a un sitio donde pueda discutir.

Gracias de antemano por cualquier ayuda.
  #2 (permalink)  
Antiguo 02/11/2011, 18:18
Avatar de DataLore  
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Un ejercicio que me está frustrando.

Ten en cuenta que si tu ciclo iterativo tiene mas de una linea debes encerrarlo entre llaves --> { }.
  #3 (permalink)  
Antiguo 02/11/2011, 18:24
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Un ejercicio que me está frustrando.

Primero que todo deberias usar llaves en el while....
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6.     int x, aux, i;
  7.     cout <<"Ingrese un número";
  8.     cin >>x;
  9.     i = x;
  10.     aux = 0;
  11.     while (i>0) {
  12.              i--;
  13.         if (x%i == 0)
  14.         {
  15.             aux = aux + i;
  16.         }
  17.          }
  18.         if (x == aux)
  19.             cout <<"El número es perfecto";
  20.     return 0;
  21. }


Ademas el modulo deberia ser por i y no por uno.

Fijate que en la wiki tienes otro algoritmo tambien...
http://es.wikipedia.org/wiki/N%C3%BAmero_perfecto
  #4 (permalink)  
Antiguo 02/11/2011, 20:29
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Un ejercicio que me está frustrando.

Sí, ya pude resolverlo. Estuve leyendo bastante el ejercicio de la wiki (el cual no comprendí por completo) y con un amigo pude sacar mis ideas para el programa... Al final el for me facilitó las cosas y en vez de decrecer la variable la hice incrementar, inicialicé i=1 y aux = 0, lo demás no fue tanto, solo un par de condicionales.

Etiquetas: ejercicio, programa, variables
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:28.