Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1741 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Parcourir un Char[ ] grâce aux valeurs d'un Char [ ]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parcourir un Char[ ] grâce aux valeurs d'un Char [ ]

n°1711238
Durst1805
Posté le 01-04-2008 à 19:44:36  profilanswer
 

Salut à tous tout d'abord. Voila j'ai un petit souci. J'aimerais qu'un de mes tableau Char puisse parcourir les valeurs d'un autre tableau Char et les comparés. Mon problème c'est que les valeurs du premier peuvent être des lettres et pour incrémenter leur valeur j'utilise des chiffres. Voici mon code pour que ce soit plus clair :
 

Code :
  1. char[] tabSelect = {'0','1', '2', '3', '4', '5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K', 'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
  2.          
  3.             char[] tabValue = new char[5];
  4.             Console.WriteLine("Entrez le premier caractère de votre mot de passe:" );
  5.             char rep1 = Console.ReadLine();
  6.          
  7.             tabValue[0] = rep1;
  8.             tabValue[1] = tabValue[0] + 2;
  9.             tabValue[2] = tabValue[1] - 18;
  10.             tabValue[3] = tabValue[2];
  11.             tabValue[4] = tabValue[3] + 22;


 
Voilà au final je voudrais qu'une fois la valeur de tabValue[0] est entrée par l'utilisateur, tabValue[1] soit égale à tabValue[0] + 2, mais le 2 représentant le nombre de caractère parcouru dans le tableau tabSelect (en partant du caractère entré par l'utilisateur qui correspondrait au caractère du même nom présent dans tabSelect).
Je vous donne un exemple:
Si à la question j'écris 1, je voudrais que le prochain caractère qu'il faut entrer soit tabSelect[1] + 2 donc tabSelect[3], mais tout ca en passant par tabValue qui gère la variation des valeur entre le premier et le dernier caractère.
Je ne sais pas si j'ai été clair, mais en tout cas merci à tous ceux qui pourront m'aider, à mon avis c'est pas grand chose mais je n'ai pas encore assez de connaissances dans le domaine et j'ai beau me tordre la tête dans tous les sens je ne trouve pas de solution.

mood
Publicité
Posté le 01-04-2008 à 19:44:36  profilanswer
 

n°1711325
Durst1805
Posté le 02-04-2008 à 00:17:48  profilanswer
 

Voila mon code que je viens de revoir à peu près pour vous facilitez la tâche. Il ne fonctionne pas tel quel, mais c'est pour vous montrer de quoi il en retourne. En fait c'est un mot de passe qui se défini selon le premier caractère entré par l'utilisateur :
 
<c>class Program
    {
        static void Main(string[] args)
        {
            char[] tabSelect = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            int ctn = 0;
            int x = tabSelect.Length;
 
            Console.WriteLine("Entrez le premier caractère de votre mot de passe:" );
            i = Console.ReadLine();
            Test(i, tabSelect[x], ctn);
            tabSelect[x] = tabSelect[x + 2];
 
            if (ctn == 1)
                Console.WriteLine("Entrez le deuxième caractère de votre mot de passe:" );
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte" );
                break;
            }
            i = Console.ReadLine();
            Test(i, tabSelect[x], ctn);
            tabSelect[x] = tabSelect[x - 6];
 
            if (ctn == 2)
                Console.WriteLine("Entrez le troisième caractère de votre mot de passe:" );
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte" );
                break;
            }
        }
 
 
        public static void Test(string i, int x, int ctn)
        {
            i = (int)i;
            if (i  == x) ctn++;
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte" );
                break;
            }
        }
    }</c>
 
En fait je voudrais que le x de tabSelect[x] représente la position que va prendre i dans le tableau. i défini lui même cette position, par une donnée entrée par l'utilisateur.
Par exemple pour le premier caractère j'entre la valeur 'A', je voudrais que i positionne x dans le tabSelect[] de façon à ce que pour le prochain test, du deuxième caractère, x se trouve dans le tabSelect à la position 'A' que j'ai entré, c'est à dire tabSelect[10].
Tout ça pour pouvoir ensuite après chaque étape, donnée une nouvelle valeur pour qu'il soit obligé à l'utilisateur d'entré un caractère prédéfini. Dans mon cas, pour être valide, mon deuxième caractère devra être 'C' car je respecte tabSelect[x] = tabSelect[x + 2]; situé juste après le Test, qui est censé incrémenté la valeur entrée en premier de 2 pour définir la nouvelle valeur du deuxième caractère qu'il faut entrer pour passer à l'étape trois.
 
En fait ce programme à pour but de définir des mot de passe aléatoires mais qui suivent toujours la même logique :
- L'utilisateur choisi un premier caractère compris dans tabSelect[]
- Il choisi ensuite un deuxième caractère compris dans tabSelect[], mais celui-ci doit correspondre à la valeur tabSelect[x] du premier caractère, incrémentée de 2 vers la droite.
- Il choisi ensuite un troisième caractère compris dans tabSelect[], mais celui-ci doit correspondre à la valeur tabSelect[x] du premier caractère, décrémentée de 6 vers la gauche
- .....
 
