Besoin d'aide en C

LaDroite Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

2 réponses

Pinzou76 Messages postés 614 Date d'inscription   Statut Membre Dernière intervention   192
 
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
0
LaDroite Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   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;
}
0
Pinzou76 Messages postés 614 Date d'inscription   Statut Membre Dernière intervention   192
 
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.
0
Pinzou76 Messages postés 614 Date d'inscription   Statut Membre Dernière intervention   192
 
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
0
LaDroite Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour

Avec ces codes le programme s'emballe c'est à dire, il montre le nombre entrée sans s'arrêté.
0
Pinzou76 Messages postés 614 Date d'inscription   Statut Membre Dernière intervention   192
 
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;
}
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
@Pinzou76: math.h n'est pas nécessaire pour utiliser l'opérateur modulo
0