IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

programme de conversion de décimal en binaire et octale


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut programme de conversion de décimal en binaire et octale
    Bonjour à tous,
    toujours dans mes devoirs de programmations; là j'ai écrit un programme (qui compile pas) qui converti en entier en binaire ou octale en fonction du choix de l'utilisateur.
    voici mon code, pouvez vous m'aider et me dire pourquoi il veut pas compiler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
     
    #include<stdio.h>
    #include<stdlib.h>
      /* la fonction de conversion en binaire*/
        int binaire(int nbr){
        int t[10];
        int i=0;
        int k=0;
        do{
        t[i]=nbr%2;
        nbr=nbr/2;
        i++;
        k++;
        }
        while(nbr!=0);
        printf("\nla conversion en binaire est: ");
        for(i=k-1;i>=0;i--){
        printf("%d",t[i]);
        }
        }
     
        /* la Fonction de conversion en octal*/
        int octale(int nbr){
        int t[10];
        int i=0;
        int k=0;
        do{
        t[i]=nbr%8;
        nbr=nbr/8;
        i++;
        k++;
        }
        while(nbr!=0);
        printf("\nla conversion en octale est: ");
        for(i=k-1;i>=0;i--){
        printf("%d",t[i]);
        }
        }
    int main()
     {
        int choix,nbr;
     
     
     
        printf("entrez un nombre: ");
        scanf("%d",&nbr);
        do
        {
            printf("\n-------------------------LA LISTE DES CHOIX------------------------");
            printf("\n 1---->Convertion d'un decimale vers BINAIRE.");
            printf("\n 2---->Convertion d'un decimale vers OCTALE.");
     
            printf("\nchoix: ");
            scanf("%d",&choix);
     
            switch(choix)
            {
                case 1:
                printf("Veuillez saisir le nombre a convertir en binaire: ");
                scanf("%d",&nbr);
                binaire(nbr);
     
                break;
                case 2:
                printf("Veuillez saisir le nombre a convertir en octale: ");
                scanf("%d",&nbr);
                octale(nbr);
     
                break;
            }
     
     
            return 0;
        }
     }
    Code Blocks me retourne le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /home/sk8trasher/Dropbox/EDUCATEL/DEVELLOPEMENT_APPLICATION_C/Devoir_3/dev3ex2ab.c||In function ‘main’:|
    /home/sk8trasher/Dropbox/EDUCATEL/DEVELLOPEMENT_APPLICATION_C/Devoir_3/dev3ex2ab.c|74|erreur: expected ‘while’ before ‘}’ token|
    /home/sk8trasher/Dropbox/EDUCATEL/DEVELLOPEMENT_APPLICATION_C/Devoir_3/dev3ex2ab.c|74|erreur: expected declaration or statement at end of input|
    ||=== Build finished: 2 errors, 0 warnings ===|

    Je vous remercie de l'éclairage qui vous pourrez m'apporter.
    Merci

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Déjà je vois des fonction int fonction(int ..) qui ne retournent aucun int.

    Ensuite tu te complique inutilement la vie.
    Binaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    printf("\nla conversion en binaire est: ");
    unsigned int masque = 0;
    masque -= 2;
    while(nbr != 0)
    {
            printf("%d", nbr & masque);
            nbr /= 2; //ou nbr >>= 1;
    }
    D'autres solutions ici :
    http://www.developpez.net/forums/d79...inaire-printf/


    octal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%o", nbr);
    sinon ton erreur est très bête : tu commence un do while() mais tu ne met pas le while.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    oh honte à moi !!!
    Merci Neckara, j'ai réussi a compiler mon programme. cool

    par contre je ne saisi pas les commentaires. Je débute en C, et je n'ai pas encore acquis tous les mécanismes de gamberge d'un programme.
    du coup lorsque tu écrit
    Citation Envoyé par Neckara
    Déjà je vois des fonction int fonction(int ..) qui ne retournent aucun int.
    que dois je faire ? mettre un return à la fin de la fonction ?

    En effet je me suis drôlement fais ch... alors que un simple %o, permet de convertir en octal. J'ai trouver du code qui permet de convertir en binaire, mais alors je comprend vraiment pas comment il fonctionne??? il m'a l'air plutôt performant à comparer de la fonction que j'ai écrite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>
    char * bin (unsigned long int i)
    {
        static char buffer [1+sizeof (unsigned long int)*8] = { 0 };
        char *p=buffer-1+sizeof (unsigned long int)*8;
        do { *--p = '0' + (i & 1); i >>= 1; } while (i);
        return p;
    }
     
     
    int main (void)
    {
        int nbr;
        printf("Veuillez saisir le nombre que vous"
               "souhaitez convertir en binaire\n"
               "nbr : ");
        scanf("%d",&nbr);
        printf ("%d s'écrit %s en binaire.\n",nbr,bin(nbr));
        return 0;

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par sk8trasher Voir le message
    que dois je faire ? mettre un return à la fin de la fonction ?
    ça dépend, que veux-tu faire?
    Ne rien retourner? void taFontion(...){ ....}Tu veux retourner un int ? return tonInt;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    char * bin (unsigned long int i)
    {
        static char buffer [1+sizeof (unsigned long int)*8] = { 0 };
        char *p=buffer-1+sizeof (unsigned long int)*8;
        do { *--p = '0' + (i & 1); i >>= 1; } while (i);
        return p;
    }
    Ce code n'est pas super dans le sens où si tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char * p = bin(25);
    char * q = bin(24);
    printf("%s %s", p, q);
    Il t'affichera exactement la même chose.

    Si j'ai bien compris tu veux juste afficher et non stocker le résultat ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    void char * bin (unsigned long int i)
    {
         char buffer[1+sizeof (unsigned long int)*8] = { 0 };
          // déclaration d'une chaîne de caractère (= tableau de caractère) suffisement grande.
         // {0} met la valeur 0 = '\0' = fin de la chaine de caractère dans chaque cellule de ton tableau.
         char *p = buffer - 1 + sizeof (unsigned long int)*8;
         //on déclare un pointeur qui pointe sur l'avant dernière cellule de ton tableau
        do
        {
                   *--p = '0' + (i & 1); //compliqué voir en dessous
                   i >>= 1;// i = i/2
         }while (i); //tant que i != 0
         printf("%s", p); // on affiche le résultat
    }
    --p : on décrémente p, il pointera alors sur la cellule d'avant.
    *p : cellule pointée par p.
    *--p : cellule pointée par p après avoir décrémenté p
    i & 1 : masque, '&' est un opérateur bit à bit.
    Il va prendre le premier bit des deux nombres à gauche et à droite et s'il y a deux 1, il met le premier bit à 1, sinon il le met à 0.
    Ainsi avec i & 1 on a : i & 000...00001 donc si le premier bit de i est 1 alors il affichera 000...00001 sinon 000...00000.
    Et il continu avec les deuxième bit, troisième bit ect...
    au final, i & 1, retournera 1 si le premier bit de poid faible de i est 1 sinon 0.
    '0' + ... '0' est la valeur de la lettre 0 en ASCII.
    S'il est incrémenté, il affichera le chiffre '1'.

Discussions similaires

  1. conversion du décimal au binaire
    Par souzen dans le forum Débuter
    Réponses: 13
    Dernier message: 28/12/2018, 09h17
  2. Conversion d'un nombre binaire en décimal
    Par grungy-soul dans le forum Général Java
    Réponses: 7
    Dernier message: 28/05/2008, 09h23
  3. conversion de décimal à binaire
    Par sousou2007 dans le forum C++
    Réponses: 10
    Dernier message: 19/10/2007, 12h33
  4. [Débutant] Petit souci programme de conversion binaire
    Par scofild20 dans le forum Assembleur
    Réponses: 2
    Dernier message: 26/03/2007, 12h01
  5. Réponses: 3
    Dernier message: 28/12/2006, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo