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 :

Entier de taille dynamique


Sujet :

C

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Entier de taille dynamique
    Bonjour,
    Je souhaite mettre en place un programme qui permette de gérer dynamiquement (pour éviter les débordements engendrés par les types de base) le stockage d'un entier à partir par exemple d'une chaine de caractères le représentant.
    Pour cela, j'ai choisi d'adopter la structure de donnée suivante pour le stoquage de mon entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
    	void *value;
    	/* current_ptr pointe sur le bit de poids le plus fort de la partie utilise */
    	void *current_ptr; 
    	unsigned long size; 
    } integer_t;
    (je suis conscient que le fait de stocker la taille sur un unsigned long limitera les possibilitées de la structure, mais pour l'instant je pense que ça convient largement à l'utilisation que je veux en faire)

    Pour commencer, je ne suis pas vraiment sûr (pour ne pas dire pas sûr du tout) de la structure que j'utilise.

    Maintenant voilà mon problème, j'ai une fonction pour ajouter un caractère (sensé représenter un entier) à mon nombre de la façon suivante :
    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
    23
    24
    25
    26
    void integer_addchar(integer_t *in, char val)
    {
    	/* on verifie qu'on a pas encore utiliser toute la memoire disponible */
    	if (in -> current_ptr == (in -> value + in -> size))
    	{
    		/* si c'est le cas, on realoue le double */
    		void *ptr;
    		if ((ptr = realloc(in -> value, (in -> size) * 2)))
    		{
    			in -> current_ptr = ptr + (in -> current_ptr - in -> value);
    			in -> value = ptr;
    		}
    		else 
    		{
    			/* s'il y a un probleme lors de la realocution de la memoire, on libere la memoire allouee et on termine le programme */
    			free(in -> value);
    			exit(0);
    		}
    	}
    	else
    	{
    		/* s'il y a assez de place, on additionne le caractere lu */
    		in -> value = (*(in -> value)  + ('0' - val));
    		*(in -> current_ptr)++;
    	}	
    }
    (je n'ai volontairement pas utilisé la pile et utilisé des accès direct à la mémoire car je ne suis pas encore sûr de ma structure de base)

    Je me posais déjà une première question : que ce passera-t-il lorsque j'incrémenterais mon pointeur current_ptr ? Sa nouvelle valeur pointera sur le bloc de 8 bit suivant ? Même question pour l'utilisation de *(in -> value).

    Ensuite je passe au problème proprement dit : le fait est que je ne veux incrémenter current_ptr que si le bloc actuellement pointé par current_ptr ne suffit plus pour stocker le résultat de la somme.
    Premièrement je n'ai pas énormément d'idées sur la façon de détecter le débordement, deuxièmement, si je pouvais le détecter, je n'ai pas d'idée sur la façon de faire intervenir le bloc courant et le bloc suivant pour le stockage de la nouvelle valeur.

    Ca fait beaucoup de questions, j'en suis conscient et je vous remercie d'avance pour vos réponses.

  2. #2
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Bonjour,
    pour éviter les débordements engendrés par les types de base
    Tu veux gérer des entiers de quelle taille ???

    Quelle est la taille des différents types ?
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Je souhaite essayer, dans une certaine mesure (problème du "size"), de gérer les entier "sans" limite de taille.

  4. #4
    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 olbat
    Je souhaite essayer, dans une certaine mesure (problème du "size"), de gérer les entier "sans" limite de taille.
    Tu vas donc recréer tous les opérateurs pour ça ? Genre BigNum ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Oui, j'ai envisagé de recréer tous les opérateurs de base.
    Je me demandais, ça ne simplifirais pas la chose si j'avais reccours à un transtypage lors des access à la mémoire (avec traitement des données fait en fonction) ?

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Avant de te poser des questions sur le transtypage, tu devrais peut-être revoir ton algorithme en utilisant une feuille de papier et un crayon : ça t'évitera un mal de crâne.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

Discussions similaires

  1. [Iframe][Débutant]Iframe et taille dynamique
    Par mavina dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 10/05/2006, 11h15
  2. div non superposés et de taille dynamique
    Par ibtisss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/04/2006, 11h56
  3. [HTML] DIV avec taille dynamique ?
    Par graphicsxp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2006, 15h42
  4. taille dynamique des cases dans état
    Par exter666 dans le forum Access
    Réponses: 14
    Dernier message: 09/09/2005, 15h30
  5. [JTABLE] taille dynamique = F°(String.length)
    Par tripop dans le forum Composants
    Réponses: 15
    Dernier message: 13/01/2005, 17h07

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