J'utilise le logiciel CodeBlocks

Fermé
kekedu38 - Modifié le 11 nov. 2019 à 12:10
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 14 nov. 2019 à 15:02
BONJOUR


voila l'énoncée de l'exercice ainsi que l'exercice je ne comprend pas d'ou vient mon erreur :

Exercice 2 TP 5 : Contrôle si un nombre est premier
Rappel : Un nombre premier est un entier naturel qui admet pour seuls diviseurs 1 et lui-même. Cette
définition exclut 1 et 0. Les nombres premiers inférieurs à 10 sont 2, 3, 5, 7.
a. Écrire une fonction appelée Premier qui affiche si l’entier reçu en entrée est premier ou pas.
b. Écrire le programme principal qui saisit et contrôle un entier strictement supérieur à 1 puis
affiche si cet entier est premier grâce à la fonction Premier.
L’algorithme est demandé sur la fonction Premier.

ce que j'ai fais :
void fonction_premier(short int premier);
int main()
{
    short int a;
      do
      {
         printf("\ndonnez votre nombre :");
         scanf("%hd",&a);
      }
      while(a<=1);
      printf("\nle nombre donnez est %hd",a);
      fonction_premier(a);
      return(0);
}
void fonction_premier(short int premier)
{
    short int i=0,b=0,nbrnot=0,nbryes=0;
    for(i=premier-1;i=2;i++)
    {
        premier%i==b;
        i=i-1;
        if(b==0)
        {
          nbrnot==nbrnot+1;
        }
        if(b==1)
        {
          nbryes==nbryes+1;
        }
    }
    if((nbryes>1)||(nbryes=1))
    {
        printf("\nle nombre donnez est premier");
    }
    if((nbrnot>1)||(nbrnot=1))
    {
        printf("\nle nombre donnez n'est pas premier");
    }
}



je comprend pas d'ou sa vient j'ai l'impression que sa appelle même pas la fonction.
A voir également:

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 nov. 2019 à 12:09
Bonjour
Je ne fais pas de c
Mais.. c'est normal que tu aies deux fois la même fonction ??
void fonction_premier

Le premier ne devrait pas être le main ?


0
on nous a appris a déclarer le prototype au sommet du programme en suite notre programme principale et pour fini le programme de la fonction.
0
cptIgloo Messages postés 115 Date d'inscription mardi 1 octobre 2019 Statut Membre Dernière intervention 26 octobre 2020 6
12 nov. 2019 à 10:02
a mon sens ce n'est pas standard mais c'est ok.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
14 nov. 2019 à 15:02
Je ne vois aucun problème à la pratique que tu décris comme non standard :-)

Pourquoi dis tu cela ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
Modifié le 11 nov. 2019 à 18:25
Après quelques secondes d'analyse :
for(i=premier-1;i=2;i++)
et dans la boucle i=i-1
déjà, le i=i-1 fait que tu retourne un cran en arrière, donc avec ton for tu fais du sur place .
Ensuite, i=2 sera vrai tant que i est un entier, peut-être voulais-tu écrire i==2 ?
Et si tu pars de "premier-1" pour redescendre, c'est pas i++ qu'il faut faire sur la ligne du for, mais i--

Tes tests sont aussi faux :
à quoi sert
premier%i==b; ?

Et si b==3, il se passe quoi ? Que devrait-il se passer ?

0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 12 nov. 2019 à 09:41
Bonjour kekedu38,

Un point important des remarques de NHenry est qu'en C l'opérateur de comparaison d'égalité est
==
alors que l'opérateur d'affectation est
=
. Dans ton code, tu mélanges les deux à plusieurs reprises (dans la condition du
for
et ailleurs) et forcément cela ne donne pas le résultat attendu.

Je ne comprends pas de quelle façon tu penses vérifier qu'un nombre est premier. Peut-être peux tu expliquer ta logique en français ?

Aussi, tu bases en partie l'exécution de ton code sur la façon dont la valeur de
b
change. Cependant, après que
b
soit initialisé à 0, aucune partie de ton code ne modifie la valeur de
b
.

NHenry te demande à quoi sert
premier%i==b
... j'ajouterai que cette ligne ne sert à rien, car elle effectue une comparaison d'égalité (le signe
==
) du reste de la division entière de
premier
par
i
qui est comparé à la valeur de
b
. Comme le résultat de ce test n'est pas exploité, il est ignoré et la ligne ne fait rien en réalité. Le programme s'exécute comme si cette ligne n'existait pas.

Dal
0
cptIgloo Messages postés 115 Date d'inscription mardi 1 octobre 2019 Statut Membre Dernière intervention 26 octobre 2020 6
12 nov. 2019 à 10:04
Ya pas un soucis avec ton while (a <= 1)?
tu veux pas plutot dire (a >= 1) ?

parce que je suppose que a, le nombre que tu saisis au clavier, est forcément supérieur à 1 sinon, c'est que c'est un nombre premier donc ya pas besoin du programme xD.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
12 nov. 2019 à 10:30
La condition du
do
/
while
me parait correcte.

Il lui est demandé "b. Écrire le programme principal qui saisit et contrôle un entier strictement supérieur à 1 (...)". La boucle
do
/
while
redemande la saisie tant que l'entier saisi est inférieur ou égal à 1. Si la condition est fausse, cela signifie que l'entier saisi est strictement supérieur à 1, la boucle s'interrompt alors et le programme principal continue pour traiter la valeur saisie.
0