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

[SOLUCIONADO] De for a While

Estas en el tema de De for a While en el foro de C/C++ en Foros del Web. Hola!! Es mi primer mensaje aquí así que me gustaría presentarme ante todos ustedes con un cordial saludo. El caso es que hace apenas 2 ...
  #1 (permalink)  
Antiguo 27/10/2013, 11:26
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
De for a While

Hola!! Es mi primer mensaje aquí así que me gustaría presentarme ante todos ustedes con un cordial saludo.

El caso es que hace apenas 2 meses que he empezado un con C en un Grado superior y voy aprendiendo por mi cuenta también...

El caso es que nos envió un pequeño ejercicio de buscar el numero perfecto, yo me puse manos a la obra y una vez terminado se lo entregué para mi sorpresa me dijo que no quería el ejercicio hecho con FOR sino con WHILE ....

Yo nunca he trabajado con while y por mas que leo la teoría no acabo de terminar de pillarlo...

Alguien tiene alguna idea de si este programa es posible de hacerlo con while? quizás estoy dando palos de ciego y con la estructura que he montado no es posible.

Código:
#include<stdio.h>

int main(void) {

	int a, numero, suma=0;
	
	printf("Introduce un numero y comprobemos si es perfecto: ");
	scanf("%d", &numero);
      	
	for(a=1; a<numero; a++) {
		
                        if(numero%a==0) 
                       
                         {
                          suma+=a; 
                         }
	                                 }
       
	if(suma==numero)

                {
		printf("El numero %d SI es perfecto, bien.\n", numero);
	        }

	else
        
        {
	printf("El numero %d por desgracia no es perfeco, vuelva a intentarlo.", numero);
}


	return 0;
}
Alguna idea?

Gracias por su disposición a la ayuda
  #2 (permalink)  
Antiguo 27/10/2013, 12:00
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main(void) {
  4.  
  5.     int a, numero, suma;
  6.     a = 1;
  7.     numero = 0;
  8.     suma = 0;
  9.    
  10.     printf("Introduce un numero y comprobemos si es perfecto: ");
  11.     scanf("%d", &numero);
  12.      
  13.        
  14.        
  15.         while ( a < numero )
  16.     {
  17.        a++;
  18.        if(numero%a==0)                
  19.       {
  20.         suma+=a;
  21.       }
  22.    
  23.     }
  24.    
  25.     if(suma==numero)
  26.    {            
  27.         printf("El numero %d SI es perfecto, bien.\n", numero);
  28.    }
  29.     else
  30.    {
  31.        printf("El numero %d por desgracia no es perfeco, vuelva a intentarlo.", numero);
  32.    }
  33.  
  34.     return 0;
  35. }
  #3 (permalink)  
Antiguo 27/10/2013, 12:09
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

Como ves for y while son lo mismo jajaj,
El switch se parece a if-else, diferente formas de hacer lo mismo, usas la que te convenga.
El for es que le puedes poner 3 sentencias juntas entre los() pero da igual, la cosa es tener un contador que vaya aumentando.
En tu programa tenga en mente que int a es un contador que va aumentando a cada pasada.
Siempre debe tener un tope que es la variable numero y la 3ª es a++ que puedes poner abajo en la primera linea de while.
para ese caso for es mas cómodo pero tu maestro quiere que domines ambos modos que es mas que correcto ;)
saludos y mucha suerte.
  #4 (permalink)  
Antiguo 27/10/2013, 12:10
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: De for a While

Un bucle for funciona así:

Código:
for( inicialización/es de variable/s contador; condición para continuar en bucle; operación/es que afectan a la/s variable/s contador/as){ código }

Un bucle while funcionaría así:
Código:
Declaración e inicialización de variable contador.

while(condición para continuar en bucle){
código

operación/es que afectan a la/s variable/s contador/as
}


Espero que así lo entiendas y puedas sacar conclusiones.
  #5 (permalink)  
Antiguo 27/10/2013, 12:15
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: De for a While

Muchas gracias por la aclaración vagodp

El caso es que el codigo que me diste no me acaba de funcionar, de hecho así es como lo tenía puesto una vez mirado el .txt con los 15 o 20 intentos que he hecho.

Pero me da errores dado que por ejemplo el numero 6 es perfecto y este me lo marca como que no lo es, y otros numeros que no lo son me los marca como que lo son... ya no me quedan mas ideas sobre como enfocar el problema


EDIT: Muchas gracias por tu comentario iblancasa, me ayudará mucho
  #6 (permalink)  
Antiguo 27/10/2013, 12:27
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

Cita:
Iniciado por VeinZx Ver Mensaje
Muchas gracias por la aclaración vagodp

El caso es que el codigo que me diste no me acaba de funcionar, de hecho así es como lo tenía puesto una vez mirado el .txt con los 15 o 20 intentos que he hecho.

