Pregunta

Soy nuevo en C #. Y me gustaría programar algo así como, la visualización de los números primos en un cuadro de lista si el usuario va a introducir cualquier número entero en el cuadro de texto. (Es decir, si escriben 10, mostrará los números primos de 0-10 o 0-20 20, etc.).

¿Qué debería considerar en primer lugar, antes de hacer la programación? Sé que hay muchos ejemplos en la Internet, pero primero me gustaría saber qué se necesitan?

Gracias por la punta; -)

=== Gracias chicos. Por lo que está sugiriendo que es mejor hacerlo por primera vez en la aplicación de consola? Hice un ejemplo de "bucle For" por medio de aplicación de consola muy simple, pero cuando traté de hacerlo en la Aplicación de Windows Forms, no estoy seguro de cómo ponerlo en práctica. Me temo que si sigo haciendo ejemplos en la consola, a continuación, voy a tener dificultades para hacerlo en Windows Form Aplicaciones. ¿Qué opinas?

====== Hola de nuevo,

Necesito un poco de retroalimentación con mi código:

        Console.WriteLine("Please enter your integer: ");
        long yourInteger;
        yourInteger = Int32.Parse(Console.ReadLine());

        //displaying the first prime number and comparing it to the given integer
        for (long i = 2; i <= yourInteger; i = i + 1)
        {
            //Controls i if its prime number or not
            if ((i % 2 != 0) || (i == 2))
            {
                Console.Write("{0} ", i);
            }

        }
¿Fue útil?

Solución

Bueno, en primer lugar que lo pensaría cómo encontrar números primos, y escribir que en una aplicación de consola que lee una línea, hace los cálculos, y escribe los resultados (por el mero hecho de que es la cosa más simple que puede hacer y cubre la misma lógica de análisis, etc. que necesitará más adelante).

Cuando esté satisfecho con la generación de números primos, a continuación, buscar la forma de hacer winforms - cómo poner un cuadro de lista, cuadro de texto y un botón en un formulario; cómo manejar el evento click (del botón), y cómo leer desde el cuadro de texto y escribir valores en el cuadro de lista. Su código primordial debe ser bastante bien tomar "tal cual" ...

Si aún no dispone de un IDE, a continuación, señalar que C # Express es libre y cubrirá todo lo anterior.

Otros consejos

Usted necesita saber:

  • ¿Cómo leer la entrada del usuario desde una aplicación Windows
  • ¿Cómo generar números primos dentro de un rango
  • ¿Cómo escribir la salida en la forma en que desea

Me sugieren fuertemente que separe estas tareas. Una vez que tenga cada uno de ellos trabajando por separado, puede ponerlos juntos. (Marc sugiere escribiendo una aplicación de consola para la sección de número primo -. Eso es una buena idea si usted no quiere entrar en la unidad de pruebas todavía Si usted ha utilizado la unidad de pruebas en otros idiomas, es razonablemente fácil de poner en marcha con NUnit . Una aplicación de consola sin duda será más rápido para empezar con pesar.)

En teoría, para una tarea potencialmente larga (por ejemplo, las entradas del usuario 1000000 como el primer número) deberías usar un subproceso de fondo para mantener la interfaz de usuario sensible. Sin embargo, me gustaría ignorar que, para empezar. Tenga en cuenta que mientras se está calculando los números primos, su aplicación parece ser "colgado", pero conseguir que funcione en absoluto en primer lugar. Una vez que esté seguro con la versión simple, se puede ver en BackgroundWorker y similares, si te sientes aventurero.

he discutido la creación de números primos utilizando el criba de Eratóstenes en mi blog aquí:

http://blogs.msdn.com/mpeck/archive/2009/03/03/Solving-Problems-in-CSharp-and-FSharp-Part-1.aspx

El código es el siguiente ...

public IEnumerable<long> GetPrimes(int max)
{
    var nonprimes = new bool[max + 1];

    for (long i = 2; i <= max; i++)
    {
        if (nonprimes[i] == false)
        {
            for (var j = i * i; j <= max; j += i)
            {
                nonprimes[j] = true;
            }

            yield return i;
        }
    }
}

Con este código se puede escribir declaraciones como esta ...

var primes = SieveOfEratosthenes.GetPrimes(2000);

... para conseguir un IEnumerable de los números primos hasta 2000.

Todo el código se puede encontrar en CodePlex en http://FSharpCSharp.codeplex.com .

El código es "tal cual" y lo que debe buscar en ella para determinar si se adapta a sus necesidades, si es necesario agregar la comprobación de errores, etc, por lo que tratarla como una muestra.

Aquí hay un gran número primo algoritmo de "ingenua", que sería perfecto para sus necesidades: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

Aquí es una respuesta a la edición:

  

Gracias chicos. Por lo que está sugiriendo que es mejor hacerlo por primera vez en la aplicación de consola? Hice un ejemplo de "bucle For" por medio de aplicación de consola muy simple, pero cuando traté de hacerlo en la Aplicación de Windows Forms, no estoy seguro de cómo ponerlo en práctica. Me temo que si sigo haciendo ejemplos en la consola, a continuación, voy a tener dificultades para hacerlo en Windows Form Aplicaciones. ¿Qué opinas?

Si desea presentar los números primos como una aplicación de formas de las ventanas, entonces usted necesita para diseñar la interfaz de usuario para él también. Eso es un poco exagerado para un pequeño problema que hay que resolver. El diseño fácil que puede hacer es llenar un ListBox en su forma ( ejemplo ).

Si usted está realmente interesado en el aprendizaje de Windows Forms o WPF entonces hay varios recursos para esto.

estaba escribiendo recientemente una rutina para implementar criba de Eratóstenes y me encontré con este hilo. Sólo para los archivos, aquí está mi aplicación:

    static List<int> GetPrimeNumbers(int maxNumber)
    {
        // seed the master list with 2
        var list = new List<int>() {2};

        // start at 3 and build the complete list
        var next = 3;
        while (next <= maxNumber)
        { 
            // since even numbers > 2 are never prime, ignore evens 
            if (next % 2 != 0) 
                list.Add(next);

            next++;
        }

        // create copy of list to avoid reindexing
        var primes = new List<int>(list);

        // index starts at 1 since the 2's were never removed
        for (int i = 1; i < list.Count; i++)
        {
            var multiplier = list[i];
            // FindAll Lambda removes duplicate processing
            list.FindAll(a => primes.Contains(a) && a > multiplier)
                .ForEach(a => primes.Remove(a * multiplier));
        }

        return primes;
    }

Siempre se puede sembrar con "1, 2" si necesitaba 1 en su lista de números primos.

using System;
class demo
{
   static void Main()
   {
      int number;
      Console.WriteLine("Enter Number you Should be Checked Number is Prime or not Prime");
      number = Int32.Parse(Console.ReadLine());
      for(int i =2;i {
         if(number % i == 0)
         {
            Console.WriteLine("Entered number is not Prime");
            break;
         }
      }
      if(number % i !=0)
      {
         Console.WriteLine("Entered Number is Prime");
      }

      Console.ReadLine();
   }
}

Su enfoque es totalmente erróneo. Los números primos son absolutos y no cambiará nunca. Su mejor apuesta es comprobar la validez de generar una larga lista de números primos. Luego llegar a un algoritmo para buscar rápidamente ese número para determinar si está en la lista. Luego, en su caso (ya que desea una lista de todos dentro del rango dado simplemente hacerlo). Esta solución será mucho más rápido que cualquier algoritmo de búsqueda de número primer implementado durante el tiempo de ejecución. Si el entero introducido es mayor que su lista de entonces siempre se puede implementar el algoritmo a partir de ese punto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top