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

Numero perfecto en C

Estas en el tema de Numero perfecto en C en el foro de C/C++ en Foros del Web. Buenas, Tengo un problema con un programa, ya lo tengo hecho pero no veo por que no me funciona. este dice: Escribir un programa que ...
  #1 (permalink)  
Antiguo 03/09/2009, 16:29
 
Fecha de Ingreso: agosto-2009
Ubicación: Republica dominicana
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Numero perfecto en C

Buenas,
Tengo un problema con un programa, ya lo tengo hecho pero no veo por que no me funciona.

este dice: Escribir un programa que dado un número n determine si es o no un número perfecto. Un número es perfecto cuando la suma de sus factores son iguales. Ejemplo: 1+2+3=6, 1*2*3=6

Aqui esta como lo hice pero no me funciona

Código:
#include <stdio.h>
/*Escribir un programa que dado un número n determine si es o no un 
 * número perfecto.*/
int main() {
	int i, num, sum=0, mul=0;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
	
	for(i=1; i<num; i++) {
		mul=num%i;
		if(mul==0) {
			sum+=i;
		}
	}
	if(sum==mul){
		printf("El numero %d es perfecto.\n", num);
	}
	else
	printf("El numero %d NO es perfecto.\n", num);
	return 0;
}
Les agradeceria si encuentran el error, ya me canse de buscar y no lo veo
  #2 (permalink)  
Antiguo 03/09/2009, 17:17
Avatar de Slackin  
Fecha de Ingreso: noviembre-2007
Ubicación: Puerto Montt, Chile
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: Numero perfecto en C

Le hice unas modificaciones de forma rápida.
Segun Yo, funciona. Sólo tenías que añadir el numini, y ese es el que se compara con el
Código:
#include <stdio.h>
/*Escribir un programa que dado un número n determine si es o no un 
 * número perfecto.*/
int main() {
	int i, num, sum=0, mul=0;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
      	
	for(i=1; i<num; i++) {
		mul=num%i;
		if(mul==0) {
			sum+=i;
		}
	}
        /*sum se compara sum con num, y no con mul */
	if(sum==num){
		printf("El numero %d es perfecto.\n", num);
	}
	else
	printf("El numero %d NO es perfecto.\n", num);
	return 0;
}

Última edición por Slackin; 04/09/2009 a las 09:30 Razón: Tomando el consejo de Anubis_Slash
  #3 (permalink)  
Antiguo 03/09/2009, 19:42
 
Fecha de Ingreso: agosto-2009
Ubicación: Republica dominicana
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Numero perfecto en C

Muchas gracias Slackin ya vi cual era mi problema
el programa funciona bien :)
  #4 (permalink)  
Antiguo 03/09/2009, 20:24
Avatar de Slackin  
Fecha de Ingreso: noviembre-2007
Ubicación: Puerto Montt, Chile
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: Numero perfecto en C

.. Disculpa jarr18, pero te entregué un codigo errado. No me acordaba bien de la defincion de numero perfecto, asi que hice cosas como comparar la suma de los factores con el producto de ellos..
Ahora si que corregí de buena manera

Saludos
  #5 (permalink)  
Antiguo 03/09/2009, 21:17
 
Fecha de Ingreso: agosto-2009
Ubicación: Republica dominicana
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Numero perfecto en C

Ya vi que el programa solo funciona con el numero 6, pero gracias, encontre una forma de hacer que funcione pero esta no es muy eficiente

Si quieres puedo postear el codigo...
  #6 (permalink)  
Antiguo 04/09/2009, 09:22
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: Numero perfecto en C

hola jarr

entro al hilo pensando que deberias poner la forma que dices, para ver si la podemos hacer mas eficiente

por cierto no es necesario declarar otra variable como lo es numini, simplemente podias utilizar la misma variable num.
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #7 (permalink)  
Antiguo 04/09/2009, 09:31
Avatar de Slackin  
Fecha de Ingreso: noviembre-2007
Ubicación: Puerto Montt, Chile
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: Numero perfecto en C

Tiene mucha razón Anubis_Slash, lo acabo de corregir(arriba).
Sería bueno que muestres tu nuevo código, jarr18
  #8 (permalink)  
Antiguo 04/09/2009, 11:52
 
Fecha de Ingreso: agosto-2009
Ubicación: Republica dominicana
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Numero perfecto en C

