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 :

traduction naturel en binaire etc


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut traduction naturel en binaire etc
    bonjour j'ai un exercice que j'arrive pas a résoudre pouvez vous m'aider s'il vous plait! le voici:
    1. Écrire un bloc qui affiche la représentation binaire d’un naturel
    2. Écrire un bloc qui affiche la représentation octale d’un naturel
    3. Écrire un bloc qui affiche la représentation hexadécimale d’un naturel
    Ecrivez un programme complet qui appelle ces trois fonctions ci-dessus.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Essaie de faire quelque chose, poste ton code et pose des questions spécifiques.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<stdio.h>
    main()
    {
    	int i, n;
    	n = 11; // on choisit onze comme nombre à convertir
    	while (n != 0)
    	{
    		i = n % 2; // i est le reste de la division n / 2
    		printf("%d", i);
    		n = n / 2; // n prend une nouvelle valeur
    	}
    }
    c'est ca que j'avais commencé à faire mais avec cette methode de conversion les modulos doivent être lu de bas en haut contrairement a mon code ou les modulos se lisent de haut en bas

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Par défaut
    Citation Envoyé par ahmad445 Voir le message
    #include<stdio.h>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    main()
    {
    	int i, n;
    	n = 11; // on choisit onze comme nombre à convertir
    	while (n != 0)
    	{
    		i = n % 2; // i est le reste de la division n / 2
    		printf("%d", i);
    		n = n / 2; // n prend une nouvelle valeur
    	}
    }
    c'est ca que j'avais commencé à faire mais avec cette methode de conversion les modulos doivent être lu de bas en haut contrairement a mon code ou les modulos se lisent de haut en bas
    En changeant un tout petit peu cette fonction, et en passant au récursif, elle devient juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    void intToBin(int nb){
            if(nb>0){
                    int reste = (nb%2);
                    intToBin(nb/2);
                    printf("%d",reste);
            }       
    }
     
    int main(void) {
             intToBin(4585139);
            return 0;
    }
    L'appel récursif est tout simple ici : tu rappelles ta fonction sur le résultat de la division ( comme quand tu fais l'algo a la main ), et apres uniquement tu affiches le reste.
    Le premier reste afficher sera celui de la dernière opération, puis, successivement, cela remontera vers la premiere opération faite...

    Bon, après, on m'a soufflé sur le chat que le récursif c'était naze, même si je trouve cette méthode de faire très jolie !

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    c'est ca que j'avais commencé à faire mais avec cette methode de conversion les modulos doivent être lu de bas en haut contrairement a mon code ou les modulos se lisent de haut en bas
    C'est pourtant, à ma connaissance, la bonne méthode, car c'est celle qu'on peut adapter à n'importe quelle base N.
    Ce qu'il te manque, c'est juste de quoi "retourner" ton affichage. Par exemple, passer par une pile:
    Code C : 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
    //Nb. max de chiffres = nb de bits du type (la base 2 est celle qui prend le plus de place à écrire)
    #define NB_BITS (sizeof(int) * 8)
    //Base utilisée
    #define N 2
     
    main()
    {
    	int pile[NB_BITS];
    	int index = 0;
    	int i, n;
    	n = 11; // on choisit onze comme nombre à convertir
     
    	//On convertit et on empile
    	while (n != 0)
    	{
    		i = n % N; // i est le reste de la division n / N
    		pile[index++] = i;
    		n = n / N; // n prend une nouvelle valeur
    	}
     
    	//On dépile et on affiche
    	while(index != 0)
    	{
    		i = pile[--index];
    		printf("%d", i);
    	}
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 504
    Par défaut
    Bonjour,

    Citation Envoyé par ahmad445 Voir le message
    1. Écrire un bloc qui affiche la représentation binaire d’un naturel
    2. Écrire un bloc qui affiche la représentation octale d’un naturel
    3. Écrire un bloc qui affiche la représentation hexadécimale d’un naturel
    Un « naturel », ça ne veut rien dire. Il s'agit soit d'un « entier naturel », c'est-à-dire un élément de ℕ, soit un entier écrit en « binaire naturel », ce qui est le cas des entiers ordinaires gérés par les ordinateurs.

    Ça ne change pas grand chose en ce qui te concerne, mais ça veut quand même dire que, dans le second cas, il te faudra gérer les nombres négatifs. Si c'est le cas, ça reste quand même trivial : il suffit d'afficher « - » et de transformer ton nombre négatif en nombre positif en faisant x = -x.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut
    dan la premier question c'est un entier naturel qui doit être converti en binaire
    dans la deuxième c'est un entier naturel qui doit etre converti en octet

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Au lieu de faire des division successives par 2 et de faire un modulo, tu peux à l'inverse utiliser un masque que tu décalera vers à droite à chaque tour. Comme ça tu récupère les bits dans l'ordre où tu veux les afficher (tu lis le bit de poids fort, puis le bit à sa droite, etc).

Discussions similaires

  1. traduction de binaire en texuelle
    Par mdh12 dans le forum Débuter
    Réponses: 0
    Dernier message: 02/01/2010, 19h54
  2. traduction d'un chiffre ou un pixel en binaire
    Par new_wave dans le forum Débuter
    Réponses: 7
    Dernier message: 30/03/2009, 14h19
  3. Réponses: 13
    Dernier message: 20/10/2008, 21h16
  4. Problème traduction fichier pdf binaire en héxa (0D 0A)
    Par identifiant_bidon dans le forum C++
    Réponses: 2
    Dernier message: 22/11/2007, 10h37

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