Menu

Besoin d'aide en C [Fermé]

Messages postés
24
Date d'inscription
jeudi 31 mai 2018
Statut
Membre
Dernière intervention
3 avril 2019
-
Bonjour,


Je cherche les code d'un programme en C qui divise un nombre pair jusqu'au reste 0 et compter le nombre de fois ce nombre a été divisé. Exemple 8 est divisible par 2 3 fois.

Ce que je tenter écrire ne donne pas :
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
 int a,b,nb;
 printf("entrer un nombre paire a\n");
 scanf("%d",&a);
 if("a MOD 2 = 0");
 b=0;
 nb=a;
 do 
 printf("%d\n",a);
 while("nb MOD 2=0");
 nb=nbdiv2;
 a=a+1;
 return 0;
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

2 réponses

Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68
0
Merci
Bonjour,
Attention avec les tests de condition en C.
If(a=0)

affecte la valeur 0 à a, ça ne teste pas si a est égal à 0 !
Il faut remplacer par des double égal
If(a==0)

Idem pour le While:
while(nb MOD 2==0)


Enlevez également les guillemets dans les If et While.

De plus, vous mettez des points virgules à la fin des if et des while, ce qui termine la boucle...
Il faut procéder comme ceci:
If(a MOD 2 == 0)
{  //Ce chevron symbolise le début du if
     //Mettre entre les 2 chevrons les instructions 
     //qui seront effectuées 
     //à chaque passage dans le if
} //Ce chevron symbolise la fin de la boucle if


Même procédé pour le While.

Voilà pour la syntaxe, pour le fonctionnement je n'ai pas testé si vos calculs sont bons.

Bon courage
LaDroite
Messages postés
24
Date d'inscription
jeudi 31 mai 2018
Statut
Membre
Dernière intervention
3 avril 2019
1 -
Bonjour

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
 int a,b,nb;
 printf("entrer un nombre paire a\n");
 scanf("%d",&a);
 if("a MOD 2 == 0"){
 b=0;
 nb=a;
 }
 do 
 printf("%d\n",a);
       while("nb MOD 2==0");
      <underline> nb=nbDIV2</underline><bold></bold> ça bloque ici
       a=a+1;
 return 0;
}
Pinzou76
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68 -
La syntaxe du do...while est la suivante:
do 
{
   statement(s);
} 
while(condition);


Ensuite, dans la ligne
if("a MOD 2 == 0")

Le MOD correspond au reste de la division euclidienne ? Si oui, utilisez plutôt
if(a % 2 == 0)

Et enlevez les guillemets ! Pareil dans le While
Ensuite
nb=nbDIV2

Que voulez-vous faire ici ? La division entière de nb par 2 ? Si oui:
nb=nb/2
fonctionnera très bien puisque le résultat retourne un entier.

Merci d'utiliser les balises code fournies par CCM pour rendre le code plus lisible.
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68
0
Merci
int main(int argc, char *argv[]) 
{ 
    int a,nb; 
    printf("entrez un nombre pair a\n"); 
    scanf("%d",&a); 
    while(a%2==0)        //tant que a est divisible par 2
    {
        a=a/2;        //On divise a par 2
        nb++;         //On incrémente le compteur de 1 (ça revient à nb=nb+1)
    }
printf("%d est divisible %d fois par 2",a,nb);        //affiche "a est divisible nb fois par 2
return 0;
}


Ce code fonctionne-t-il et est-ce qu'il vous convient ?

[EDIT] Il faudra peut-être include la bibliothèque <math.h> pour que le "%" fonctionne
LaDroite
Messages postés
24
Date d'inscription
jeudi 31 mai 2018
Statut
Membre
Dernière intervention
3 avril 2019
1 -
Bonjour

Avec ces codes le programme s'emballe c'est à dire, il montre le nombre entrée sans s'arrêté.
Pinzou76
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68 -
Alors c'est que vous avez mal recopié, pour moi ça marche parfaitement...
(rajout de la variable TEMP pour garder a à la fin)
int main(int argc, char *argv[]) 
{ 
    int a,nb, temp; 
    printf("entrez un nombre pair a\n"); 
    scanf("%d",&a); 
    temp=a;
    while(temp%2==0)        //tant que a est divisible par 2
    {
        temp=temp/2;        //On divise a par 2
        nb++;         //On incrémente le compteur de 1 (ça revient à nb=nb+1)
    }
printf("%d est divisible %d fois par 2",a,nb);        //affiche "a est divisible nb fois par 2
return 0;
}
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
@Pinzou76: math.h n'est pas nécessaire pour utiliser l'opérateur modulo