Frage

Ich bin neu in C #. Und ich möchte, wie etwas programmieren, die Primzahlen in einem Listenfeld angezeigt wird, wenn Benutzer gibt eine ganze Zahl in das Textfeld ein. (Das heißt, wenn sie 10 schreiben, wird es die Primzahlen von 0 bis 10 angezeigt werden, oder 20 0-20, etc).

Was soll ich zuerst, bevor ich die Programmierung zu tun? Ich weiß, dass es viele Beispiele im Internet ist, aber zuerst würde Ich mag zu wissen, was brauche ich?

Danke für den Tipp; -)

=== Danke Leute. Sie sind also darauf hindeutet, dass es besser ist, es in der Konsolenanwendung zuerst zu tun? Ich habe ein Beispiel für „For-Schleife“ mit Konsole-Anwendung einen sehr einfachen, aber dann, wenn ich versuchte, es in der Windows-Forms-Anwendung zu tun, ich bin nicht sicher, wie es zu implementieren. Ich habe Angst, dass, wenn ich tun Beispiele in der Konsole zu halten, dann werde ich habe Schwierigkeiten es in Windows Form Apps zu tun. Was denken Sie?

====== Hallo nochmal,

Ich brauche ein Feedback mit meinem Code:

        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);
            }

        }
War es hilfreich?

Lösung

Nun, zunächst einmal würde ich darüber nachdenken, wie Primzahlen zu finden, und schreiben, dass in einer Konsole-Anwendung, die eine Zeile liest, tut die Mathematik, und schreibt die Ergebnisse (rein, weil das die einfachste Sache, die Sie tun können, und deckt die gleiche Analyse etc Logik Sie es später benötigen).

Wenn Sie glücklich mit der Primzahl Generation sind, dann schauen, wie WinForms zu tun - wie ein Listenfeld zu setzen, Textbox und Schaltfläche auf einem Formular; wie das Click-Ereignis (des Knopfes) zu handhaben, und wie aus der Textbox und Schreiben von Werten in das Listenfeld zu lesen. Ihre prime Code sollte ziemlich in Ordnung sein zu nehmen "as is" ...

Wenn Sie nicht bereits ein IDE haben, dann beachten Sie, dass C # Express ist kostenlos und werden alle oben abdecken.

Andere Tipps

Sie müssen wissen:

  • Wie Benutzereingabe von einer Windows-Anwendung lesen
  • Wie generieren Primzahlen innerhalb eines Bereichs
  • Wie Ausgabe in der Art und Weise zu schreiben, die Sie wollen

Ich empfehle, dass Sie diese Aufgaben zu trennen. Sobald Sie jeder von ihnen getrennt arbeiten haben, können Sie sie zusammen. (Marc schlägt eine Konsolenanwendung für den Primzahl Abschnitt Schreiben -. Das ist ein guter Vorschlag, wenn Sie nicht wollen, noch in Unit-Tests zu bekommen Wenn Sie Unit-Tests in anderen Sprachen verwendet haben, ist es ziemlich einfach zu bekommen und läuft mit NUnit . Eine Konsole App wird sicherlich schneller sein mit, obwohl, um loszulegen.)

In der Theorie für eine potenziell langlaufende Aufgabe (zum Beispiel der Benutzereingaben 1000000 als erste Zahl), die Sie in der Regel einen Hintergrund-Thread verwenden sollten, die Benutzeroberfläche, die auf zu halten. Allerdings würde ich das ignorieren, mit zu beginnen. Beachten Sie, dass, während Sie die Primzahlen sind Berechnung Ihrer Anwendung erscheint „aufgehängt“ zu sein, aber bekommen es überhaupt erst zu arbeiten. Sobald Sie mit der einfachen Version überzeugt sind, können Sie bei BackgroundWorker aussehen und dergleichen, wenn Sie etwas Zeit mitbringen.

diskutierte ich Primzahlen zu schaffen mit dem Sieb des Eratosthenes auf meinem Blog hier:

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

Der Code sieht wie folgt aus ...

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;
        }
    }
}

Mit diesem Code können Sie Anweisungen so schreiben ...

var primes = SieveOfEratosthenes.GetPrimes(2000);

... eine IEnumerable der Primzahlen bis 2000 zu erhalten.

der gesamte Code kann auf CodePlex unter http://FSharpCSharp.codeplex.com .

Der Code ist „wie es ist“ und so sollte man es auch dreht, um zu bestimmen, ob es Ihren Bedürfnissen entspricht, ob Sie die Fehlerprüfung usw. hinzufügen müssen, so behandeln sie als Probe.

Ist hier ein großer „naiver“ Primzahl-Algorithmus, das wäre perfekt für Ihre Bedürfnisse sein: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

Hier ist eine Antwort auf die edit:

  

Danke Jungs. Sie sind also darauf hindeutet, dass es besser ist, es in der Konsolenanwendung zuerst zu tun? Ich habe ein Beispiel für „For-Schleife“ mit Konsole-Anwendung einen sehr einfachen, aber dann, wenn ich versuchte, es in der Windows-Forms-Anwendung zu tun, ich bin nicht sicher, wie es zu implementieren. Ich habe Angst, dass, wenn ich tun Beispiele in der Konsole zu halten, dann werde ich habe Schwierigkeiten es in Windows Form Apps zu tun. Was denken Sie?

Wenn Sie die Primzahlen als Windows Forms-Anwendung präsentieren, dann müssen Sie dafür auch die Benutzeroberfläche entwerfen. Das ist ein bisschen übertrieben für so ein kleines Problem, das gelöst werden. Der einfachste Design Sie tun können, ist ein aufzufüllen ListBox in Ihrem Formular ( Beispiel ).

Wenn Sie wirklich daran interessiert sind, auf das Lernen Windows Forms oder WPF dann gibt es mehrere Ressourcen dafür.

Ich schrieb vor kurzem eine Routine Sieb des Eratosthenes zu implementieren und über diesen Thread kam. Gerade für die Archive, hier ist meine Implementierung:

    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;
    }

Sie können immer es Samen mit „1, 2“, wenn Sie 1 benötigt in der Liste der Primzahlen.

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();
   }
}

Ihr Ansatz ist völlig falsch. Primzahlen sind absolut und wird sich nie ändern. Ihre beste Wette ist, um eine lange Liste von Primzahlen vorge zu erzeugen. Dann kommt mit einem Algorithmus, um schnell die Zahl nachschlagen, um zu bestimmen, ob es auf der Liste ist. Dann in Ihrem Fall (da Sie alle im angegebenen Bereich auflisten möchten tut nur so). Diese Lösung wird viel schneller als jede Primzahl finden Algorithmus während der Laufzeit implementiert. Wenn die eingegebene ganze Zahl größer als Ihre Liste ist, dann können Sie immer den Algorithmus implementieren an diesem Punkt beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top