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 :

Emplacement mémoire tableau [Nombres premiers]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut Emplacement mémoire tableau [Nombres premiers]
    Bonjour,

    Commençant en C, j'ai voulu m'exercer en créant un petit programme qui est censé faire les choses suivantes :

    Demander un nombre spécifique.
    Faire la liste des nombres de 3 à ce nombre et vérifier s'ils sont premiers.
    Enregistrer tous les nombres premiers dans un tableau.
    Afficher les nombres premiers trouvés.

    Maintenant, voici le code que j'ai créé, dans l'espoir que cela marche :
    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
    47
    48
     
    #include <stdio.h>
    #include <stdlib.h>
     
    main()
    {
          /* Je déclare toutes les variables. Le tableau a 1000 emplacements pour être "large". */
          int nombre, i, b=1, a=0, premier[1000], chiffre;
          /* Saisie du nombre... */
          printf("Saisir un nombre : ");
          scanf("%d",&chiffre);
          fflush(stdin);
          /* Je crée une boucle de 3 jusqu'au nombre rentré (non inclu) pour les tester */
          for (nombre=3;nombre<chiffre;nombre++)
          {
              /* Une autre boucle afin de tester si le nombre est premier. 
               * Je prends tous les chiffres de 2 à "nombre à tester" et 
               * je regarde leur reste de division. S'il y en a un qui a 
               * pour reste 0, la variable b (comme booléen) passe à 0. 
               * Sinon, elle reste à 1. 
               */
              for (i=2;i<(nombre-1);i++)
              {
                  if ((nombre%i)==0)
                  {
                     b=0;
                  }
              }
              /* Si le nombre est premier, je le rentre dans le tableau. 
               * J'incrémente ensuite le "numéro de case" du tableau 
               * pour le prochain nombre premier. 
               */
              if (b==0)
              {
                 premier[a]=nombre;
                 a++;
              }
              b=1;
          }
          /* J'affiche tous les membres du tableau... */
          for (i=0;i<=a;i++)
          {
              printf("\n%d est un nombre premier.\n",premier[a]);
          }
          printf("\n\n\n");
          system("pause");
          return 0;
    }

    Tout me semble juste, et pourtant.

    Voici un aperçu de ce que cela me donne :

    Saisir un nombre : 7

    13959380 est un nombre premier.

    13959380 est un nombre premier.

    13959380 est un nombre premier.



    Appuyez sur une touche pour continuer...
    A première vue, je dirais qu'il me ressort le numéro mémoire du tableau...

    Je suis perdu !

    PS : je suis sur Windows 2000 Pro, utilisant Dev-C++.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\n%d est un nombre premier.\n",premier[i]);
    D'autre part, il n'y a pas besoin de tester avec tous les nombres de 2 à nombre-1, il suffit de tester avec les nombres premiers déjà trouvés et rangés dans le tableau

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    [QUOTE=diogene;3065596]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\n%d est un nombre premier.\n",premier[i]);
    Erreur ridicule. Merci de me l'avoir fait remarquer.

    D'autre part, il n'y a pas besoin de tester avec tous les nombres de 2 à nombre-1, il suffit de tester avec les nombres premiers déjà trouvés et rangés dans le tableau
    Je ne comprends pas...


    Ah sinon, mon programme ne marche vraiment pas !
    Pourtant, le principe des nombres premiers et bien de n'avoir aucun diviseur autre que 1 et lui-même, n'est-ce pas?

    Voici un exemple de ce que j'obtiens :

    Saisir un nombre : 7

    4 est un nombre premier.

    6 est un nombre premier.



    Appuyez sur une touche pour continuer...
    Complètement à côté de la plaque...

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
             if (b!=0)
              {
                 premier[a]=nombre;
                 a++;
              }
              b=1;
          }
          /* J'affiche tous les membres du tableau... */
          for (i=0;i<a;i++)
    ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Pour le "for (i=0;i<a;i++)", c'était déjà modifié.

    Pour la première modification, j'ai préféré mettre "if (b==1)".

    Malheureusement, et je ne comprends vraiment pas pourquoi, cela n'a rien changé.

    Et pardonnez-moi d'insister, mais je réitère ma demande de compréhension à propos de ce que vous m'avez dit...

    D'autre part, il n'y a pas besoin de tester avec tous les nombres de 2 à nombre-1, il suffit de tester avec les nombres premiers déjà trouvés et rangés dans le tableau

    Sur ce, je vous souhaite à tous bon appétit.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    J'ai testé avec ces modifications et ça marche.


    Si le nombre n'est pas premier, il est divisible par un nombre premier plus petit que lui. Or ces nombres premiers sont rangés dans le tableau
    (sauf 2 mais il suffit de le mettre en indice 0 et d'initialiser a à 1).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          premier[0] = 2;
          a=1;
    ....
              for (i=0;i<a;i++)
                  if ((nombre % premier[i])==0)
                  {
                     b=0;
                    break;
                  }

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  2. [défi n°8]: premiers nombres premiers
    Par javatwister dans le forum Général JavaScript
    Réponses: 41
    Dernier message: 14/06/2005, 10h22
  3. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  4. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10
  5. premier nombre premier superieur à m=10^100+1
    Par azman0101 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 17/04/2003, 03h23

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