Les nombres premiers :programme c

Fermé
saadinto - 28 mars 2008 à 19:17
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 29 mars 2008 à 05:06
Bonjour tt le monde,
j'aimerai savoir si ce code est correct ,l utilisateur tappe un nombre n et le programme doit afficher le n-ieme nombre premier correspendant
voila le code :


#include<stdio.h>
#include<conio.h>
int fonction2(int n);
int fonction1(int x);


void main()

{
int n,nombrepremier;
puts("tappez un entier:");
scanf("%d",&n);
if(n>0) //pour tester le nombre entré par l utilisateur
{
nombrepremier=fonction1(n);
printf("le %d nombre premier est :%d",n,nombrepremier);
}
}
//la fonction ki renvoi un int (0-->nombre non premier,autre nombre-->nombre premier)

int fonction1(int x)
{
int y=2,booleen;

while(y*y<=x)
{
if(x%y!=0)
{y++;
booleen=1;
}
else booleen=0;
}

return booleen;
}
//la fonction 2 ki retourne le n ieme nombre premier correspendant

int fonction2(int n)
{
int j=0,i=1,tableau[]={0};

while(j<n)
{
if( foncyion1(i) )
{
j++;
tableau[j]=i;
}
i++;
}
return tableau[j];
}

2 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
29 mars 2008 à 04:27
il suffit que tu le testes pour savoir si le code est bon...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
29 mars 2008 à 05:06
Bonjour,

J'ai un peu remanié ton code, comme tu peux le constater, teste-le et dis-moi ce que tu en penses, moi là j'en ai mare. Je l'ai testé ça semble aller, à toi maintenant, il est trop tard (ou trop tôt) pour continuer.

//2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 et 97

int main() 
{ 
//Initialise les variables.
  int n = 0,  bool_1er = 0, nombre_1er_voisin = 0; 
  int ind_prog_m = 0; 
  signed int borne_m    = 2147483646;

//Pour boucler sur la fonction à concurrence de la valeur -1 saisie.
  while (n != -1)
     {
cout <<"\n 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 et 97";
      puts  ( "\n\n tappez un entier: " ); 
      scanf ( "%d", &n ); 
      if ( n  >  0  ) //pour tester le nombre entré par l utilisateur 
        { 
            bool_1er        =       fonction1 ( n );
            if ( bool_1er  == 0 && n != 1)
             {
                printf ("\n %d n'est pas un nombre premier ", n); 
//                borne_m    = 2147483646;
                ind_prog_m = 1;
                nombre_1er_voisin   =       fonction2 ( n, ind_prog_m, borne_m ); 
                printf ("\n %d est le nombre premier immediatement > voisin de: %d", "
                          "nombre_1er_voisin, n);
                ind_prog_m = -1;
                nombre_1er_voisin   =       fonction2 ( n, ind_prog_m, borne_m ); 
                printf ("\n %d est le nombre premier immediatement < voisin de: %d", "
                          "nombre_1er_voisin, n); 
            }
          else
           {
             if ( n == 1)
              { printf ("\n 1 n'est ni premier ni composé");}
            else
              { printf ("\n %d est un nombre premier ", n); }
          }
        }
     else
       {
          if ( n  < -1  )
           {
             printf ("\n Nombre saisi incoherent:%d", n);
           }
        }
     }
return (0);
} 
//la fonction ki renvoi un int (0-->nombre non premier,autre nombre-->nombre premier) 

 int fonction1    (int x) 
  { 
   int y = 0,  booleen; 

   for ( y = 2;   y < x;   y++ )
      { 
       if  ( (x % y) == 0)  { booleen  =  0; break; }
      else                       { booleen  =  1; } 
      } 
   if ( x   ==  2 )          { booleen  =  1; }

   return booleen; 
 } 

//la fonction 2 ki retourne le n ieme nombre premier correspendant 
 int fonction2   (int n, signed  int ind_prog, int borne) 
 { 
   int j = 0; 
   for (  j  = n + ind_prog;  j < borne; j = j + ind_prog ) 
      { 
       if ( fonction1 (j) )  
         { 
          break; 
         } 
      } 
  return (j); 
 }

0