Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre à l'essai
    Homme Profil pro Steve
    Inscrit en
    novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Nom : Homme Steve
    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 :
    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 :
    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


    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 008
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Âge : 21
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 008
    Points : 14 909
    Points
    14 909

    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 :
    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 :
    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 à l'essai
    Homme Profil pro Steve
    Inscrit en
    novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Nom : Homme Steve
    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 :
    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


    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 008
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Âge : 21
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 008
    Points : 14 909
    Points
    14 909

    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 :
    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 :
    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 :
    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'.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •