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 :

Calculer la longueur d'une variable de type entier


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Calculer la longueur d'une variable de type entier
    Bonjours,

    voila j'aimerai savoir si il existe une fonction comme "strlen();" mais destinée aux entiers. en effet j'aimerai pouvoir calculer la longueur d'un entier.

    Exemple :
    int num1=1111;
    int num2=22;
    longueur de num1= 4;
    longueur de num2 = 2;

    Si quelqu'un à la reponse surtout qu'il n'hesite pas
    si un poste existant traite dejas de ce sujet, je suis desole de ne pas l'avoir vu, alors n'hesitez pas à me rediriger

    Merci

  2. #2
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Tu devrais pouvoir y arriver avec un sprintf() et un strlen().

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    i : un entier
    n: nombre de caractères néceessaires pour le nombre en base 10

    n = (int)log10(i) + 1;

  4. #4
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    En convertissant en chaine de caractères, c'est possible.
    En utilisant la formule mathématiques du log10 aussi.
    Et enfin, il suffit de diviser le nombre par 10 puis tu récupères le résultat et tu divises encore par 10, etc.
    Exemple

    Soit le nombre 150
    150/10 = 15
    15/10 = 1 (on garde la partie entière)
    1/10 = 0
    => 150 comporte 3 chiffres.

    Tout ceci n'a aucun rapport avec le C, évidemment ...

    Nas'

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par crocodilex
    Tu devrais pouvoir y arriver avec un sprintf() et un strlen().
    A savoir aussi que sprintf retourne le nombre de caracteres ecrits (sans le \0) => donc la longueur de la chaine

  6. #6
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Gruik
    A savoir aussi que sprintf retourne le nombre de caracteres ecrits (sans le \0) => donc la longueur de la chaine
    Exact.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Un grand merci
    Merci a vous tous pour vos reponses. j ne me suis pas encore penché sur celle de pflafon mais je v y travailler.

    Un grand bravo a Nasky. Mais pourquoi n'y ais-je pas pensé plus tot moi qui recherche une fonction depuis plus d'1 heure je l'ai créee tous seul comme un grand

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int calcul(int nombre){
      int i,j=0;
      clrscr();
      i=nombre;
      do{
          nombre=nombre/10;
          j=j+1;
      }while(nombre>0);
      printf("L'entier %d est de longueur %d",i,j);
      return(j);
      getch();
    }
    Voila qui est resolu Merci a tous

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par juliendeparis
    Merci a vous tous pour vos reponses. j ne me suis pas encore penché sur celle de pflafon mais je v y travailler.
    Elle est pourtant beaucoup plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <math.h>
     
    int calcul (int i)
    {
      return (int)log10 (i) + 1;
    }
    Il existe une logique à ce calcul (une p'tite démonstration mathématique par exemple ?)

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par gege2061
    return (int)log10 (i) + 1;
    Attention, log10() attend une variable de type double, pas int, et i doit etre strictement positif.
    Quant a la demonstration mathematique, elle est simple: comme log10(10^n) = n et que 10^n s'ecrit avec n + 1 chiffres, on arrive facilement a la formule ci-dessus.

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par gege2061
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <math.h>
     
    int calcul (int i)
    {
      return (int)log10 (i) + 1;
    }
    Le cast n'est pas nécessaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <math.h>
    int calcul (int i)
    {
      return log10 (i) + 1;
    }
    Jc

  11. #11
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par fearyourself
    Le cast n'est pas nécessaire
    ??? C'est double log10(double x); chez moi... Vous utilisez quoi comme libm ?

  12. #12
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par DaZumba
    ??? C'est double log10(double x); chez moi... Vous utilisez quoi comme libm ?

    Je n'ai jamais dit que j'avais une fonction log10 qui était

    Je disais simplement que le cast (int) n'était pas nécessaire, le compilateur n'en a pas besoin pour faire ce calcul correctement.

    Sauf si on suppose qu'en ne mettant pas toute suite en entier le retour de log10, il se peut qu'avec un +1, il y a un tel problème d'arrondi que le calcul devienne faux. Mais je ne le pense pas...

    Jc

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par juliendeparis
    Bonjours,
    Pourquoi un 's' à bonjour ?
    voila j'aimerai savoir si il existe une fonction comme "strlen();" mais destinée aux entiers. en effet j'aimerai pouvoir calculer la longueur d'un entier.

    Exemple :
    int num1=1111;
    int num2=22;
    longueur de num1= 4;
    longueur de num2 = 2;
    Une entier n'a pas de 'longueur'. Sa représentation mémoire a une certaine taille fixe en bytes qui dépend de l'implémentation (sizeof retourne cette taille).

    Sinon, si tu parles de la représentation textuelle, elle dépend de la valeur et de la base, voire des options de formatage (0 en tête ou non... etc.).

    Il faut pour ça calculer le nombre de digits nécessaires, donc, en gros, faire des divisions successives par la base... C'est plus un problème de math qu'autre chose. Pourquoi as-tu besoin de cette information ? Elle est rarement utile.

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut bonjour
    merci pour ces explications.
    Je me suis mal exprimé en effet, je voulais parler de la représentation textuelle de l'entier.

    @Emmanuel Delahaye :
    J'avais besion de ce calcul dans un souci de présentaion lors d'un affichage d'information dans un tableau, car je travail en mode fenettre dos. voila tout

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

Discussions similaires

  1. [Toutes versions] Valeur Maximum d'une variable de type ENTIER
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/11/2013, 03h17
  2. Réponses: 1
    Dernier message: 21/12/2005, 19h08
  3. Réponses: 3
    Dernier message: 28/07/2005, 21h30
  4. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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