CLR: .Net / Mono / Boo / Otros CLR > C#

 asesoria C#

<< < (2/3) > >>

Ricardoudo:
esto es lo que he hecho ...pero solo resulta si tiene dos palabras la oracion pero una oracion que sea larga o incluya ( y...o en fin sea mas larga ) no me funciona que estoy haciendo mal...solo me lee si hay dos palabras en la oracion


--- Código: ---namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            String oracion, palabra, b, a;
            int cont = 0, d;

            Console.Write("Ingrese una oracion: ");
            oracion = Console.ReadLine();
           
            Console.Write("Ingrese una palabra: ");
            palabra = Console.ReadLine();

            b = oracion;

            for (int i = 0; i < oracion.Length; i++)
            {
                if (oracion[i] == ' ')
                {

                    d = b.IndexOf(' ');
                    a = b.Substring(0, d);
                    b = b.Substring(d + 1);

                    if (palabra == a)
                    {
                        cont++;
                    }
                }
            }
            if (b == palabra)
            {
                cont++;
               
                Console.Write("existe {0} veces ", cont);
                Console.ReadLine();

            }
        }
    }
}
--- Fin del código ---

Editado por ProfesorX: Insertando etiquetas [ code ]

ProfesorX:
Hola Ricardoudo.

Consejo: utiliza las etiquetas code para encerrar el codigo, ya que mejorla la legibilidad.

El error esta en el if:


--- Código: ---            if (b == palabra)
            {
                cont++;
               
                Console.Write("existe {0} veces ", cont);
                Console.ReadLine();

            }

--- Fin del código ---

Solo deberia contener el contador, no el write:


--- Código: ---            if (b == palabra)
            {
                cont++;
               
            }
            Console.Write("existe {0} veces ", cont);
            Console.ReadLine();

--- Fin del código ---

Ahora tu codigo funciona bien, pero yo añadiria un Trim, para asegurar que la palabra no comienza o termina con espacios. Ademas de usar un while en lugar de un for.

Quedaria asi:


--- Código: ---        static void Main(string[] args)
        {
            String oracion, palabra, b, a;
            int cont = 0, d;

            Console.Write("Ingrese una oracion: ");
            oracion = Console.ReadLine();

            Console.Write("Ingrese una palabra: ");
            palabra = Console.ReadLine();
            // Añadiendo Trim()
            palabra = palabra.Trim();

            b = oracion;

            // While en lugar de for para no tener que hacer un ciclo completo
            // letra por letra en toda la oracion
            while (b.IndexOf(' ') != -1)
            {
                d = b.IndexOf(' ');
                a = b.Substring(0, d);
                b = b.Substring(d + 1);

                if (palabra == a)
                {
                    cont++;
                }
            }

            if (b == palabra)
            {
                cont++;
            }

            Console.Write("existe {0} veces ", cont);
            Console.ReadLine();

        }

--- Fin del código ---

Saludos :)

Ricardoudo:
Gracias, tengo otra duda,.....debo hacer que sume cada elemento , es decir , el primero del  A con el primero del B y asi sucesivamente y mostrar un vector resultante con esa suma de elemento a elemento a elemento....Pero no hallo como hacer...Solo suma los primeros...Como hago para que recorra todo y me de el total de la suma..


--- Código: ---static void Main(string[] args)
        {
          int[] A = new int[5];
            int[] B = new int[5];
            int i, j,suma=0;
           
            for(i=0; i < 5 ; i++){
                Console.Write("ingrerse un numero: ");
                A[i]= int.Parse(Console.ReadLine());
            }

            for (j = 0; j < 5; j++)
            {
                Console.Write("ingrerse un nuevo valor numerico: ");
                B[j] = int.Parse(Console.ReadLine());


            }
                 for(i=0; i < 5 ; i++){
                     for (j = 0; j < 5; j++)
                     {
                         suma = A[i] + B[j];

                     }
         
                       }
                     Console.Write("La suma es:{0}", suma);
                        Console.ReadLine();
        }
    }
}

--- Fin del código ---

Ricardoudo:
Hey cuando ingreso el valor para el vector A...Coloco A ...con i entre corchetes.... nose porque cuando lo pegue lo quita ....y en suma= tambien coloque A....con i entre corchetes.... solo que no aparece

ProfesorX:

--- Cita de: Ricardoudo en Martes  9 de Agosto de 2011, 10:58 ---Coloco A ...con i entre corchetes....

--- Fin de la cita ---

Ese es el problema, la i entre corchetes es un bbcode (codigo para formatear mensajes) que representa italica o letra inclinada, no se si lo notaste, pero despues de eso, la letra de tu programa aparecia inclinada. La solucion es utilizar  [ code ] [ /code ] (sin espacio en los corchetes) para encerrar tu codigo, o en su defecto poner [ i ], pero lo mejor es usar code, (he corregido tu mensaje original, pero la siguiente ves agrega el code tu mismo) ;)

Ahora respecto a tu programa, lo estas haciendo mal, debes utilizar otro vector para guardar el resultado, y luego utilizar un ciclo for para guardar el resultado de la suma de A + B, no necesitas usar ciclos anidados como lo estabas haciendo, con un ciclo basta.

Te dejo el codigo corregido para que veas como debe hacerse.


--- Código: ---        static void Main(string[] args)
        {
            int[] A = new int[5];
            int[] B = new int[5];
            // Vector resultante
            int[] Suma = new int[5];
            int i, j;//, suma = 0;

            for (i = 0; i < 5; i++)
            {
                Console.Write("ingrerse un numero: ");
                A[i] = int.Parse(Console.ReadLine());
            }

            for (j = 0; j < 5; j++)
            {
                Console.Write("ingrerse un nuevo valor numerico: ");
                B[j] = int.Parse(Console.ReadLine());


            }

            // Suma los elementos A y B en un ciclo
            // y guardas el resultado en Suma, no necesitas
            // usar ciclo anidados como hacias antes
            for (i = 0; i < 5; i++)
            {
                Suma[i] = A[i] + B[i];
            }

            // Imprimes el vector Suma
            for (i = 0; i < 5; i++)
            {
                Console.WriteLine("La suma del elemento {0} es:{1}", i + 1, Suma[i]);
            }
        }

--- Fin del código ---

Saludos :)

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa