Besoin d'aide en C

Fermé
LaDroite Messages postés 24 Date d'inscription jeudi 31 mai 2018 Statut Membre Dernière intervention 3 avril 2019 - Modifié le 7 juin 2018 à 15:42
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 8 juin 2018 à 01:27
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 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
7 juin 2018 à 12:09
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 24 Date d'inscription jeudi 31 mai 2018 Statut Membre Dernière intervention 3 avril 2019 1
Modifié le 7 juin 2018 à 15:43
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 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
7 juin 2018 à 14:22
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 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
Modifié le 7 juin 2018 à 14:35
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 24 Date d'inscription jeudi 31 mai 2018 Statut Membre Dernière intervention 3 avril 2019 1
7 juin 2018 à 15:30
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 609 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 190
7 juin 2018 à 15:44
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
8 juin 2018 à 01:27
@Pinzou76: math.h n'est pas nécessaire pour utiliser l'opérateur modulo
0