p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre à l'essai
    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 : 20
    Points
    20

    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
    Expert Confirmé Sénior

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 550
    Points : 16 417
    Points
    16 417

    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.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  3. #3
    Membre à l'essai
    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 : 20
    Points
    20

    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
    Expert Confirmé Sénior

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 550
    Points : 16 417
    Points
    16 417

    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'.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

Discussions similaires

  1. conversion du décimal au binaire
    Par souzen dans le forum Débuter
    Réponses: 10
    Dernier message: 13/10/2008, 21h59
  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