[ Foro de C# ]

ayuda a resolver un ejercicio.

06-Apr-2018 00:42
Santi Perez
3 Respuestas

Hola a todos, estoy empezando con esto de la programación y  estoy llevando el curso de Nacho Cabanes para C# ( que por cierto lo recomiendo), estoy atascado con este ejercicio:

"Ejercicio propuesto 4.1.3.6: Un programa que pida 10 nombres y los memorice (pista: esta vez se trata de un array de "string"). Después deberá pedir que se teclee un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que se teclee "fin"."

lo he intentado de varias formas y nada no me sale, esta es la ultima forma que lo he intentado:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _arrays_9
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] nombres = new string[2];
            Console.WriteLine("dime 10 nombres, despues te pedire que teclees alguno 
             y te dire si se encuentra entre los que introducistes, hasta que escribas 
             \"fin\"");
            int contador = 0;
            while (contador<2)
            {
                nombres[contador] = Console.ReadLine();
                contador++;
            }
            Console.WriteLine();
            string nombre;
            do
            {
                Console.WriteLine("introduce un nombres y te diré si esta entre los que 
                 tecleastes");
                nombre = Console.ReadLine();
 
                    foreach (string localizar in nombres)
                    {
 
                        if (localizar == nombre)
                        {
                        Console.WriteLine("el nombre se encuentra");
                        }
                        else
                        {
                            Console.WriteLine("el nombre no se encuentra");
                        }
                    }
 
 
 
 
            } while (nombre!="fin");
        }
    }
}
 


El array lo puse a dos por ya estaba harto de teclear 10 cada vez que lo intentaba
:-(( .
A ver si alguien me puede dar un poco de Luz.
Muchas gracias de antemano.


08-Apr-2018 17:44
Eduardo Lopez Lecumberri (+1)

A ver que te parece asi;

 
 static void Main(string[] args)
        {
 
            BuscarNombre lista = new BuscarNombre();
            lista.PeticionNombres();
            int resultado;
 
            do
            {
                resultado = lista.Buscar();
                switch (resultado)
                {
                    case 0:
                        Console.WriteLine("El nombre no se encuentra en la lista");
                        break;
                    case 1:
                        Console.WriteLine("El nombre se encuentra en la lista");
                        break;
                    case 2:
                        Console.WriteLine("Fin de programa...");
                        break;
                }
            } while (resultado != 2);
 
            Console.ReadLine();
        }
 
 
class BuscarNombre
    {
        string[] lista = new string[2];
 
        public void PeticionNombres()
        {
            for (int i = 0; i < lista.Length; i++)
            {
                Console.WriteLine($"Introduzca el nombre numero {i}");
                lista[i] = Console.ReadLine();
            }
 
 
        }
 
        public int Buscar()
        {
            string nombre = "";
            Console.WriteLine("Introduzca un nombre");
            nombre = Console.ReadLine();
            foreach (var item in lista)
            {
                if (item == nombre)
                {
                    return 1;
                }
                else if (nombre == "fin")
                {
                    return 2;
                }
            }
            return 0;
        }
   }
 


 


09-Apr-2018 12:36
Nacho Cabanes (+37)

Santi, tu solución se acerca mucho, pero necesitas un booleano de control. Si el dato aparece una vez, no debes decir "no está" 9 veces.  ;-)


09-Apr-2018 23:43
Santi Perez

Muchas gracias por responder

Eduardo, tu respuesta me ha servido para practicar con  switch que lo tenia un poco abandonado y me ha refrescado la memoria.

Nacho, ante todo felicitarte y agradecerte el gran trabajo que haces para la comunidad. ;-)
Al final con el control booleano parece que va bien, la verdad es que no se me había ocurrido, necesitare dar un repaso al tema , se que se puede depurar con controles de errores pero bueno poco a poco.
este es el código:

 
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _arrays_9
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] nombres = new string[2];
            Console.WriteLine("dime 10 nombres, despues te pedire que teclees alguno" +
             "y te dire si se encuentra entre los que introducistes, hasta que escribas \"fin\"");
 
            int contador = 0;
            while (contador < 2)
            {
                nombres[contador] = Console.ReadLine();
                contador++;
            }
            Console.WriteLine();
            string nombre;
            do
            {
                Console.WriteLine("introduce un nombres y te diré si esta entre los que tecleastes");
                nombre = Console.ReadLine();
                bool encontrado = false;
                foreach (string localizar in nombres)
                {
                    if (localizar == nombre)
                    {
                        encontrado = true;
                    }
                }
                if (encontrado)
                {
                    Console.WriteLine("El nombre se encuentra");
                }
                else
                {
                    Console.WriteLine("el nombre no se encuentra");
                }
 
            } while (nombre != "fin");
        }
    }
 
}
 
 









(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)