Un entier premier

Fermé
angem20 - 9 déc. 2009 à 08:24
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 9 déc. 2009 à 12:04
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
9 déc. 2009 à 09:22
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
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 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
9 déc. 2009 à 12:04
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