OVH Cloud OVH Cloud

débutant boucles imbriquées

16 réponses
Avatar
Nico
Je cherche à faire un compte à rebours qui foctionne chiffre par chiffre en
précisant le nombre de chiffres que l'on veut ex :

avec 2chiffre :
9 9 | 9 8 | 9 7 | 9 6 | 9 5........................8 9 | 8 8 | 8 7
.............0 0

avec 3 chiffres
9 9 9 | 9 9 8 | 9 9 7 | ..............................9 8 9 | 9 8
8..............
bref vous aurez compris

je veux absolument faire ça chiffre par chiffre

l'utilisateur choisi donc le nombre de chiffres qu'il veut


J'ai commencé un truc et il me faudrait autant de boucles imbriqués que
possible
en fait il me faut autant de boucles imbriqués que de chiffres mais je
n'arrive à faire que des suites de boucles et non pas des boucles imbriquées

Si quelqu'un comprends qqchose à ce uqe je viens d'écrire et à une idée, je
suis preneur
Merci d'avance

Nico

6 réponses

1 2
Avatar
Gabriel Dos Reis
writes:

[...]

| Ce n'est pas parce que ça s'appelle C++ qu'on a perdu la souplesse de C.
| (Et pour ceux qui ne s'y connaît pas Duff, le code ci-dessus est tout ce
| qu'il y a de plus légal et de défini en C++.)

je ne vois pas pourquoi il vaut revenir à invoquer C, puisque la
grammaire (et la semantique) de C++ dit

labeled-statement:
identifier : statement
case constant-expression : statement
default : statement

Il n'y a pas restriction particulière sur ce que statement doit être
(à par si c'est un jump-statement, les restrictions spécifiques qui
s'y appliquent).

Ce n'est pas parce que Duff a utilisé un tel idiom pour la première
fois en C, qu'il faut revenir à invoquer C ;-)

-- Gaby
Avatar
Loïc Joly
Nico wrote:
Je cherche à faire un compte à rebours qui foctionne chiffre par chiffre en
précisant le nombre de chiffres que l'on veut ex :

avec 2chiffre :
9 9 | 9 8 | 9 7 | 9 6 | 9 5........................8 9 | 8 8 | 8 7
.............0 0

avec 3 chiffres
9 9 9 | 9 9 8 | 9 9 7 | ..............................9 8 9 | 9 8
8..............
bref vous aurez compris

je veux absolument faire ça chiffre par chiffre

l'utilisateur choisi donc le nombre de chiffres qu'il veut


J'ai commencé un truc et il me faudrait autant de boucles imbriqués que
possible


Moi, j'ai aussi commené un truc, mais il n'y a besoin que d'une boucle :

#include <iostream>
#include <vector>

class RoueCodeuse
{
public:
RoueCodeuse(int valeur, RoueCodeuse *r = NULL);
int get() const;
void operator --();
private:
int chiffreCourant;
RoueCodeuse* roueAGauche;
};

RoueCodeuse::RoueCodeuse(int valeur, RoueCodeuse *r) :
chiffreCourant(valeur),
roueAGauche(r)
{
assert(chiffreCourant>=0);
assert(chiffreCourant<=9);
}

int RoueCodeuse::get() const
{
return chiffreCourant;
}

void RoueCodeuse::operator--()
{
chiffreCourant--;
if (chiffreCourant<0)
{
chiffreCourant = 9;
if (roueAGauche != NULL)
{
--(*roueAGauche);
}
}
}

typedef std::vector<RoueCodeuse*> Afficheur;

void affiche(Afficheur const&a)
{
for (Afficheur::const_iterator it = a.begin();
it != a.end();
++it)
{
std::cout << (*it)->get() << ' ';
}
std::cout << std::endl;
}

int main()
{
int n;
std::cout << "Combien de chiffres ?";
std::cin >> n;
if (n<1)
n=1;
RoueCodeuse toto(9);
--toto;
std::cout << toto.get() << std::endl;
Afficheur afficheur;
afficheur.push_back(new RoueCodeuse(9)); // Chiffre le plus à gauche
for (int i = 0;
i<n-1;
++i)
{
afficheur.push_back(new RoueCodeuse(9, afficheur[i]));
}
while (true)
{
affiche(afficheur);
-- (*afficheur[n-1]);
}
}


--
Loïc

Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
writes:

[...]

| Ce n'est pas parce que ça s'appelle C++ qu'on a perdu la souplesse
| de C. (Et pour ceux qui ne s'y connaît pas Duff, le code ci-dessus
| est tout ce qu'il y a de plus légal et de défini en C++.)

je ne vois pas pourquoi il vaut revenir à invoquer C, puisque la
grammaire (et la semantique) de C++ dit

labeled-statement:
identifier : statement
case constant-expression : statement
default : statement


Ça serait mieux que tu lises ce qui est écrit avant de répondre. J'ai
bien dit que c'était du C++ légal. Si je fais le rapprochement du C,
c'est bien parce que le C++ se base sur le C, et que dans ce cas-ci, il
n'y a pas de différence entre les deux langages. D'autres évolutions du
langage, plus récentes, me fait penser que si on a de telles
possibilités ici, c'est bien pour des raisons de compatibilité C. Ce
n'est certainement ni Stroustrup ni le comité de normalisation C++ qui a
inventé cette possibilité, et ça ne m'étonnerais pas que Stroustrup ne
le trouve pas particulièrement beau, et qu'il s'y est tenu simplement
parce que ça ne valait pas la peine de rompre la compatibilité avec C
ici. (Mais tu es plus proche de lui que moi ; tu n'as qu'à lui
démander.)

Il n'y a pas restriction particulière sur ce que statement doit être
(à par si c'est un jump-statement, les restrictions spécifiques qui
s'y appliquent).

Ce n'est pas parce que Duff a utilisé un tel idiom pour la première
fois en C, qu'il faut revenir à invoquer C ;-)


C'est bien une construction qu'on a hérité du C, et non une innovation
du C++. Ou est-ce que tu veux dire le contraire ? (En fait, à part
l'utilisation de cout, le code que j'ai posté était du C pûr et simple.)

--
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
Gabriel Dos Reis
writes:

| Gabriel Dos Reis wrote in message
| news:...
| > writes:
|
| > [...]
|
| > | Ce n'est pas parce que ça s'appelle C++ qu'on a perdu la souplesse
| > | de C. (Et pour ceux qui ne s'y connaît pas Duff, le code ci-dessus
| > | est tout ce qu'il y a de plus légal et de défini en C++.)
|
| > je ne vois pas pourquoi il vaut revenir à invoquer C, puisque la
| > grammaire (et la semantique) de C++ dit
|
| > labeled-statement:
| > identifier : statement
| > case constant-expression : statement
| > default : statement
|
| Ça serait mieux que tu lises ce qui est écrit avant de répondre.

Cela aurait du contenu si
(1) tu te l'appliquais ;
(2) tu montrais en quoi je n'avais pas lu ton message avant de
répondre.

Ou as-tu juste appuyé sur la touche Send avant Think, alors que tu
voulais faire le contraire ?

| J'ai bien dit que c'était du C++ légal.

Je n'ai pas dit le contraire et je n'ai pas dit que tu as dit le
contraire.

| Si je fais le rapprochement du C,
| c'est bien parce que le C++ se base sur le C, et que dans ce cas-ci, il
| n'y a pas de différence entre les deux langages.

et je disais qu'il n'y avait vraiment pas besoin de revenir à invoquer
le C.

| D'autres évolutions du
| langage, plus récentes, me fait penser que si on a de telles
| possibilités ici, c'est bien pour des raisons de compatibilité C.

Lesquelles ?

| Ce
| n'est certainement ni Stroustrup ni le comité de normalisation C++ qui a
| inventé cette possibilité,

Personne ne dit le contraire.

| et ça ne m'étonnerais pas que Stroustrup ne
| le trouve pas particulièrement beau, et qu'il s'y est tenu simplement
| parce que ça ne valait pas la peine de rompre la compatibilité avec C
| ici. (Mais tu es plus proche de lui que moi ; tu n'as qu'à lui
| démander.)

cela ne t'empêche pas de le faire aussi.

<groumph>
C'est fou, c'est devenu un refrain : « t'as qu'à lui demander, t'es
proche de lui maintenant. »
Certaines personnes ont chanté ce refrain sur comp.lang.c++.moderated
récemment ; (je n'ai pas poursuivi le débat plus loin par pur respect
pour eux, pour ne pas entamer leur « crédibitlité », parce
qu'évidemment, sur les points où ils ont chanté ce refrain en public,
je sais que la réalité est autrement et je sais pourquoi j'ai posé ces
question).

Si tu crois que tu as des info sûres, sors-les. Ne me demande pas de
le demander à X parce que je serais proche de lui.
</groumph>


Il lit régulièrement ce forum, tu n'as qu'à lui demander si tu veux
qu'il te réponde .

| > Il n'y a pas restriction particulière sur ce que statement doit être
| > (à par si c'est un jump-statement, les restrictions spécifiques qui
| > s'y appliquent).
|
| > Ce n'est pas parce que Duff a utilisé un tel idiom pour la première
| > fois en C, qu'il faut revenir à invoquer C ;-)
|
| C'est bien une construction qu'on a hérité du C, et non une innovation
| du C++. Ou est-ce que tu veux dire le contraire ?

Tu ne me sembles pas avoir compris les tokens que tu as lus dans mon
message -- ce devenu fréquent ces temps ci.

Reviens-tu à invoquesu C à chaque fois que tu utilises « for », juste
parce que c'est hérité du C?

-- Gaby
Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
writes:

| Gabriel Dos Reis wrote in message
| news:...
| > writes:

| > [...]

| > | Ce n'est pas parce que ça s'appelle C++ qu'on a perdu la
| > | souplesse de C. (Et pour ceux qui ne s'y connaît pas Duff, le
| > | code ci-dessus est tout ce qu'il y a de plus légal et de défini
| > | en C++.)

| > je ne vois pas pourquoi il vaut revenir à invoquer C, puisque la
| > grammaire (et la semantique) de C++ dit

| > labeled-statement:
| > identifier : statement
| > case constant-expression : statement
| > default : statement

| Ça serait mieux que tu lises ce qui est écrit avant de répondre.

Cela aurait du contenu si
(1) tu te l'appliquais ;
(2) tu montrais en quoi je n'avais pas lu ton message avant de
répondre.

Ou as-tu juste appuyé sur la touche Send avant Think, alors que tu
voulais faire le contraire ?

| J'ai bien dit que c'était du C++ légal.

Je n'ai pas dit le contraire et je n'ai pas dit que tu as dit le
contraire.


Tu as bien cité la grammaire de C++. Pour quelle raison, sinon que pour
prouver que c'était du C++ légal ? Et pourquoi vouloir prouver que
c'était légal en C++, sinon que pour contradire l'impression contraire ?

Parfois, j'avoue ne pas te comprendre. Quel était le but de ton posting,
sinon de corriger quelque chose dans ce que j'ai dit?

| Si je fais le rapprochement du C, c'est bien parce que le C++ se
| base sur le C, et que dans ce cas-ci, il n'y a pas de différence
| entre les deux langages.

et je disais qu'il n'y avait vraiment pas besoin de revenir à invoquer
le C.


Il n'y avait pas un besoin impératif d'invoquer le C. Il n'y a pas non
plus une raison d'en éviter à tout prix.

La technique en question est plus typique de ce qui se faisait en C, à
un certain époque, de ce qu'on fait en C++ aujourd'hui.

| D'autres évolutions du langage, plus récentes, me fait penser que si
| on a de telles possibilités ici, c'est bien pour des raisons de
| compatibilité C.

Lesquelles ?


Les blocs de try, pour commencer. Ils exigent bien les {...}.

Plus généralement, toute l'évolution de C++ est allé dans la direction
de plus de propreté, et de moins de hacks sales.

| Ce n'est certainement ni Stroustrup ni le comité de normalisation
| C++ qui a inventé cette possibilité,

Personne ne dit le contraire.

| et ça ne m'étonnerais pas que Stroustrup ne le trouve pas
| particulièrement beau, et qu'il s'y est tenu simplement parce que ça
| ne valait pas la peine de rompre la compatibilité avec C ici. (Mais
| tu es plus proche de lui que moi ; tu n'as qu'à lui démander.)

cela ne t'empêche pas de le faire aussi.

<groumph>
C'est fou, c'est devenu un refrain : « t'as qu'à lui demander, t'es
proche de lui maintenant. »


Je m'excuse. Je ne savais pas que tu en avais honte.

Certaines personnes ont chanté ce refrain sur comp.lang.c++.moderated
récemment ; (je n'ai pas poursuivi le débat plus loin par pur respect
pour eux, pour ne pas entamer leur « crédibitlité », parce
qu'évidemment, sur les points où ils ont chanté ce refrain en public,
je sais que la réalité est autrement et je sais pourquoi j'ai posé ces
question).

Si tu crois que tu as des info sûres, sors-les. Ne me demande pas de
le demander à X parce que je serais proche de lui.
</groumph>

Il lit régulièrement ce forum, tu n'as qu'à lui demander si tu veux
qu'il te réponde .

| > Il n'y a pas restriction particulière sur ce que statement doit
| > être (à par si c'est un jump-statement, les restrictions
| > spécifiques qui s'y appliquent).

| > Ce n'est pas parce que Duff a utilisé un tel idiom pour la
| > première fois en C, qu'il faut revenir à invoquer C ;-)

| C'est bien une construction qu'on a hérité du C, et non une
| innovation du C++. Ou est-ce que tu veux dire le contraire ?

Tu ne me sembles pas avoir compris les tokens que tu as lus dans mon
message -- ce devenu fréquent ces temps ci.


C'était difficile à comprendre, parce que je ne voyais pas le rapport
avec ce que j'avais écrit.

Reviens-tu à invoquesu C à chaque fois que tu utilises « for », juste
parce que c'est hérité du C?


Non, mais quand je me sers de quelque chose de particulièrement sale
dans le langage, je ne le trouve pas mal de rappeler pourquoi il est là.

Au cas où tu ne l'avais pas compris, il y avait une très forte dose
d'ironie dans mes propos. J'avais supposé tout le monde assez
intelligent pour le comprendre. Apparamment, je me suis trompé dans ton
cas.

--
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
Gabriel Dos Reis
writes:

[...]

| Tu as bien cité la grammaire de C++. Pour quelle raison, sinon que pour
| prouver que c'était du C++ légal ?

La grammaire de C++ est la seule chose que tu as été capable de lire
dans ce message ?

[...]

| Parfois, j'avoue ne pas te comprendre.

Appuie de temps en temps sur la touche Think avant la touche Send.

| Quel était le but de ton posting,
| sinon de corriger quelque chose dans ce que j'ai dit?

Parce que dans ton esprit, un followup à ton message est destiné,

(1) soit pour te contredire,
(2) te corriger ?

À ce stade, il faut penser à consulter.

[...]

| Au cas où tu ne l'avais pas compris, il y avait une très forte dose
| d'ironie dans mes propos. J'avais supposé tout le monde assez
| intelligent pour le comprendre. Apparamment, je me suis trompé dans ton
| cas.

Pour supposer de l'intelligence de la part des autres, il faut d'abord
en avoir.

Tu as dit récemment que tu avais des problèmes personnels. Je ne sais
pas si c'est à la tête ; mais cela devient sérieux. Tu devrais consulter.

-- Gaby
1 2