francouas
Messages postés16Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention21 décembre 2009
-
26 févr. 2009 à 10:40
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 2010
-
27 févr. 2009 à 11:19
J'aimerai ecrire la fonction booléenne estCache(e : mot, code)
qui renvoie vrai si toutes les lettres du mot apparaissent dans le bon ordre à l'intérieur du code.
Exemples : estCache("demain", "abadabacemopaladin") ) vrai
estCache ("demain", "abadabacmopaladin") ) faux
ma methode est imcomplète pour l'instant
dans l'idée je compare les deux chaines avec une boucle
si égale alors l'ordre est respecté
si pas égale alors pas d'ordre (mais faut il continuer dans la boucle ?)
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 27 févr. 2009 à 01:09
bon comme l'a dit sharpMao ici c'est l'algo qui importe et pas le langage. Tu devrais poser la question si tu avais un probleme avec le langage plutot (genre tu proposes l'algo et on t'aiderait a traduire en c#).
Enfin bon si vraiment tu ne comprends, je propose une solution qui devrait fonctionner. ce n'est guère la plus simple (je pense que lyle a en tête d'autres choses bcp plus simple mais bon c'est une solution malgré tout):
Appel de la fonction:
bool test = EstCache("EddMddedLdddIdNdEd", "emeline");
if (test)
MessageBox.Show("L'ordre est respecté");
else
MessageBox.Show("L'ordre n'est pas respecté");
Fonction :
private bool EstCache(string toParse, string mot)
{
//pour ne pas prendre en compte la casse
toParse = toParse.ToLowerInvariant();
mot = mot.ToLowerInvariant();
bool ordre = true;
//le caractere que l'on doit rencontrer pour respecter l'ordre
char doitRencontrer = mot[0];
for (int j = 0; j < toParse.Length; j++ )
{
//si le caractere est différent de celui que l'on doit rencontrer
if (toParse[j] != doitRencontrer)
{
//et si le caractere fait parti du mot
if (mot.Contains(toParse[j]))
{
//alors l'ordre n'a pas été respecté
ordre = false;
break;
}
}
else
{
//si le caractere est égal a celui que l'on doit rencontrer alors
//on recupere le caractere suivant (j'ai utilisé substring ici juste pour ne pas utiliser un autre variable i qui serait un compteur que j'incrementerai pour passer au caractere suivant
if (mot.Length > 1)
{
mot = mot.Substring(1);
doitRencontrer = mot[0];
}
}
}
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 26 févr. 2009 à 13:23
Hello,
Désolé Bidou, mais avec ça, tu ne garantis pas l'ordre.
Quant à la réponse à ce problème, ça me gêne toujours un peu de donner une réponse à ce qui est probablement un problème d'école, et donc qui a pour but de faire réfléchir.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
francouas
Messages postés16Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention21 décembre 2009 26 févr. 2009 à 13:33
lyle..je ne comprend pas ta question
bidou, ce n'est pas l'objet du programme car il faut laisser saisir l'utilisateur et retourner une reponse en fonction des saisies
sharpM ..je ne demande pas forcement le programme mais au moins l'algo.
c'est un univers nouveau pour moi
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 26 févr. 2009 à 13:56
Mais c'est justement de trouver l'algo le but de l'exercice.
Si on te le donne, tu n'auras pas appris grand chose.
Apprendre la programmation, et l'algorithmique, c'est apprendre une manière de penser, et c'est pas sur des forum que tu vas la trouver.
C'est justement en commençant par ce genre de petit exercice que tu deviendras un bon développeur.
Donc en gros, il faut d'abord apprendre à marcher avant de courir.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 26 févr. 2009 à 14:50
Francouas :
Ton algorithme ne serra pas le même dans le cas ou tu exclus la possibilité qu'une des lettres du mot soit présente avant que son occurrences apparaisse dans ton mot.
Lyle56
Messages postés240Date d'inscriptionjeudi 1 mai 2008StatutMembreDernière intervention19 juillet 20122 26 févr. 2009 à 15:30
Il y as une solution sans tableau et avec seulement les fonctions de bases des strings mais c'est un peut plus compliqué ... et c'est toujours dans une boucle ;)
francouas
Messages postés16Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention21 décembre 2009 27 févr. 2009 à 08:35
merci Rougail
je prend note de ta version même si je n'ai pas encore vu toutes les commandes que tu proposes (comme le break par ex)
j'ai eu une correction hier ..si ca vous interesse je la met en ligne
merci en tout cas pour votre disponibilité a tous
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 27 févr. 2009 à 11:19
Nan il semblerait que je n'ai pas compris la consigne non plus en fait ^^ (ma faute j'ai mal regardé l'exemple du début).
Ainsi EstCache("demain", "abadabacemopaladin") renverra faux alors que selon ton exo elle devrait renvoyer vrai.
Je pensais qu'il fallait absolument rencontrer les caracteres dans l'ordre, a savoir que si on rencontrait un "a" (caractere présent dans le mot) avant le "d" alors cela renverrait faux.
Désolé pour le misunderstanding! donc valide plutot la solution de bidou et annuler la mienne ^^