Ayuda: Problema con ejercicio en C#

Iniciado por ODAC333, 3 Julio 2013, 04:56 AM

0 Miembros y 1 Visitante están viendo este tema.

ODAC333

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"

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");
}
}
}
}



El Benjo

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 (csharp) [Seleccionar]

while(acuadrado != 0)
{
     //Aquí realizas las operaciones
}

//Aquí muestras los resultados.


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

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

ODAC333

#2
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

El Benjo

#3
Claro que puedo ayudarte!!!

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

Código (csharp) [Seleccionar]

public void Evaluar()
       {
           string[] aux;
           string[] Resultados = null;
           string[] ArrayTemporal;
           int acuadrado = 1;
           while (acuadrado != 0)
           {
               aux = Console.ReadLine().Split();
               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]);
//Redimensiono el arreglo de los resultados.
                   if (Resultados == null)
                   {
                       Array.Resize(ref Resultados, 1);
                   }else{
                       ArrayTemporal = Resultados;
                       Array.Resize(ref Resultados, Resultados.Length + 1);
                       Array.Copy(ArrayTemporal, Resultados, ArrayTemporal.Length);
                   }
//Hago las operaciones y guardo los resultados.
                   if (acuadrado == bcuadrado + ccuadrado)
                   {
                       Resultados[Resultados.Length - 1] = "right";
                   }
                   else if (bcuadrado == acuadrado + ccuadrado)
                   {
                       Resultados[Resultados.Length - 1] = "right";
                   }

                   else if (ccuadrado == acuadrado + bcuadrado)
                   {
                       Resultados[Resultados.Length - 1] = "right";
                   }

                   else
                   {
                       Resultados[Resultados.Length - 1] = "wrong";
                   }
               }
           }
//Presentar información.
       }


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.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

ODAC333

Mira despues de lo que me dijiste de la necesidad de un array hize este código:
Código (csharp) [Seleccionar]
using System;

namespace PythagoreanNumbers2
{
class Program
{
static void Main()
{
string[] array = new string[10];

int limite = 1;

for(int i=0; i<=limite; i++)
{

string linea = Console.ReadLine();

if(linea != "0")
{
string[] aux = linea.Split();
int acuadrado = int.Parse(aux[0]) * int.Parse(aux[0]);
int bcuadrado = int.Parse(aux[1]) * int.Parse(aux[1]);
int ccuadrado = int.Parse(aux[2]) * int.Parse(aux[2]);

if(acuadrado == bcuadrado + ccuadrado)
{
array[i] = "right";
}

else if(bcuadrado == acuadrado + ccuadrado)
{
array[i] = "right";
}

else if(ccuadrado == acuadrado + bcuadrado)
{
array[i] = "right";
}

else
{
array[i] = "wrong";
}

limite = i + 1;
}

else
{
limite = i;
}
}

foreach(string resultado in array)
{
Console.WriteLine(resultado);
}

Console.ReadLine();
}
}
}


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.

El Benjo

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.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.