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 :

Limite superieure d'un size_t


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut Limite superieure d'un size_t
    Bonsoir,

    Dans un petit programme que je développe, j'ai besoin d'une file de priorité minimale. J'ai choisi de l'implémenter sous forme de tas-min, de la même façon que dans Introduction à l'algorithmique. Mon problème est dans l'implémentation de l'opération insérer.

    Afin de mettre les choses dans leur contexte, voici l'algorithme ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Fonction : inserer(f : file-min, e : element)
    Paramètres : f la file à modifier, et e l'élément à insérer dans la file.
    Insère e dans f.
    
    DEBUT
    |   /* ajout d'une nouvelle feuille, avec la clef la plus grand possible. */
    |   taille[f]    <- taille[f] + 1
    |   f[taille[f]] <- +INF
    |   /* on réduit la clef de l'élément, pour qu'il trouve sa place dans le tas */
    |   reduire-clef(f, taille[f], clef[e])
    FIN
    ... et l'implémentation :

    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
     
    err_e fileMin_inserer(fileMin_s *f, arbre_s *a)
    {
        err_e res = ERR_TAILLE;
     
        if (f->taille < FILEMIN_CAPACITE_MAX)
        {
            size_t nbocc = a->e.nbocc;
     
            a->e.nbocc = ULONG_MAX; /* FIXME */
     
            f->taille++;
            f->file[f->taille] = a;
     
            fileMin_reduireClef(f, f->taille, nbocc);
     
            res = ERR_OK;
        }
     
        return res;
    }
    Le problème se situe à la 9-ième ligne, marquée d'un FIXME.

    Le champ nbocc, de type size_t doit prendre la plus grande valeur possible. Hors la norme ISO C90 ne définit ce type que comme un entier non signé, résultat de l'opérateur sizeof.
    Il n'y a aucune garantie que size_t soit un typedef d'unsigned long, je m'avance donc un petit peu trop en lui affectant ULONG_MAX.

    Ma question est donc : comment obtenir la limite superieure d'un size_t sur la machine qui compile ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Peut être comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define Size_tMax  (size_t)(-1)

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Par défaut
    Oh ...
    J'ai envie de dire "rhaa mais pourquoi je n'y ai pas pensé ?"

    Un grand merci à toi diogene =)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut
    Ou sinon en C99 avec SIZE_MAX (stdint.h).

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

Discussions similaires

  1. [Turbo Pascal] Limite de la mémoire virtuelle
    Par moon tiger dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 08/02/2003, 22h30
  2. [VB6] [Scrollbar] Valeur maximale supérieure à 32750
    Par néo333 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2002, 10h24
  3. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56
  4. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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