les nombres premiers de c#
Je suis nouveau en C#. Et je voudrais quelque chose de tel programme, l'affichage des nombres premiers dans une listbox si l'utilisateur devra saisir tout entier dans la zone de texte. (cela signifie que, s'ils écrivent 10, il affichera les nombres premiers entre 0 et 10, ou 20 de 0 à 20, etc).
Que dois-je considérer tout d'abord, avant de me faire de la programmation?
Je sais qu'il y a de nombreux exemples dans l'internet, mais d'abord je voudrais savoir à quoi ai-je besoin?
Merci pour l'astuce;-)
===
Merci les gars. Donc, vous êtes ce qui suggère qu'il est mieux de le faire d'abord dans l'application de Console?
J'ai fait un exemple de la "Boucle" à l'aide de l'Application de la Console très simple, mais quand j'ai essayé de le faire dans l'Application Windows Form, je ne suis pas sûr de la façon de la mettre en œuvre.
J'ai peur que si je continue à faire des exemples dans la Console, puis je vais avoir de la difficulté à le faire dans le Formulaire Windows Apps.
Qu'en pensez-vous?
======
Bonjour à nouveau,
J'ai besoin de quelques commentaires avec mon 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);
}
}
- Ce n'est pas la façon dont vous recherchez des nombres premiers... Que du code qui vérifie si un nombre est inégale (ou deux)... Vous avez besoin d'un de plus intelligent algorithme de type en.wikipedia.org/wiki/Sieve_of_Eratosthenes
- Juste pour illustrer pourquoi votre algorithme ne fonctionne pas: Il permet d'imprimer 9 qui n'est pas le premier...
Vous devez vous connecter pour publier un commentaire.
Eh bien, tout d'abord, je voudrais réfléchir sur la façon de trouver des nombres premiers, et de l'écrire dans une application console qui lit une ligne, fait les maths, et écrit les résultats (purement parce que c'est la chose la plus simple que vous pouvez faire, et couvre la même analyse logique etc vous aurez besoin plus tard).
Quand vous êtes heureux avec le premier numéro de génération, puis de regarder comment le faire winforms - comment mettre une zone de liste, la zone de texte et un bouton sur un formulaire; comment gérer l'événement de clic (bouton), et comment les lire à partir de la zone de texte et écrire les valeurs dans la zone de liste. Votre premier code devrait être assez OK pour prendre "comme est"...
Si vous n'en avez pas déjà un IDE, puis notez que C# Express est gratuit et permettra de couvrir l'ensemble de la ci-dessus.
Vous aurez besoin de savoir:
Je vous suggère fortement de séparer ces tâches. Une fois que vous avez chacun d'entre eux, travaillant séparément, vous pouvez les mettre ensemble. (Marc suggère l'écriture d'une application console pour le premier numéro de l'article - c'est une bonne idée si vous ne voulez pas entrer dans l'unité de tester encore. Si vous avez utilisé les tests unitaires dans d'autres langues, il est assez facile de se lever et courir avec NUnit. Une application console sera certainement plus rapide pour commencer avec si.)
En théorie, pour un potentiellement de longue durée de la tâche (par exemple, les entrées de l'utilisateur 1000000 comme le premier numéro), vous devez généralement utiliser un thread d'arrière-plan pour conserver l'INTERFACE utilisateur réactive. Cependant, je ne serais pas à démarrer avec. Soyez conscient que si vous êtes le calcul de nombres premiers, votre demande sera semblent être "accroché", mais le faire à tout d'abord. Une fois que vous êtes à l'aise avec la version simple, vous pouvez regarder
BackgroundWorker
et la comme si vous vous sentez aventureux.J'ai discuté de la création des nombres premiers en utilisant le Crible d'Eratosthène sur mon blog ici:
http://blogs.msdn.com/mpeck/archive/2009/03/03/Solving-Problems-in-CSharp-and-FSharp-Part-1.aspx
Le code ressemble à ceci...
Avec ce code, vous pouvez écrire de telles déclarations...
... pour obtenir un IEnumerable de nombres premiers inférieurs à 2000.
Tout le code peut être trouvé sur le site CodePlex à http://FSharpCSharp.codeplex.com.
Le code est "est", et donc vous devriez regarder pour déterminer si elle répond à vos besoins, si vous avez besoin d'ajouter de vérification des erreurs, etc, donc le traiter comme un exemple.
== false
au conditionnel.Voici un grand "naïve" nombre premier algorithme, qui serait parfait pour vos besoins:
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Ici est une réponse à la edit:
Si vous voulez présenter les nombres premiers comme une application windows forms, puis vous avez besoin pour la conception de l'interface utilisateur pour elle aussi. C'est un peu overkill pour un si petit problème à résoudre. La méthode la plus simple de conception que vous pouvez faire est de remplir un
ListBox
dans votre formulaire (exemple).Si vous êtes vraiment désireux de l'apprentissage de Windows Forms ou WPF puis il y a plusieurs ressources pour cela.
J'ai récemment écrit une routine pour mettre en œuvre Crible D'Eratosthène et suis tombé sur ce thread. Juste pour les archives, voici mon oeuvre:
Vous pouvez toujours les semences avec "1, 2" si vous avez besoin d'1 dans votre liste de nombres premiers.
Votre approche est tout à fait faux. Les nombres premiers sont absolues et ne changera jamais. Votre meilleur pari est de générer une longue liste de nombres premiers. Viennent ensuite avec un algorithme permettant de trouver rapidement ce nombre pour déterminer si elle est sur la liste. Puis dans votre cas (puisque vous voulez la liste de tous dans la plage donnée juste le faire). Cette solution sera d'autant plus rapide que tout nombre premier algorithme de recherche mis en œuvre au cours de l'exécution. Si l'entier est entré est supérieur à votre liste, vous pouvez toujours mettre en œuvre l'algorithme à partir de ce point.