Itération manquante

vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012 - 27 janv. 2012 à 23:17
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 29 janv. 2012 à 13:18
Bonsoir,

J'ai un code qui ne fonctionne pas comme j'ai envie, et je ne trouve pas du tout ou sa plante..
Le programme devrait afficher (si l’utilisateur rentre 3):
a
b
c
...
x
y
z
aa
ab
ac
...
zx
zy
zz
aaa
aab
aac
...
zzx
zzy
zzz

Mais chez moi, il affiche:
The user selected as length 3, your program displays
a
b
c
...
x
y
z
aa
ab
ac
...
yx
yy
yz
aaa
aab
aac
...
yyx
yyy
yyz

Voici le code source:
string charMap = "abcdefghijklmnopqrstuvwxyz";
string strSaisie;
int nbChar ;
int l = 0;
int i = 0;
int x = 0;
int y = 0;

Console.Write("Nomdre de caractère pour la recursion: ");
strSaisie = Console.ReadLine();
nbChar = int.Parse(strSaisie);

char[] buffer = new char [nbChar];
int[] nChar = new int [nbChar];

while(l < nbChar)
{
for(i=0; i<=l; i++)
{
buffer[i] = charMap[0];
nChar[i] = 0 ;
}

while(nChar[0]!=25)
{
for(x=0;x<=25;x++)
{
buffer[l]=charMap[x];
nChar[l]=x;
String ch = new String(buffer);
Console.WriteLine(ch);
}
for(y=l;y>=0;y--)
{
if(nChar[y]==25&&nChar[0]!=25)
{
nChar[y]=0;
nChar[y-1]++;
}
buffer[y] = charMap[nChar[y]];
}
}

l++;


Merci d'avance

12 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
28 janv. 2012 à 10:20
Bonjour

au tout premier passage dans la boucle
		for(i=0; i<=l; i++)
{
buffer[i] = charMap[0];
nChar[i] = 0 ;
}


l vaut 0, donc tu ne fais qu'une itération et buffer[i] = buffer[0] = a.

Ensuite tu passes dans cette boucle
			for(x=0;x<=25;x++)
{
buffer[l]=charMap[x];
nChar[l]=x;
String ch = new String(buffer);
Console.WriteLine(ch);
}


l vaut toujours 0, donc buffer[l] = buffer[0] = a.
donc ch vaut "a\0\0" et forcement ça t'affiche a.

Je ne suis pas allé plus loin dans l'étude de ton code.

Whismeril
0
vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012
28 janv. 2012 à 12:20
Merci,

J'ai essayé de changer les valeurs d'initialistions des variables l i x y pour voir si qqch changait, mais non..

Pour ce qui vont compiler ce programme, vous verrez qu'il manque qqch car il devrait se finir par

zzz

et il se finit par

yyz

(si l'utilisateur rentre 3 par ex.) Et je ne sais pas comment changer sa!
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
28 janv. 2012 à 12:23
Qu'as tu mis comme valeur?


Whismeril
0
vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012
28 janv. 2012 à 12:48
J'ai mis 1, faudrait-il que je mette plus? Car sa n'a rien changer, sauf quand j'ai mis un a l, le programme n'a rien afficher..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
28 janv. 2012 à 13:01
As ru remarqué que ça passe de yz à aaa?
J'ai donc mis saisi 2 au nombre de caractère et ça stoppe bien à yz.

je te propose d'ajouter
                        if (ch.StartsWith("yz"))
                        { string toto = "a"; }//mettre un point d'arrêt ici


juste en dessus de
				String ch = new String(buffer);
Console.WriteLine(ch);


tu mets le pointa d'arrêt ou je te l'ai signalé.

Tu saisies 3 au nombre de caractères, ça va s'arrêter sur ma ligne (qui ne sert qu'à ça!) et ensuite tu exécutes en pas à pas pour voir ce qui ce passe, regarde bien les valeurs de chaque variable avant de passer à la ligne suivante.

Tu peux remettrais toutes les valeurs à 0, je n'avais pas bien compris ton problème au début.


Whismeril
0
vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012
28 janv. 2012 à 13:07
Un point d'arret? Qu'est ?
Et comment je peux voir les valeurs des variables en l'éxécutant pas à pas ?

Merci

Holaf
0
vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012
28 janv. 2012 à 13:10
J'ai trouvé comment voir les valeurs en pas à pas, mais le point d'arret... Un : Console.ReadLine(); irait?
0
vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012
28 janv. 2012 à 13:14
En pas à pas, il s'arrête à:
nbChar = int.Parse(strSaisie);

en me disant: L’exception FormatException n'a pas été gérée
Le format de la chaîne d'entrée est incorrect.
0
vivelasuisse Messages postés 7 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 28 janvier 2012
28 janv. 2012 à 13:26
Bon, j'ai fait Nettoyer la solution, donc c'est bon.. J'ai fait un pas à pas. Je n'ai quand même pas trouver pourquoi et ou sa plante...
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
28 janv. 2012 à 14:03
Le point d'arrêt est un outil de débugage.

Sous visual studio:
Tu appuies sur F9, là ou tu veux que l'exécution s'arrête. (ça devient marron)
Tu exécutes ton code avec la flèche verte ou F5 (pas ctrl F5).

Quand ça s'arrête, tu appuies sur F10 pour passer de ligne en ligne (F11 si tu appelles une méthode et que tu veux aussi passer cette méthode pas à pas).

Pour contrôler le contenu de tes variables, soit tu places la souris dessus et tu attends l'info bulle.
Sinon, en bas (par défaut) sous le code, dans la fenêtre ou apparaissent les erreurs de compilation tu as un onglet "variables locales", qui te permet d'étudier toutes les variables déclarées dans le bloc en cours.
Dernière solution, tu sélectionnes une variable ou une expression (par exemple a*b/c ne fonctionne pas tu peux choisir b/c) est tu fais click droit "ajouter un espion". Celui ci s'affichera dans un 3eme onglet de la fenêtre de variables locales.


Whismeril
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
29 janv. 2012 à 12:15
Bonjour,

as tu trouvé?

si non c'est ta boucle
while(nChar[0]!=25) {.....}
qui ne va pas.
En gros tu luis dis "si ça va commencer par z alors arrête toi".

A mon sens tu as deux types de solutions:
-tu calcules le nombre d'itérations 1 lettre : 26, 2 lettres 26 au carré, donc dans ton cas 1 lettre puis 2 = 26 + 26 au carré etc... et tu fais un for(...)
- tu fais un Do{....} While() et dans ta clause while tu testes que ch ne soit pas composé que de z, pour ça tu peux créer une variable de type string que que compose en contenant des z autant que tu à de lettres.


Whismeril
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
29 janv. 2012 à 13:18
Ha j'ai oublié ensuite pour décaler tes caractères dans ton buffer, ça coince aussi.


if(nChar[y]==25&&nChar[0]!=25)


à "zaz" il ne se passera rien.


Whismeril
0
Rejoignez-nous