Bueno aqui les dejo el código nuevo que hice:
Código:
#include <stdio.h>
#include <math.h>

int main() {
	int i, num;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
	
	for(i=1; i<num; i++) {
		if( pow(2, i)*(pow(2, i+1)-1)==num ) {
			printf("El numero %d es perfecto.\n", num);
			break;
		}
	}
		if(pow(2, i)*(pow(2, i+1)-1)!=num) {
			printf("El numero %d NO es perfecto.\n", num);
		}

	return 0;
}
  #9 (permalink)  
Antiguo 04/09/2009, 11:55
 
Fecha de Ingreso: agosto-2009
Ubicación: Republica dominicana
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Numero perfecto en C

Ahora si funciona bien el programaque hizo Slackin :D
  #10 (permalink)  
Antiguo 04/09/2009, 13:03
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años
Puntos: 5
Respuesta: Numero perfecto en C

hola de nuevo compañeros

me parece que de cualquier modo no esta bien todavia el pequeño programilla

de acuerdo al ejemplo que nos ofreces con el numero 6 en la respuesta de Slackin solamente entra 3 veces en la condicion esta:

Código:
mul=num%i;
		if(mul==0) {
			sum+=i;
		}
por lo que creo que nunca se cumplira la condicion de que sea un numero perfecto

por otro lado en la solucion de nuestro amigo jarr me parece que tampoco cumple la condicion porque estas elevando el mismo numero (2) a x potencia.

hay que tratar de buscar otra solucion....

si estoy mal corrijanme por favor


EDITO: perdon mi buen jarr veo que lo tuyo funciona de manera perfecta
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......

Última edición por Anubis_Slash; 04/09/2009 a las 13:13
  #11 (permalink)  
Antiguo 06/09/2009, 10:17
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: Numero perfecto en C

Buenas, he llegado al foro de rebote buscando otra cosa, y como siempre, uno tiene la mala costumbre de leerse lo que no busca por curiosidad y rebotar de sitio en sitio... Hasta llegar a remotos lugares xD.

No sabía lo que son los números perfectos, pero se me ocurren varias modificaciones en el código de Slackin (que personalmente me gusta más que el de jarr18 por no usar pow, es una función bastante pesada).

La primera es simple, la eliminación de una variable, "mul" y con ella la instrucción "mul=num%i;"

Código:
#include<stdio.h>

int main() {
	int i, num, sum=0;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
      	
	for(i=1; i<num; i++) {
		if(num%i==0) {
			sum+=i;
		}
	}
        /*sum se compara sum con num, y no con mul */
	if(sum==num){
		printf("El numero %d es perfecto.\n", num);
	}
	else
	printf("El numero %d NO es perfecto.\n", num);
	return 0;
}
Después podríamos parar el bucle en la mitad, o bien parando en num/2+1 (operación no muy costosa), o bien declarando una variable de tipo int "parada" que sea num/2+1 para no realizar la división en cada iteración, puesto que sabemos que el mayor divisor de num va a ser su mitad.

Código:
#include<stdio.h>

int main() {
	int i, num, sum=0, parada;
	
	printf("Introduzca el numero que desea verificar si es perfecto: ");
	scanf("%d", &num);
      	
	for(i=1, parada=num/2+1; i<parada; i++) {
	/* O bien for(i=1; i<num/2+1; i++){ y no declarar "parada".*/
		if(num%i==0) {
			sum+=i;
		}
	}
        /*sum se compara sum con num, y no con mul */
	if(sum==num){
		printf("El numero %d es perfecto.\n", num);
	}
	else
	printf("El numero %d NO es perfecto.\n", num);
	return 0;
}
En el return y demás no me meto, eso ya cuestión de gustos.

Última edición por JuanLVBR; 06/09/2009 a las 10:22 Razón: Desconocimiento a la hora de teclear código tabulado.
  #12 (permalink)  
Antiguo 07/09/2009, 20:51
 
Fecha de Ingreso: agosto-2009
Ubicación: Republica dominicana
Mensajes: 14
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Numero perfecto en C

Yo tampoco queria usar la función pow, pero no me quiso funcionar de la otra manera (por eso dije que era menos eficiente).
Anubis_Slash yo veo que el programa de Slackin funciona bien...

Me gusta la variante que hizo JuanLVBR, muy buena forma.
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 15:26.