Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: ODAC333 en 3 Julio 2013, 04:56 am



Título: Ayuda: Problema con ejercicio en C#
Publicado por: ODAC333 en 3 Julio 2013, 04:56 am
Hola buenos dias!!!

Soy nuevo en la comunidad y estoy aprendiendo a programar solo, eh tratado de resolver este problema pero no eh podido, creo que es a la falta de ordenes o comandos que se. El problema es el siguiente:

http://coj.uci.cu/24h/problem.xhtml?abb=1099

En mi código uso recursion para grabar en memoria los resultados pero como podrán notar los imprime de manera inversa, no se si haya algo para guardar los datos en memoria y despues que termine alguna condición los imprima en la consola o que al terminar una condición leea los datos y asi los vaya evaluando.

"Muchas gracias"

Código:
using System;

namespace PythagoreanNumbers
{
class program
{
static void Main()
{
program numero = new program();
numero.Evaluar();
Console.ReadLine();
}

public void Evaluar()
{
string[] aux = Console.ReadLine().Split();
int acuadrado = int.Parse(aux[0]) * int.Parse(aux[0]);

if(acuadrado != 0)
{
int bcuadrado = int.Parse(aux[1]) * int.Parse(aux[1]);
int ccuadrado = int.Parse(aux[2]) * int.Parse(aux[2]);
Evaluar();
if(acuadrado == bcuadrado + ccuadrado)
{
Console.WriteLine("right");
}

else if (bcuadrado == acuadrado + ccuadrado)
{
Console.WriteLine("right");
}

else if (ccuadrado == acuadrado + bcuadrado)
{
Console.WriteLine("right");
}

else
{
Console.WriteLine("wrong");
}
}
}
}



Título: Re: Ayuda: Problema con ejercicio en C#
Publicado por: El Benjo en 3 Julio 2013, 06:07 am
Saludos, ODAC333.

Bueno, primero que nada creo que deberías de olvidarte de usar recursión, realmente no es necesario y te complica demasiado el asunto. Lo que puedes hacer colocar un simple "while" en vez de hacer la recursión:

Código
  1. while(acuadrado != 0)
  2. {
  3.     //Aquí realizas las operaciones
  4. }
  5.  
  6. //Aquí muestras los resultados.
  7.  

Pero necesitarás otro array para guardar los resultados, es decir, las cadenas "Cierto/Falso".


Título: Re: Ayuda: Problema con ejercicio en C#
Publicado por: ODAC333 en 4 Julio 2013, 02:13 am
Si ya eh manejado el "while" pero use recursión porque necesito almacenar esos datos en memoria y esque no se utilizar los array para guardar los datos no se si pudieras ayudarme Benjo

Gracias


Título: Re: Ayuda: Problema con ejercicio en C#
Publicado por: El Benjo en 4 Julio 2013, 04:14 am
Claro que puedo ayudarte!!!

Mira, yo había pensado que el código quedara como sigue:

Código
  1. public void Evaluar()
  2.        {
  3.            string[] aux;
  4.            string[] Resultados = null;
  5.            string[] ArrayTemporal;
  6.            int acuadrado = 1;
  7.            while (acuadrado != 0)
  8.            {
  9.                aux = Console.ReadLine().Split();
  10.                acuadrado = int.Parse(aux[0]) * int.Parse(aux[0]);
  11.                if (acuadrado != 0)
  12.                {
  13.                    int bcuadrado = int.Parse(aux[1]) * int.Parse(aux[1]);
  14.                    int ccuadrado = int.Parse(aux[2]) * int.Parse(aux[2]);
  15. //Redimensiono el arreglo de los resultados.
  16.                    if (Resultados == null)
  17.                    {
  18.                        Array.Resize(ref Resultados, 1);
  19.                    }else{
  20.                        ArrayTemporal = Resultados;
  21.                        Array.Resize(ref Resultados, Resultados.Length + 1);
  22.                        Array.Copy(ArrayTemporal, Resultados, ArrayTemporal.Length);
  23.                    }
  24. //Hago las operaciones y guardo los resultados.
  25.                    if (acuadrado == bcuadrado + ccuadrado)
  26.                    {
  27.                        Resultados[Resultados.Length - 1] = "right";
  28.                    }
  29.                    else if (bcuadrado == acuadrado + ccuadrado)
  30.                    {
  31.                        Resultados[Resultados.Length - 1] = "right";
  32.                    }
  33.  
  34.                    else if (ccuadrado == acuadrado + bcuadrado)
  35.                    {
  36.                        Resultados[Resultados.Length - 1] = "right";
  37.                    }
  38.  
  39.                    else
  40.                    {
  41.                        Resultados[Resultados.Length - 1] = "wrong";
  42.                    }
  43.                }
  44.            }
  45. //Presentar información.
  46.        }
  47.  

Según yo, ese sería el código completo, y lo siguiente que tienes que hacer hacer un bucle que recorra el array de resultados y que imprima la información en la pantalla, pero eso parte del código te la dejo a ti, no es muy complicada y es para que practiques con los arrays, que realmente son necesarios en toda buena aplicación.  ;D

Nota que sólo he colocado la parte del método "Eavaluar()" y estudia la parte del código donde se redimensiona el arreglo que guarda los resultados.


Título: Re: Ayuda: Problema con ejercicio en C#
Publicado por: ODAC333 en 4 Julio 2013, 17:06 pm
Mira despues de lo que me dijiste de la necesidad de un array hize este código:
Código
  1. using System;
  2.  
  3. namespace PythagoreanNumbers2
  4. {
  5. class Program
  6. {
  7. static void Main()
  8. {
  9. string[] array = new string[10];
  10.  
  11. int limite = 1;
  12.  
  13. for(int i=0; i<=limite; i++)
  14. {
  15.  
  16. string linea = Console.ReadLine();
  17.  
  18. if(linea != "0")
  19. {
  20. string[] aux = linea.Split();
  21. int acuadrado = int.Parse(aux[0]) * int.Parse(aux[0]);
  22. int bcuadrado = int.Parse(aux[1]) * int.Parse(aux[1]);
  23. int ccuadrado = int.Parse(aux[2]) * int.Parse(aux[2]);
  24.  
  25. if(acuadrado == bcuadrado + ccuadrado)
  26. {
  27. array[i] = "right";
  28. }
  29.  
  30. else if(bcuadrado == acuadrado + ccuadrado)
  31. {
  32. array[i] = "right";
  33. }
  34.  
  35. else if(ccuadrado == acuadrado + bcuadrado)
  36. {
  37. array[i] = "right";
  38. }
  39.  
  40. else
  41. {
  42. array[i] = "wrong";
  43. }
  44.  
  45. limite = i + 1;
  46. }
  47.  
  48. else
  49. {
  50. limite = i;
  51. }
  52. }
  53.  
  54. foreach(string resultado in array)
  55. {
  56. Console.WriteLine(resultado);
  57. }
  58.  
  59. Console.ReadLine();
  60. }
  61. }
  62. }

Ya solo me falta poder modificar el numero de limitante en el array dependiendo de las lineas que se escriban, en este código puse 10 para verificar que funcionara.


Título: Re: Ayuda: Problema con ejercicio en C#
Publicado por: El Benjo en 8 Julio 2013, 18:50 pm
Sólo recuerda que con ese for() estás condicionando a los usuarios de tu aplicación a que introduzcan 10 entradas, si lo haces de esa manera en vez del while() necesitas añadir una instrucción para comprobar que al introducir "0" salgas del bucle for()

Yo te recomiendo que lo sigas intentando con el while() y echale un vistazo a la parte de los arrays en el código que te compartí. (Ese código ya lo probé y funciona a la perfección).

Saludos.