OVH Cloud OVH Cloud

Boucle

18 réponses
Avatar
Jean-Marc Bourguet
Comment faites vous pour boucler sur toutes les valeurs d'un
intervalle, sachant que les bornes peuvent etre la valeur extreme du
type et que l'intervalle peut etre vide. Avec int,

for (int i = d; i <= f; ++i) {
...
}

ne fonctionne pas car f peut etre INT_MAX (et d peut etre INT_MIN).
A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

8 réponses

1 2
Avatar
Jean-Marc Bourguet
Fabien SK <fabsk+ writes:

Marc Boyer wrote:

Fabien SK wrote:

for (int i = d; i < f; ++i) {
traitement(i);
}
traitement(f);

avec inline void traitement(int i); ca devrait etre pas trop mal


A condition que f>=d, non ?


Et à condition que f>0
Pourquoi f>0 ? J'ai du mal.



"f" est la borne supérieure. Si tu veux boucler sur un ensemble vide (borne
supérieur est égale a zéro), ça ne marche pas à cause du "traitement(f);" à
l'extérieur de la boucle. On appelle "traitement" une fois alors qu'on ne
doit jamais l'appeler.


Pourquoi je ne pourrais pas boucler de INT_MIN a INT_MIN+10?

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org





Avatar
Marc Boyer
Fabien SK wrote:
Marc Boyer wrote:
Fabien SK wrote:
for (int i = d; i < f; ++i) {
traitement(i);
}
traitement(f);

avec inline void traitement(int i); ca devrait etre pas trop mal
A condition que f>=d, non ?



Et à condition que f>0


Pourquoi f>0 ? J'ai du mal.


"f" est la borne supérieure. Si tu veux boucler sur un ensemble vide
(borne supérieur est égale a zéro), ça ne marche pas à cause du
"traitement(f);" à l'extérieur de la boucle. On appelle "traitement" une
fois alors qu'on ne doit jamais l'appeler.


Ben, voui, mais si je veux faire une boucle de -5 à -1 ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(





Avatar
Fabien SK
"f" est la borne supérieure. Si tu veux boucler sur un ensemble vide (borne
supérieur est égale a zéro), ça ne marche pas à cause du "traitement(f);" à
l'extérieur de la boucle. On appelle "traitement" une fois alors qu'on ne
doit jamais l'appeler.


Pourquoi je ne pourrais pas boucler de INT_MIN a INT_MIN+10?


J'ai eu une hallucination passagère. J'assume mon erreur, j'expie.


Avatar
Fred
"Marc Boyer" a écrit dans le message de >
A condition que f>=d, non ?


En effet, il faudrait un "if" adequat avant tout cela.
J'ai propose cela pour eviter un "if" supplementaire dans la boucle.

Fred

Avatar
kanze
Jean-Marc Bourguet wrote in message
news:...
Comment faites vous pour boucler sur toutes les valeurs d'un
intervalle, sachant que les bornes peuvent etre la valeur extreme du
type et que l'intervalle peut etre vide. Avec int,

for (int i = d; i <= f; ++i) {
...
}

ne fonctionne pas car f peut etre INT_MAX (et d peut etre INT_MIN).


J'utilise un type plus grand.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
James Kanze
Jean-Marc Bourguet writes:

|> Comment faites vous pour boucler sur toutes les valeurs d'un
|> intervalle, sachant que les bornes peuvent etre la valeur extreme du
|> type et que l'intervalle peut etre vide. Avec int,

|> for (int i = d; i <= f; ++i) {
|> ...
|> }

|> ne fonctionne pas car f peut etre INT_MAX (et d peut etre INT_MIN).

En passant, comment est-il spécifié, ton intervalle ? Parce que si
c'est par begin,end, ou bien, un des bornes n'est pas comprise, ou bien
tu ne peux pas spécifier un intervalle vide (au moins que... [0,-1]
serait légal et un intervalle vide).

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Jean-Marc Bourguet
James Kanze writes:

Jean-Marc Bourguet writes:

|> Comment faites vous pour boucler sur toutes les valeurs d'un
|> intervalle, sachant que les bornes peuvent etre la valeur extreme du
|> type et que l'intervalle peut etre vide. Avec int,

|> for (int i = d; i <= f; ++i) {
|> ...
|> }

|> ne fonctionne pas car f peut etre INT_MAX (et d peut etre INT_MIN).

J'utilise un type plus grand.


Et c'est quoi le type portable plus grand que int?

En passant, comment est-il spécifié, ton intervalle ? Parce que si
c'est par begin,end, ou bien, un des bornes n'est pas comprise, ou
bien tu ne peux pas spécifier un intervalle vide (au moins
que... [0,-1] serait légal et un intervalle vide).


Bornes comprises et si la borne superieure est strictement (:-)) plus
petite que la borne inferieure, l'intervalle est vide.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
kanze
Jean-Marc Bourguet wrote in message
news:...
James Kanze writes:

Jean-Marc Bourguet writes:

|> Comment faites vous pour boucler sur toutes les valeurs d'un
|> intervalle, sachant que les bornes peuvent etre la valeur
|> extreme du type et que l'intervalle peut etre vide. Avec int,

|> for (int i = d; i <= f; ++i) {
|> ...
|> }

|> ne fonctionne pas car f peut etre INT_MAX (et d peut etre INT_MIN).

J'utilise un type plus grand.


Et c'est quoi le type portable plus grand que int?


De façon portable, tous les types entiers peuvent avoir la même taille.
De façon practique, ça dépend de la portabilité qu'on vise. Toutes les
plateformes courantes ont des types entiers de 64 bits, à ce que je
sache, quoique sous des noms différents (long, long long, __int64,
etc.). Alors, avec une utilisation judicieuse de typedef dans un en-tête
qui dépend de la plateforme...

Sinon, j'ai pas mal aimé l'idée d'écarter les intervalles vides avant,
d'executer sur un intervalle mi-ouvert, puis d'executer encore une
dernière fois sur la borne supérieur.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


1 2