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 ... :
... 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 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
Le problème se situe à la 9-ième ligne, marquée d'un FIXME.
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 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.
Partager