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

10 réponses

1 2
Avatar
Fabien LE LEZ
On 10 Oct 2003 10:20:01 +0200, Jean-Marc Bourguet
wrote:

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

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


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

--
http://www.giromini.org/usenet-fr/repondre.html

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On 10 Oct 2003 10:20:01 +0200, Jean-Marc Bourguet
wrote:

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

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


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


Le test dans for est redondant. Sinon c'est bien ce que j'emploie
mais je me demandais si quelqu'un avait mieux.

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
Vincent Lascaux
if (boucle_pas_vide)
for (int i=d; i<=f; ++i)
{
...
if (i==f) break;
}


Le test dans for est redondant. Sinon c'est bien ce que j'emploie
mais je me demandais si quelqu'un avait mieux.


if(boucle_par_vide)
for(int i=d; true; ++i)
{
....
if(i==f) break;
}

Comme ca il y a plus de test redondant, mais c'est pas très beau (on sait
pas jusqu'où va la boucle à premiere lecture) si on ne fait pas une macro
(si c'est très utilisé)


Avatar
Fred
"Fabien LE LEZ" a écrit dans le message de
news:
On 10 Oct 2003 10:20:01 +0200, Jean-Marc Bourguet
wrote:

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

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


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



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

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

Fred


Avatar
Fabien LE LEZ
On Fri, 10 Oct 2003 11:06:41 +0200, "Vincent Lascaux"
wrote:

for(int i=d; true; ++i)


Le "true" est inutile, on peut l'enlever.

--
http://www.giromini.org/usenet-fr/repondre.html

Avatar
Marc Boyer
In article <bm5vs3$a0f$, Fred wrote:
"Fabien LE LEZ" a écrit dans le message de
news:
On 10 Oct 2003 10:20:01 +0200, Jean-Marc Bourguet
wrote:

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

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


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



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 ?

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



Avatar
Fabien SK
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


Avatar
Marc Boyer
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.

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



Avatar
Fabien SK
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.




Avatar
Fabien SK
Marc Boyer wrote:

Pourquoi f>0 ? J'ai du mal.



au temps pour moi, je n'ai rien dit. Tu avais raison en disant "A
condition que f>=d".


1 2