Merci beaucoup à tous ceux qui pourront m'aider (et qui me comprendront surtout), ce projet me tiens très à coeur.    

n°1711598
FLeFou
Posté le 02-04-2008 à 13:56:26  profilanswer
 

Durst1805 a écrit :

Voila mon code que je viens de revoir à peu près pour vous facilitez la tâche. Il ne fonctionne pas tel quel, mais c'est pour vous montrer de quoi il en retourne. En fait c'est un mot de passe qui se défini selon le premier caractère entré par l'utilisateur :
 
<c>class Program
    {
        static void Main(string[] args)
        {
            char[] tabSelect = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            int ctn = 0;
            int x = tabSelect.Length;
 
            Console.WriteLine("Entrez le premier caractère de votre mot de passe:" );
            i = Console.ReadLine();
            Test(i, tabSelect[x], ctn);
            tabSelect[x] = tabSelect[x + 2];
 
            if (ctn == 1)
                Console.WriteLine("Entrez le deuxième caractère de votre mot de passe:" );
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte" );
                break;
            }
            i = Console.ReadLine();
            Test(i, tabSelect[x], ctn);
            tabSelect[x] = tabSelect[x - 6];
 
            if (ctn == 2)
                Console.WriteLine("Entrez le troisième caractère de votre mot de passe:" );
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte" );
                break;
            }
        }
 
 
        public static void Test(string i, int x, int ctn)
        {
            i = (int)i;
            if (i  == x) ctn++;
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte" );
                break;
            }
        }
    }</c>
 
En fait je voudrais que le x de tabSelect[x] représente la position que va prendre i dans le tableau. i défini lui même cette position, par une donnée entrée par l'utilisateur.
Par exemple pour le premier caractère j'entre la valeur 'A', je voudrais que i positionne x dans le tabSelect[] de façon à ce que pour le prochain test, du deuxième caractère, x se trouve dans le tabSelect à la position 'A' que j'ai entré, c'est à dire tabSelect[10].
Tout ça pour pouvoir ensuite après chaque étape, donnée une nouvelle valeur pour qu'il soit obligé à l'utilisateur d'entré un caractère prédéfini. Dans mon cas, pour être valide, mon deuxième caractère devra être 'C' car je respecte tabSelect[x] = tabSelect[x + 2]; situé juste après le Test, qui est censé incrémenté la valeur entrée en premier de 2 pour définir la nouvelle valeur du deuxième caractère qu'il faut entrer pour passer à l'étape trois.
 
En fait ce programme à pour but de définir des mot de passe aléatoires mais qui suivent toujours la même logique :
- L'utilisateur choisi un premier caractère compris dans tabSelect[]
- Il choisi ensuite un deuxième caractère compris dans tabSelect[], mais celui-ci doit correspondre à la valeur tabSelect[x] du premier caractère, incrémentée de 2 vers la droite.
- Il choisi ensuite un troisième caractère compris dans tabSelect[], mais celui-ci doit correspondre à la valeur tabSelect[x] du premier caractère, décrémentée de 6 vers la gauche
- .....
 
Merci beaucoup à tous ceux qui pourront m'aider (et qui me comprendront surtout), ce projet me tiens très à coeur.    


 
 
Pas sur d'avoir compris ce que tu cherches a faire mais bon je me lance

Code :
  1. // si i ='A'
  2. int Sauvegarde = 0;
  3. for(int TrouverX = 0; TrouverX < tabSelect.Length; TrouverX ++)
  4. {
  5. if(tadSelect[TrouverX] == i)
  6. {
  7. Sauvegarde = TrouverX;
  8. }
  9. }
  10. // à la sortie tu as Sauvegarde == 10


Maintenant je sais pas ce que tu veux en faire de ton Sauvegarde = 10


---------------
The secret of happiness is not in doing what one likes but in liking what one has to do Sir James M. Barrie
n°1711796
Durst1805
Posté le 02-04-2008 à 21:53:36  profilanswer
 

Merci ton code à l'air bon. En fait sauvegarde = 10 doit au final être imposé en tant que seul caractère valide pour le mot de passe, par rapport  à sa position dans tabSelect. En clair sauvegarde doit correspondre à une lettre et non un chiffre, ou alors à une position dans tabSelect qui correspond à une lettre.
Une petite question aussi, comment je peux faire pour que tabSelect soit lu en boucle ? si par exemple pour le 3e caractère, le programme impose qu'il se situe a tabSelect[i+200] comme le tableau n'est pas si grand, une fois le bout atteint qu'il reboucle automatiquement.
Merci.
 
EDIT :
 
Grâce à toi et aux autres j'ai pu bien avancer, mais il reste néanmoins une erreur qui m'empêche de finaliser. Voici le code que j'ai produit grâce à ton aide :
 

Code :
  1. class Program
  2.     {
  3.         static string[] tabSelect = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
  4.         public static int Index(string rep, int ctn)
  5.         {
  6.             for (int x = 0; x < tabSelect.Length; x++)
  7.             {
  8.                 if (tabSelect[x] == rep) { ctn++; return x; }
  9.             }
  10.             return ctn;
  11.         }
  12.         static void Main(string[] args)
  13.         {
  14.             string[] tabValue = new string[5];
  15.             int ctn = 0;
  16.             Console.WriteLine("Entrez le premier caractère de votre mot de passe:" );
  17.             tabValue[0] = Console.ReadLine();
  18.             Index(tabValue[0], ctn);
  19.             tabValue[1] = tabSelect[Index(tabValue[0] + 2)];
  20.             if (ctn == 1) Index(tabValue[1], ctn);
  21.             else
  22.             {
  23.                 Console.WriteLine("Le mot de passe est incorrecte" );
  24.             }
  25.             tabValue[2] = tabSelect[Index(tabValue[1]-3)];
  26.             if (ctn == 2) Index(tabValue[2], ctn);
  27.             else
  28.             {
  29.                 Console.WriteLine("Le mot de passe est incorrecte" );
  30.             }
  31.             tabValue[3] = tabSelect[Index(tabValue[2]+6)];
  32.             if (ctn == 3) Index(tabValue[3], ctn);
  33.             else
  34.             {
  35.                 Console.WriteLine("Le mot de passe est incorrecte" );
  36.             }
  37.             tabValue[4] = tabSelect[Index(tabValue[3] +4)];
  38.             if (ctn == 4) Index(tabValue[4], ctn);
  39.             else
  40.             {
  41.                 Console.WriteLine("Le mot de passe est incorrecte" );
  42.             }
  43.         }
  44.     }


 
Voilà le problème se situe en gras. Le compilateur me donne l'erreur suivante :
Error 3 : No overload for method 'Index' takes '1' arguments
 
Il me semble que ca parle de surcharge, mais je ne comprend pas très bien l'erreur. Aide moi s'il te plait.


Message édité par Durst1805 le 02-04-2008 à 23:12:03
n°1711929
MagicBuzz
Posté le 03-04-2008 à 10:21:41  profilanswer
 

logique...
 
lignes 21 et 22 tu fait n'importe quoi

n°1712117
Durst1805
Posté le 03-04-2008 à 13:47:09  profilanswer
 

Ca ne m'aide pas beaucoup ce que tu me dit. En fait l'appel tabValue[1] = tabSelect[Index(tabValue[0] + 2)]; à l'air inutile, je l'ai fait sur les conseils de qqun. Moi je voudrais juste ça :
tabValue[1] = tabSelect[(tabValue[0] + 2)];
Mais je ne sais pas le formuler.

n°1712118
Durst1805
Posté le 03-04-2008 à 13:48:17  profilanswer
 

Ca ne m'aide pas beaucoup ce que tu me dit. En fait l'appel tabValue[1] = tabSelect[Index(tabValue[0] + 2)]; à l'air inutile, je l'ai fait sur les conseils de qqun. Moi je voudrais juste ça :
tabValue[1] = tabSelect[(tabValue[0] + 2)];
Mais je ne sais pas le formuler.

n°1712138
MagicBuzz
Posté le 03-04-2008 à 14:18:22  profilanswer
 

Surtout :
 
Ligne 21, tu appelles ta fonction Index, qui ne fait rien d'autre que de te retourner un indice.
Sauf que tu ne le récupères pas, donc ça sert à rien du tout.
 
Ligne 22, tu appelles Index() en ne lui passant qu'un paramètre, alors qu'il en attend deux, ce qui ne peut pas marcher...
:spamafote:


Message édité par MagicBuzz le 03-04-2008 à 14:18:40

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Parcourir un Char[ ] grâce aux valeurs d'un Char [ ]

 

Sujets relatifs
Récupérer les valeurs d'un parametre OUT d'une procédure stockésubstitutions de valeurs dans un fichier
Récupération de valeurs et découpe[Resolu] Excel VBA Regrouper des valeurs depuis des classeurs/feuilles
Isoler grace à TOP les 5 plus fortes valeurs mais sur plusieurs Agrég?VBA Excel, problème de filtre avec valeurs décimales
Parcourir récursivement un dossier sur réseau Windowsclassee un champ de type char
Nombre de valeurs passées à une fonction, inconnue.controler que les valeurs d'un tableau sont presente dans un autre
Plus de sujets relatifs à : Parcourir un Char[ ] grâce aux valeurs d'un Char [ ]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR