IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

c# : problème sur exo simple


Sujet :

C#

  1. #1
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut c# : problème sur exo simple
    Bonjour,

    Je débute, j'ai un exercice tout simple mais le code ne fonctionne pas, et je ne comprends pas pourquoi.

    L'objectif : dire si un nombre donné par l'utilisateur est un nombre premier ou non

    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    using System;
     
    namespace Exercice_27
    {
        class Program
        {
            static void Main(string[] args)
            {
                bool premier = true;
                int nbre;
                float nbre_test;
                do
                {
                    Console.Write("Veuillez saisir un nombre entier. Pour sortir, tapez '0' = ");
                    nbre = int.Parse(Console.ReadLine());
     
                    for (float i = 2; i < Math.Round(Math.Sqrt(nbre)); i++)
                    {
                        nbre_test = nbre % i;
                        if (nbre_test == 0)
                        {
                            premier = false;
                            Console.WriteLine(nbre % i);
                        }
                    }
                    if (nbre == 0)
                    {
                        Console.WriteLine("Bye");
                    }
                    else
                    {
                        if (premier)
                        {
                            Console.WriteLine(nbre + " est un nombre premier");
                        }
                        else
                        {
                            Console.WriteLine(nbre + " n'est pas un nombre premier");
                        }
                    }
     
                } while (nbre != 0);
     
            }
        }
    }
    Y a un truc que je ne vois pas, parce que les résultats ne sont pas bon. Le code fonctionne, mais par exemple si je donne 12 il me dit que c'est un nombre premier.

    Quelqu'un voit où se cache l'erreur svp ?

    D'avance merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    Je viens de tester ton code, et il semble bien fonctionner !

    Après tu peux optimiser ton algo en sortant de la boucle dès que tu trouves un diviseur, pas besoin d'aller plus loin.

    Et le nombre 1 n'est pas considéré comme premier, mais ton algo dit que 1 est premier.

  3. #3
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    vraiment il marche pas :
    https://prnt.sc/pddnz2
    il me dit que 13 n'est pas un nombre premier

    j'ai testé avec le débogage détaillé, les variables ont l'air de prendre les bonnes valeurs, je ne comprends pas ce qui cloche

    y a vraiment un truc qui m'échappe

  4. #4
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    j'ai trouvé.
    Je n'avais pas ré-initialisé mon booléen "premier".
    Du coup une fois qu'il passait en false, après évidemment il y restait.

    Désolée, j'ai l'impression d'avoir un peu pollué le forum pour rien.

    Pour la peine, je vais aller me taper la tête contre le mur. Je le mérite.
    enfin avant en effet je vais corriger pour le 1, et puis nettoyer un peu tout ça.

    Merci pour ton aide Jaco67

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Effectivement, j'avais bidouillé un peu le code pour le mettre dans dotnetfiddle, ce qui éliminait ce bug.
    Par contre il y a encore un soucis dans ta boucle for, il ne faut pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (float i = 2; i < Math.Round(Math.Sqrt(nbre)); i++)
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (float i = 2; i <= Math.Round(Math.Sqrt(nbre)); i++)
    <=, pas <

  6. #6
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    oui oui c'est vrai, j'avais corrigé en faisant mon petit nettoyage de code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur fonction simple
    Par Lyadrielle dans le forum Lisp
    Réponses: 5
    Dernier message: 23/09/2012, 15h01
  2. [RegEx] Petit problème sur une simple expréssion
    Par mathias59 dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2010, 10h21
  3. Réponses: 10
    Dernier message: 02/12/2007, 00h13
  4. Réponses: 4
    Dernier message: 19/02/2006, 18h18
  5. [debutant]Avis sur exo Simple.
    Par granquet dans le forum C
    Réponses: 9
    Dernier message: 27/11/2005, 19h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo