vivelasuisse
Messages postés7Date d'inscriptionmercredi 11 février 2009StatutMembreDernière intervention28 janvier 2012
-
27 janv. 2012 à 23:17
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 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++;
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 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
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 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
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 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.