Pero me da errores dado que por ejemplo el numero 6 es perfecto y este me lo marca como que no lo es, y otros numeros que no lo son me los marca como que lo son... ya no me quedan mas ideas sobre como enfocar el problema


EDIT: Muchas gracias por tu comentario iblancasa, me ayudará mucho
lo unico que hice fue pasar tu código a while no lo eh mirado si funciona o no pero si sigues con problemas podemos hacer algo mas a lo mejor ;)
  #7 (permalink)  
Antiguo 27/10/2013, 12:34
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: De for a While

Cita:
Iniciado por vangodp Ver Mensaje
lo unico que hice fue pasar tu código a while no lo eh mirado si funciona o no pero si sigues con problemas podemos hacer algo mas a lo mejor ;)
Pues la verdad es que si que sigo encasillado con este programita, no tengo ni idea de que hago mal por mas que miro y toco... una pequeña ayuda, por pequeña pista que sea sería bienvenida xD

Saludos
  #8 (permalink)  
Antiguo 27/10/2013, 13:12
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

Código C++:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main(void) {
  4.  
  5.     int a, numero, suma;
  6.     a = 1;
  7.     numero = 0;
  8.     suma = 0;
  9.    
  10.     printf("Introduce un numero y comprobemos si es perfecto: ");
  11.     scanf("%d", &numero);
  12.      
  13.        
  14.        
  15.         while ( a < numero )
  16.     {
  17.        
  18.        if(numero%a==0)                
  19.       {
  20.         suma+=a;
  21.       }
  22.         a++;
  23.     }
  24.    
  25.     if(suma==numero)
  26.    {            
  27.         printf("El numero %d SI es perfecto, bien.\n", numero);
  28.    }
  29.     else
  30.    {
  31.        printf("El numero %d por desgracia no es perfeco, vuelva a intentarlo.", numero);
  32.    }
  33.  
  34.     return 0;
  35. }
  #9 (permalink)  
Antiguo 27/10/2013, 13:14
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

problema resuelto XD.
El estaba en la a.
La incrementaba antes de lo que debia.
a se incrementaba al principio de while, con incrementar al final del bucle problema solucionado ;).
Pruebalo y me lo dices si te va bien.
  #10 (permalink)  
Antiguo 27/10/2013, 13:18
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

Código C++:
Ver original
  1. #include <stdio.h>
  2. void main (void)
  3. {
  4.    int i,num,mitad,suma=1; // como 1 siempre es divisor ya le damos el valor de 1 a la suma.
  5.    printf("Dame un numero\n");
  6.    scanf("%d", &num);
  7.    i=2;
  8.    mitad=num/2;    // Buscamos solo hasta la mitad ya que matemáticamente de la mitad al final solo...
  9.                     // ...es divisible entre 1 o el mismo y en este caso los desechamos.
  10.                    
  11.    while(i<=mitad)
  12.    {
  13.        if(num%i==0)
  14.            suma+=i;  
  15.        i++;
  16.    }
  17.    if ((suma==num)&&(num!=1))
  18.        printf("El numero %d es perfecto.", num);
  19.    else
  20.        printf("El numero %d no es perfecto.", num);
  21. }

Encontré una versión mas optima en una pagina por ahí.
No se donde por que se me corgo la pc XDD
Pero reduce la carga, esta comentado. ;)
  #11 (permalink)  
Antiguo 27/10/2013, 13:19
 
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: De for a While

Cita:
Iniciado por vangodp Ver Mensaje
Código C++:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main(void) {
  4.  
  5.     int a, numero, suma;
  6.     a = 1;
  7.     numero = 0;
  8.     suma = 0;
  9.    
  10.     printf("Introduce un numero y comprobemos si es perfecto: ");
  11.     scanf("%d", &numero);
  12.      
  13.        
  14.        
  15.         while ( a < numero )
  16.     {
  17.        
  18.        if(numero%a==0)                
  19.       {
  20.         suma+=a;
  21.       }
  22.         a++;
  23.     }
  24.    
  25.     if(suma==numero)
  26.    {            
  27.         printf("El numero %d SI es perfecto, bien.\n", numero);
  28.    }
  29.     else
  30.    {
  31.        printf("El numero %d por desgracia no es perfeco, vuelva a intentarlo.", numero);
  32.    }
  33.  
  34.     return 0;
  35. }

Vaya tontería... lo tenía exactamente igual pero a saberse el motivo pero no había inicializado la suma.... me cago en tó XDDDDDDDDDDDDD

Muchísimas gracias por tu ayuda amigo

EDIT: Gracias por lo del código con menos carga, me servirá como ejemplo para futuros códigos.
  #12 (permalink)  
Antiguo 27/10/2013, 13:21
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: De for a While

De nada ;) bueno que aprendo yo también ^^

Etiquetas: int, numero, programa, struct
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 02:49.