Alguien q me corrija el codigo..?

Iniciado por Edu, 26 Marzo 2011, 01:28 AM

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

Edu

He intentado de muchas formas hacer esto y hay otro post con esa otra idea pero esta es mejor solo que me anda a veces :S

Código (csharp) [Seleccionar]


string texto = "2x-8(5+4)-1";

string[] datos = new string[50];
int h = 0;
     
    for (int i = 0; i < texto.Length; i++) // Bucle para recorrer letra por letra
     {
                  if (texto[i].ToString() == ")")  // Si la letra que estamos recorriendo es igual a ")" entonces..
                     {    
                         h--;  // Bajamos el index de datos[] para q siga escribiendo las siguientes letras en el index q estaba antes
                         continue; // salteamos la fase del bucle para q vuelva a generarse con el siguiente valor de i, ya q no queremos que luego al final del bucle agregue el parentesis en datos[h]
                     }

                  if (texto[i].ToString() == "(") // Si la letra q estamos recorriendo es igual a "(" entonces..
                     {
                          h++;  // Subimos el valor del index de datos[] para q empiece a escribir las letras del nuevo "conjunto" de parentesis, en un distinto index de datos[]
                       
                          continue; // Salteamos la fase del bucle para q se genere otra vez con el siguiente valor de i ya que no queremos que se escriba el parentesis
                      }

         datos[h] += texto[i].ToString(); // Vamos agregando las letras
                   
     }

           
     foreach (string r in datos)
           MessageBox.Show(r);



Entienden q quiero hacer? los mensajes q tendrian salir serian primero "2x-8-1" y el otro "5+4", es decir datos[0] tendra "2x-8-1" y datos[1] tendra "5+4"

Ese codigo con esa ecuacion funciona, pero la idea es q funcione para texto = "2x-8(5+3(-4+8(1+2)-56)-2)-87+1"
Que tendria q dejar en datos[0] = "2x-8-87+1", en datos[1] = "5+3-2" , en datos[2] = "-4+8-56" y datos[3] = "1+2"

Si sirve para todas estas, es porq anda bien:
           2x-8(5+4)-1
            -1(2x-8)
            (2x-8)-1
           2x-8(5+4)-1(3+2)-9+8
           2x-8(5+4)-1(3+2(8-4)+5)-9+8
           2x-8(5+4(2+7))-1(3+2(8-4)+5)-9+8
           2x-8(5+4(2+7))-1(3+2(8-4(3+7))+5)-9+8


pd: No se preocupen por si salen los mensajes q tienen q salir y luego salen el resto en blanco hasta llegar a 50 q es el limite del array, eso no importa ya q lo tengo solucionado y tendra un valor q cambiara siempre para q quede justo.

Espero que alguien lo pueda hacer ya q despues de eso ya creo q puedo seguir adelante solo y esta quedando lindo el proyecto, espero q me ayuden!


pd: Arregle el codigo, espero q entiendan mejor ahora

DaasCook

¡Qué desorden de código hermano!.

Te recomendaría que leyeras un manual al menos básico sobre C#, éste te recomendaría encarecidamente, antes de volver a hacer un código así.
for (int i = Trolling.MaxVal; i > Trolling.MinValue; i--) {
    Forum.Answer = "Don't feed the troll"; }

Edu

Jajaja xD q tiene de mal? es la idea q me lo corrijan, vs q sabes mas talvez me podes echar una mano ;)


pd: Ese codigo esta hecho para q entiendan q quiero hacer, el verdadero codigo tiene muchas mas cosas, pero no digo q talvez me vendria bien leerme ese manual.. por segunda vez..

.mokk.

Porque el for lo inicias desde 1 ? , si se empieza desde la posicion 0, yo cambiando eso ya me anda asi como tu lo dices y me da el resultado bien como lo indicas para el string "2x-8(5+3(-4+8(1+2)-56)-2)-87+1"

P.D. El codigo lo pase a Java, ya que no tengo C#, pero no hay muchas diferencia en la sintaxis

Edu

Ya lo modifique en el post principal, pero por ejemplo para esta ecuacion no anda: 2-8(2x-5(4+8)-2(8-3)-86+84)-96

.::IT::.

Esto te puede ayudar tengo problemas con el orden pero despues esta todo bien:

Código (csharp) [Seleccionar]
//La exprecion a evaluar
            string Cadena = this.textBox1.Text;//colocar aqui la expresion a evaluar

            //Convertir a un array de "char"
            char[] texto;
            texto = Cadena.ToCharArray();

            string[] datos;

            //Contendra los indices donde se encuentran los "("
            List<int> Niveles = new List<int>();

            for (int i = 0; i < texto.Length; i++)
            {
                if (texto[i].ToString() == "(")
                    Niveles.Add(i);
            }

            //ahora que ya conocemos el total de niveles inicializamos el tamaño de datos[]
            datos = new string[Niveles.Count + 1];

            //comenzamos a llenar los datos pero comenzando desde el menor valor los caracteres que ya recorrimos los llenamos con espacios en blanco
            for (int i = datos.Length - 1; i >= 0; i--)
            {
                datos[i] = "";

                bool termino = false;//variable que indica si termino la busqueda de ")"

                if (i > 0)
                {
                    for (int j = Niveles[i - 1]; j < texto.Length; j++)
                    {
                        if (texto[j] == char.Parse(")"))
                        {
                            termino = true;
                        }

                        if (texto[j] != char.Parse("(") && texto[j] != char.Parse(")") && texto[j] != char.Parse(" "))
                        {
                            datos[i] = datos[i] + texto[j].ToString();
                        }

                        texto[j] = char.Parse(" ");

                        if (termino)
                            break;
                    }
                }
                else
                {
                    for (int j = 0; j < texto.Length; j++)
                    {
                        if (texto[j] != char.Parse("(") && texto[j] != char.Parse(")") && texto[j] != char.Parse(" "))
                        {
                            datos[i] = datos[i] + texto[j].ToString();
                        }
                    }
                }
            }

            foreach (string r in datos)
                MessageBox.Show(r);
Simplemente .::IT::.

Edu

Lo hiciste recien o lo tenias en algun codigo viejo? Sos un kapo! gracias!!!
No era nada facil, me quedo tranquilo xD

.::IT::.

Recien lo hice pero para que es no entiendo!!!!!!!!!!!!!!
Simplemente .::IT::.

Edu

Para ordenar una ecuacion para q quede formal y luego calcular el valor de x, pero todo eso lo vere de a poco, ahora ya tengo separado los parentesis q es lo q queria, y ahora intentare simplificar y ver como hago las cuentas para simplificar :S
Despues q la ecuacion queda formal es decir ax^2+bx+c o ax+b ya lo calcula mi codigo, esta quedando lindo :P gracias!