Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/05/2013, 19:51
javidotnet
 
Fecha de Ingreso: mayo-2013
Ubicación: Chaco, Argentina
Mensajes: 45
Antigüedad: 11 años
Puntos: 3
Respuesta: problema al crear funcion

Hola fenixelian

Te cuento que tuve que conseguir un IDE, para probar el código, y puedo decirte que no te preocupes porque ya encontré cuál es el error.
Fijate la sentencia "for", la definición para esta sentencia en C dice que el ciclo se ejecuta siempre que se cumpla la condición que se encuentra encerrada por los punto y comas:
Código:
for (n = a - 1; n == 1; n--)
Por lo tanto, nuestro programita nunca va a entrar dentro del ciclo porque de entrada n vale a-1, es decir que sólo entra cuando a = 2

Entonces la solución es colocar:

Código C:
Ver original
  1. for (n = a - 1; n > 0; n--)

En cuanto al "if" lo podemos quitar, teniendo en cuenta esa característica de la sentencia "for" que recién te expliqué. Por consiguiente, el código quedaría así:
Código C:
Ver original
  1. public static int MD(int a)
  2.         {
  3.             int n;
  4.            
  5.             for (n = a - 1; n > 0; n--) // n-- es lo mismo que n = n - 1
  6.             {
  7.                 if (a % n == 0)
  8.                 {
  9.                     return n;
  10.                 } // if
  11.             } // for
  12.    
  13.             return 1; // si se llega hasta aquí es porque no se encontró divisor
  14.         } // MD

Con respecto a lo otro que mencionas:

Cita:
el primer num que divide al 72 es el 32 si es q no me equivoco, pero tambien el primer num que divide al (-72) es el 32.
Permíteme corregirte, es 36 en lugar de 32; y te digo que es sencilla la solución,
sólo agregas la función Math.Abs() y listo, así:

Código C:
Ver original
  1. for (n = Math.Abs(a) - 1; n > 0; n--)

Además me tomé la libertad, ayudado por las fotos, de agregar unas cositas al main, para que te sea más fácil probar los números en la consola.

Por lo que nuestro código completo quedaría así:

Código C:
Ver original
  1. public static void Main(string[] args)
  2.         {
  3.             string valor;
  4.             int a, n;
  5.             while (true)
  6.             {
  7.                 Console.WriteLine("escriba un numero para ver el primero q lo divide (ENTER = Salir)");
  8.                 valor = Console.ReadLine();
  9.                 if (valor.Trim().Length == 0) break;
  10.                 a = Convert.ToInt32(valor);
  11.                 n = MD(a);
  12.                 Console.WriteLine("{0}\n", n);             
  13.             }
  14.            
  15.         }
  16.        
  17.         public static int MD(int a)
  18.         {
  19.             int n;
  20.            
  21.             for (n = Math.Abs(a) - 1; n > 0; n--) // n-- es lo mismo que n = n - 1
  22.             {
  23.                 if (a % n == 0)
  24.                 {
  25.                     return n;
  26.                 } // if
  27.             } // for
  28.    
  29.             return 1; // si se llega hasta aquí es porque no se encontró divisor
  30.         } // MD

Espero que te haya aclarado un poco más el panorama.

Cualquier duda no dudes en preguntar.

Saludos cordiales.

Última edición por javidotnet; 03/05/2013 a las 20:35 Razón: simplificar el código