Un entier premier

angem20 -  
loupius Messages postés 789 Statut Membre -
je dois faire un code qui accepte deux nombre premier,j'ai fais ce code:
 #include<stdio.h>
 #include<conio.h>
 #include<math.h>

void premier(int nb)
 {int i;
  int a;    //en fait c'est un booleen soit 1 soit 0,utile pour le "do while"
 scanf("%d",&nb);
  do
   {
    for (i=2;i<nb;i++)
     if((nb%i)== 0)
     {
       printf("non premier,entrez de nouveau :\n");
       scanf ("%d",&nb) ;
       a=1;
     }
     else
     a=0;
   }
   while((a==0)||(i==(nb-1)));
 }
void main()
 {int p,q;
premier(p);
premier(q);
getch();
}

je veux savoir qu'est ce qu'il ne va pas,bon lors de la compilation,il n'ya pas d'erreur,c'est executable mais pas correct,ou est l'erreur??????!!!!!!!

2 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Bonjour,*

S'il vous plaît
Merci
Au revoir
etc.
Sont monnaie courante quand on veut obtenir quelque chose !

Saine lecture...
A voir aussi

Merci de votre compréhension.

;-)

* Ne pas en tenir compte si présent dans le message initial, mais bon vu qu'il est ajouté automatiquement, ça ne fait pas de mal.
0
angem20
 
je suis tellement desolée,j'ai cru que le "bonjour" s'ecrit par defaut dans ce site,je suis nouvelle,c'est la premiere fois que je poste une question dans un forum.desolée une autre fois
0
loupius Messages postés 789 Statut Membre 148
 
Ce qui ne va surtout pas, c'est la manière dont tu passes le paramètre du 'main' à la fonction 'premier'.
Passer la valeur de ton paramètre, fait que sa valeur ne sera pas changée.
Passer l'adresse de ton paramètre, fait que cette adresse ne sera pas changée (l'adresse étant une valeur comme une autre!)... par contre le contenu de cette adresse pourra être changé par la fonction et ce changement sera 'visible' par l'appelant.. Il faut ainsi modifier ton programme (j'ai 'ajouté' quelques simplifications):
#include <stdio.h>
#include <stdlib.h>

void premier(int* nb)
{
  int i;
  printf("Entrez un nombre premier: ");
  while(1)
  {
    scanf ("%d", nb) ;
    for (i=2; i<*nb; i++)
      if ((*nb%i) == 0)
        break;
    if (i == *nb)
      break;
    printf("\nNon premier,entrez de nouveau: ");
  }
}

int main(void)
{
  int p,q;
  premier(&p);
  premier(&q);
  printf ("p=%d q=%d\n", p, q);

  return (EXIT_SUCCESS);
}
Bonne continuation.
0