CLR: .Net / Mono / Boo / Otros CLR > C#
asesoria C#
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
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa