Question sur lesTableaux et plus precisement .Length .indexof .substring [Résolu]

Messages postés
4
Date d'inscription
jeudi 24 mai 2012
Dernière intervention
18 septembre 2012
- 24 mai 2012 à 09:58 - Dernière réponse :
Messages postés
2285
Date d'inscription
lundi 12 décembre 2011
Dernière intervention
1 mai 2017
- 16 juin 2014 à 16:26
Bien le bonjour je suis un aprentis developpeur logiciel (c#,SQL server) en formation a l'afpa, j'ai reussi les tests malgres un niveau 5 (scolaire) mais je l'avoue je misère et cela me plais de me torturer l'esprit!
Cependant je ne peut pas me permetre de rester trop longtemp sur le même TP et cela sans perdre un temps precieux car la formation ce deroulant en 10 mois (8 de cours 2 en entreprise) pour un diplome de niveau 3 (BTS) qui a l'origine ce deroule en 2 ans!
Cela est la raison de ma presence ici clairement "pour ne pas rester bloquer 3 jour sur le meme TP" cela sachant que notre formation est en "autoformation" et que notre formateur est quasiment absent ( arivant en retard, partant boire un café pendant deux heures laissant les élèves "seul dans leur ..." et etant specialiste pour repondre "a coté" de ta question!

Ma question concerne l'exercice suivant:
Ecrire le programme qui compte le nombre de voyelles d’un mot saisi au clavier, en
utilisant :
· Length qui rend le nombre de lettres d’une chaîne donnée.
· Substring(p,n) qui extrait d’une chaîne donnée une sous chaîne de n
caractères à partir de la position p.
· IndexOf(schaîne) qui restitue le rang de la première occurrence de
schaîne dans chaîne donnée (si non trouvé : -1).

J'ai certe bien compris l'effet des methodes precedente et leur syntaxe mais pas la façon de les utiliser dans le cas present ( on vient de les "aprendre" cela fait 6 jour que la formation a commencé)
Si une charitable âme voulais bien m'expliquer la logique a utiliser je lui en serai fortement
reconnaissant!
Merci
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Dernière intervention
11 juin 2013
- 24 mai 2012 à 11:47
3
Merci
Bonjour,

Ton idée d'algo pourrait fonctionner mais je pense que c'est vraiment ultra compliqué pour résoudre une opération aussi simple.

Explication: Tu as besoin de parcourir chaque lettre de la chaîne de l'utilisateur, et vérifier si elle existe dans ta chaîne de voyelle.
Voila le code que j'ai fais:
 String voyelles = "aeiouy"; //Chaine contenant les voyelles
 String aTraiter = Console.ReadLine(); //Récupération de la chaine de l'utilisateur
 int nbVoyelles = 0; //compteur de voyelles

//boucle for incrémente i jusqu'a i = la longueur de la chaine aTraiter
 for (int i = 0; i < aTraiter.Length; i++) 
 {
    //aTraiter.Substring(i, 1) récupère la lettre a l'index i
    //voyelle.indexOf(la lettre) renvoi la position de cette lettre dans la chaine voyelle
    //si cette lettre est présente dans la chaîne voyelle le résultat > 0
    if (voyelles.IndexOf(aTraiter.Substring(i, 1)) != -1)
    {
        //incrémentation du compteur
        nbVoyelles++;
    }
 }
//on affiche le nombre de voyelles
Console.WriteLine(nbVoyelles);

Voila. J’espère que tu as compris le fonctionnement. Et rappelles toi que la simplicité est souvent la meilleure solution .
Si tu as encore des questions...

Merci cs_L0ci 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Messages postés
2285
Date d'inscription
lundi 12 décembre 2011
Dernière intervention
1 mai 2017
- 16 juin 2014 à 16:26
un grand merci à toi !!!
Cela ma vraiment aider :)
Commenter la réponse de cs_L0ci
Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 24 mai 2012 à 12:16
3
Merci
Re,

l'idée simple est effectivement un double parcours. Maintenant, pour un tel algo, il existe des méthodes bien plus appropriées que celles qu'on te demande d'utiliser. On t'oriente ici clairement vers un autre algo, semi-récursif, qui consiste à :
- pour chaque caractère de ma chaine des voyelles (partie itérative de l'algo)
- - je fais une copie de ma chaine saisie
- - tant que ma copie n'est pas une chaine vide
- - - je cherche la première occurrence de la voyelle en cours
- - - > si je trouve la voyelle, j'incrémente mon compteur et ma chaine devient sa propre sous-chaine de l'index de la voyelle à la fin de la chaine, je boucle
- - - > si je trouve rien, je break la boucle et je passe à la voyelle suivante.

Avis perso.

Merci cs_jopop 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_jopop
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Dernière intervention
11 juin 2013
- 24 mai 2012 à 10:27
0
Merci
Bonjour,

Tout d'abord je t'inviterai a consulter le règlement du forum concernant la résolution des devoirs.

Cependant voici une petite explication du fonctionnement d'un algorithme possible:
-Créer une chaîne qui contient les voyelles
-Récupérer la chaîne entrée par l'utilisateur
-Pour chaque lettre de la chaîne utilisateur(.Length), tester si elle existe dans la chaîne des voyelles (indexOf(chaine.substring()))
-si indexOf renvoi un nombre positif -> c'est une voyelle -> on incrémente la variable de comptage, Sinon on continue
-On a fini de parcourir la chaîne de l'utilisateur -> on affiche le résultat.

Maintenant à ton tour
Hésites pas a mettre en réponse le code c# que tu as fais si tu as besoin d'aide.
Commenter la réponse de cs_L0ci
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 24 mai 2012 à 11:18
0
Merci
Salut,

si tu es en plein apprentissage du .NET je ne peux que te conseiller d'aller voir la MSDN de Microsoft. Tu y trouveras toutes les explications utiles et nécessaires, avec des notes intéressantes et même des exemples à pomper
Commenter la réponse de cs_jopop
Messages postés
4
Date d'inscription
jeudi 24 mai 2012
Dernière intervention
18 septembre 2012
- 24 mai 2012 à 11:22
0
Merci
Je te remercie de ta réponse rapide et efficace, pour le règlement je vient de le lire et te présente mes sincères excuses pour ne pas l'avoir consulté avant!
Je vais suivre ton conseil!
en fait j'avais déjà une idée dans le genre mais pas aussi précise!
j'ai déclaré une variable tableau de type string

string[] tab = new string[] { "a", "e", "i", "o", "u", "y" };
int test = 0;
int i = 0;//place dans le tableau//
int i2 = 0;//place dans la saisie//
Console.WriteLine("tapez un mot"); //entrée du mot//
string saisie = Console.ReadLine();// affichage du writeline plus haut et atribution a la valeur saisie (string) des caracteres entrés//
do

{
if (i !=-1)
{

test = saisie.IndexOf(tab[i], i2);
stock=stock.Substring(test,1);

}


}

while (i < 5);
}
}
}

Bon il y a des erreurs que je suis en train de chassé, l'idée étant de placer 2 boucles de type Do/while.
et d'incrémenter i et i2 (même si pour l'instant je n'ai pas d'idée exact de leur placement dans le code), le but final étant de commencer par chercher le premier terme du tableau ( dans ce cadre "a") dans la saisie et d'extraire (avec substring) la lettre trouvé avec indexof et de stocker ce caractère dans la variable "stock" puis d'incrémenté ( un fois tous les "a" trouver) pour passé a la seconde valeur du tableau ( dans ce cas "e") et refaire la même chose,
Puis au final compter chaque voyelles indépendamment dans la variable "stock"
Donc je pense qu'il y aura 2 ou 3 variables a incrémenté ainsi que 2 ou 3 boucles do/while
Cependant je pense qu'il manque une chose ou deux a mon raisonnement!

en clair je pourrai dire que j'ai des idées théorique mais que dans ce cas présent mon problème reste mon manque d'idée de syntaxe ( j'ai déjà tester pas mal de choses qui ce trouver êtres des erreurs (et dont j'ai donc effacer le code) et je pense que visual studio a pris l'habitude de m'insulter avec le terme "error")
Mais j'avoue que ton message est intéressant car il me conforte sur certaines idées et me permet d'en repenser d'autres!

PS: pour le règlement et plus précisément la règle "On fait une recherche (forum / sources / tutoriels / Codyx.org / CodyxBot / Search.CodeS-SourceS.Com) avant de poster une question.
90% des questions posées quotidiennement sont déjà présentes et résolues."
j'ai chercher mais n'ai pas trouvé ( mais j'avoue que je n'ai peu être pas chercher assez précisément et vous présente mes excuses si c'est le cas!
Commenter la réponse de ObsidianD
Messages postés
4
Date d'inscription
jeudi 24 mai 2012
Dernière intervention
18 septembre 2012
- 24 mai 2012 à 14:10
0
Merci
rebonjour,
Je vous remercie tous les deux pour vos excellents conseils effectivement vu comme cela il me semble que je me suis compliquer la vie pour rien.
honnêtement je trouve vos deux conseils aussi bon l'un que l'autre et maintenant que j'ai lut et assimiler la logique de vos deux raisonnements j'ai ma propre idée quand a comment le saisir moi même!

LOci j'apprécie que tu m'ais fait le code cependant je ne vais pas l'utiliser tel quel car je ne suis pas partisan du "copier coller" cependant en voyant ton code parfaitement commenter j'ai bien mieux compris la logique ce qui m'as aussi particulièrement aider sur la logique de jopop car vos deux idée combiné m'ont permis de voir ou était mes plus importantes erreurs!

Je pense donc que l'on peut considérer ce problème comme résolut et je vous en remercie tous les deux un fois de plus.
Merci a tous les deux
Commenter la réponse de ObsidianD

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.