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

avec Java Discussion :

Petit problème d'algo sur les entiers


Sujet :

avec Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut Petit problème d'algo sur les entiers
    Bonjour,
    me voila de retour sur "Developpez", afin d'essayer de comprendre mon problème.

    Voila voila, j'ai repris les cours, et en Architecture des ordinateurs, nous devons nous familiariser avec la classe Integer, donc conversion de binaire, hexadécimal...

    Outre le fait que je ne comprend rien à l'énoncer, j'aimerais comprendre ce qui cloche dans mon bout de code cherchant à compter le nombre de "1" contenu dans un entier.

    Voici l'énoncer: " En utilisant les fonctions prédéfinies de la classe Integer et le nombre 0x7F00 0001 écrivez l’instruction qui affiche en décimal le nombre de bits à 1 dans un nombre entier


    Voici mon code:


    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
    public static void main (String [] args){
     
    	int valeur=0x7F000001;
    	int cpt=0;
    	String conversionChaine;
    	int ind;
     
     
    	conversionChaine= (String)Integer.toBinaryString (valeur);
     
    	int nbLettre = conversionChaine.length();
     
    	for (ind=0; ind < (nbLettre-1); ind+=1){
    		if (conversionChaine.charAt(ind) == 1){
    			cpt+=1;
     
    		}
    	}
     
    	System.out.print(conversionChaine);
    	System.out.print ("\n" + cpt + "\n");
    }
    Merci d'avance de votre aide

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Bonjour
    J'ai un peu de mal à comprendre votre démarche. Vous dites ne pas comprendre l'énoncé, mais vous fournissez quand même une réponse ?! Donc, même si ce n'est pas correcte, qu'avez-vous compris exactement de cette énoncé ?
    Je penses franchement qu'en lisant attentivement la question, avec un peu de volonté...
    Bref, pour vous aider un peu malgré tout, la réponse d'après ce que je comprends moi de cette énoncé ne tient qu'en une instruction, donc en une seule ligne de code. Hors vous avez écrit tout une méthode ???

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    En fait, je comprend l'énoncer que j'ai écrit, ou du moins je pense l'avoir compris
    Ce sont les autres questions (que je n'ai pas écrit), que je ne comprend pas.
    De ce que j'ai compris pour l'énoncé taper ci dessus, il faut compter le nombre de chiffre ayant comme valeur "1", d"un nombre entier.

  4. #4
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut D'accord
    En clair, il faut dire sous forme décimale combien de bits à 1 sont contenus dans la représentation binaire d'un entier quelconque.
    Pour ce qui est de votre code, vous avez fait une erreur dans la définition de votre boucle qui vous fait omettre le dernier caractère de votre chaîne. Soit vous remplacez < par <=, ou bien vous ne soustrayez plus 1 de la longueur de votre chaîne...
    Par contre, sans vouloir vous offenser, vous ne répondez pas à la question puisque cette dernière implique une réponse sous forme d'instruction, et non de méthode. Cela signifie que la réponse tient en une seule ligne de code...

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    Je vous remercie pour votre réponse.
    En fait dans ma boucle j'avais considéré le String comme un tableau (faute inattention), d'où le nbLettre-1.

    Mais je ne vois pas comment faire sous forme d'instruction
    Car il faut quand même parcourir l'entier pour compter le nombre de 1 ?

  6. #6
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Et bien
    La réponse est dans la question, les 9 premiers mots pour être précis...

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    Ah merci.
    Je vais voir, parce que pour le moment nous n'avons utilisé que:

    toHexString,
    toBinaryString,
    toOctalString
    toString
    paresInt
    decode
    rotateLeft
    rotateRight

    Peut être bitCount ?

  8. #8
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Très bien
    Je vois que vous avez compris, je vous laisse chercher, bon courage.
    Je suis sûr que vous y arriverez tout seul...

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    Bien dans ce cas est-ce bien avec bitCount ?
    car lorsque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print (Integer.bitCount(1001101));
    j'obtiens 11

  10. #10
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Eh bien
    Pourquoi pleurez-vous ? La réponse est juste.
    Allez, encore un coup de pouce, elle est juste si l'on considère que 1001101 est une valeur décimale qui dites littéralement se prononcerait "un million mille cent un". Dans ce cas, la valeur binaire de ce nombre donne :
    11110100011010001101
    qui totalise bien 11 bits à 1 !

    Où est le problème...

  11. #11
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    Waouuu, certainement la fatigue.
    J'ai oublié la conversion en binaire, autant pour moi.
    Effectivement ça marche.
    Je vous remercie de votre aide qui ma été très précieuse, car en suivant vos conseils, et en lisant la doc java, j'ai pu répondre à une autre question
    Toutefois avant de cliquer sur le petit bouton "RESOLU" j'ai une dernière question.

    Pourquoi lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	System.out.print (Integer.numberOfLeadingZeros(1001101)); //Retourne le nombre de 0 en debut de la représentation de i.
    , j'obtiens 12 ?

    Cette instruction n'est-elle pas censé me retourner le nombre de 0 au début de l'entier ?

  12. #12
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut C'est normal
    le type int en Java représente une valeur binaire codée sur 32 bits. Si vous représentez un million mille cent un en binaire sur 32 bits, cela donne :
    00000000 00001111 01000110 10001101
    Si vous lisez attentivement la description de la méthode citée, numberOfLeadingZeros(int value), cette dernière renvoie le nombre de zéro situé à gauche du premier bits à 1 le plus à gauche de l'ensemble :
    00000000 0000 1111 01000110 10001101
    Ce qui fait bien 12 zéro...

    Note :
    Ici, 1 représente le premier bit à 1 le plus à gauche de l'ensemble.

  13. #13
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    Merci beaucoup, donc du coup tout va bien, je n'avais juste pas pensé en 32 bits
    Je vous remercie vraiment de votre aide très précieuse, est je vais de suite mettre "Résolu"

  14. #14
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Bravo à vous
    je n'ai fait que vous aiguiller.
    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit algo sur les combinaisons
    Par Blaede dans le forum Mathématiques
    Réponses: 5
    Dernier message: 02/03/2008, 23h51
  2. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  5. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13

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