Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/05/2013, 08:58
fenixelian
 
Fecha de Ingreso: mayo-2013
Mensajes: 5
Antigüedad: 11 años
Puntos: 0
Respuesta: problema al crear funcion

Cita:
Iniciado por javidotnet Ver Mensaje
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:



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.
--------------------------------------------------------------------------------------------------------

muchas gracias =) anda perfecto =). no sabia de esa funcion para el valor absoluto. se me habia ocurrido elevar al cuadrado la variable y sacarle la raiz cuadrada pero asi con esa funcion es mas facil. y con respecto al for, la verdad que me da verguenza jaja, hace mucho que no programo en este lenguaje, estube aprendiendo haskell y es muy diferente y deje mucho de lado este lenguaje. ahora lo que quiero es usar esa funcion para que me saque el MCD de dos numeros. se me complico un poco recien pero ya lo podre hacer jeje. de nuevo te agradesco mucho por la ayuda. un saludo