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 :

Manipulation des variables.


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut Manipulation des variables.
    Bonjour,

    Je commence à apprendre à programmer en C et je ne comprend pas quel type de variable je dois choisir.

    Par exemple je voudrais stocker un très grand nombre décimal dans une variable pour l'afficher ultérieurement à l'écran, par exemple "255125125125125125125125255".

    J'ai essayer avec int, long int, long long int, mais à chaque fois que j'essais d'afficher le nombre, il ne correspond pas au nombre initial.

    Quelle est la solution ?

    Merci.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    bonjour

    si tu veux stocker un decimal, tu peux utiliser un float(4octets), sinon essaye le double(8 octets) ou le long double(12octets)

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Hao
    Citation Envoyé par gwendy
    bonjour

    si tu veux stocker un decimal, tu peux utiliser un float(4octets), sinon essaye le double(8 octets) ou le long double(12octets)
    Dans gcc, les long double occupent effectivement 12 octets, mais n'en utilisent que 10, les 2 octets de poids fort étant toujours à 0, les 10 autres étant au format de la représentation 80 bits des fpu Intel.


    fred61 en C standard, il n'y a pas de type permettant de stocker des valeurs de n'importe quelle précision.

    Il y a des librairies qui le permettent, mais si tu es débutant, je suggère que tu apprennes d'abord le langage

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par fred61
    "255125125125125125125125255".

    Quelle est la solution ?

    Merci.
    les types des variables en c sont :

    type domaine
    int dépend de la machine
    unsigned int dépend de la machine
    short [-32768,32767]
    unsigned short [0,65535]
    long [-2^(31),2^(31-1)]
    unsigned long [0,2^(32-1)]
    float [-3.4*10^38,3.4*10^38]
    double [-1.7*10^308,1.7*10^308]
    long double [-3.4*10^4932,3.4*10^4932]


    et a toi de choisir le convenable.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par k.cheker
    les types des variables en c sont :

    type domaine
    int dépend de la machine
    unsigned int dépend de la machine
    short [-32768,32767]
    unsigned short [0,65535]
    long [-2^(31),2^(31-1)]
    unsigned long [0,2^(32-1)]
    float [-3.4*10^38,3.4*10^38]
    double [-1.7*10^308,1.7*10^308]
    long double [-3.4*10^4932,3.4*10^4932]


    et a toi de choisir le convenable.
    Cela ne dépend pas du C (pour la taille de chaque variable) mais de l'implémentation et du matériel. Ces données peuvent varier par exemple sur un Mac, ou Amiga, Risk, etc...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par fred61
    Je commence à apprendre à programmer en C et je ne comprend pas quel type de variable je dois choisir.

    Par exemple je voudrais stocker un très grand nombre décimal dans une variable pour l'afficher ultérieurement à l'écran, par exemple "255125125125125125125125255".

    J'ai essayer avec int, long int, long long int, mais à chaque fois que j'essais d'afficher le nombre, il ne correspond pas au nombre initial.
    Les types ont des limites (les minimas sont imposés par la norme) :

    http://emmanuel-delahaye.developpez.com/init_c.htm#type

    Pour les valeurs plus grandes, tu peux utiliser les réels, mais tu perds en précision.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut
    Merci pour vos réponses, en fait je demande ça car je voulais m'entrainer à manipuler les différents types de variables en fesant une sorte de petite calculatrice, et je ne comprend pas quel type de variable utilise par exemple la calculatrice de windows, qui peux calculer des entiers comportant jusqu'à 32 chiffres.

    et en lisant les différentes FAQ et cours je ne vois aucun type pouvant faire ça.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut
    Petit exemple le programme ci-dessous :

    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>
    #include <stdlib.h>
     
    int main(void)
    {
        unsigned long long  i  ;
        i = 999999999999 ;
     
        printf("Resultat : %llu\n\n", i) ;
     
     
        system("pause") ;
    	return 0;
    }
    Lorsque je l'exécute, il m'affiche 3567587327 au lieu de 999999999999.

    Je ne comprend pas ?

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Hao,

    Quelle machine ?
    Quel OS ?
    Quel compilateur ?

  10. #10
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par fred61
    Merci pour vos réponses, en fait je demande ça car je voulais m'entrainer à manipuler les différents types de variables en fesant une sorte de petite calculatrice, et je ne comprend pas quel type de variable utilise par exemple la calculatrice de windows, qui peux calculer des entiers comportant jusqu'à 32 chiffres.

    et en lisant les différentes FAQ et cours je ne vois aucun type pouvant faire ça.
    Comme il te l'a deja ete signale, il n'existe pas de type en C a precision infinie. Pour realiser de tels calculs il faut s'orienter vers des bibliotheques specialisees ou en faire une toi meme.

    Generalement le principe utilisee pour effectuer de tels traitement est l'utilisation de tableau pour contenir les nombres et creations des fonctions arithmetiques travaillant sur ces tableaux et propageant les retenus.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par fred61
    Petit exemple le programme ci-dessous :

    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>
    #include <stdlib.h>
     
    int main(void)
    {
        unsigned long long  i  ;
        i = 999999999999 ;
     
        printf("Resultat : %llu\n\n", i) ;
     
     
        system("pause") ;
    	return 0;
    }
    Lorsque je l'exécute, il m'affiche 3567587327 au lieu de 999999999999.

    Je ne comprend pas ?
    C'est parce que la bibliothèque C de Windows (msvcrt.dll) n'est pas compatible avec C99. Il faut ruser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifdef WIN32
    #define LL "I64"
    #else
    #define LL "ll"
    #endif
     
    ...
     
        printf("Resultat : %"LL"u\n\n", i) ;

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Lax,
    Citation Envoyé par Emmanuel Delahaye
    C'est parce que la bibliothèque C de Windows (msvcrt.dll) n'est pas compatible avec C99. Il faut ruser.
    Avec Visual Studio 2005, le code de fred61 fonctionne parfaitement. Mais peut-être que l'installation ds VS2005 met à jour la dll ?

    Mais si c'est ça, alors pourquoi le même code, sur la même machine, mais avec Code::Blocks et Mingw ne marche pas ?

    Il semble plutôt qu GCC, donc mingw, ait des problèmes avec le formatage ll ou llu. C'est en tout cas ce que disent la majorité des réponses que j'obtiens avec Google.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 172
    Par défaut
    Je suis sous windows XP et j'utilise Dev C++.

    J'ai essayé la solution d'Emmanuel et ça fonctionne très bien (même si j'ai rien compris), je trouve ça un peu tordu quand même de devoir faire ce genre de manip pour un programme aussi simple, mais bon...

    Merci.

Discussions similaires

  1. Formater et manipuler des variables binaires
    Par lcoulon dans le forum Débuter
    Réponses: 7
    Dernier message: 29/10/2011, 18h35
  2. Manipulation des variables
    Par dgwabo dans le forum Dev-C++
    Réponses: 1
    Dernier message: 30/03/2011, 09h00
  3. Manipulation des variables de callback
    Par Warno dans le forum jQuery
    Réponses: 3
    Dernier message: 24/02/2010, 09h53
  4. Manipuler des variables/valeurs
    Par ttone dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2008, 17h13

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