Parcourir un tableau Char pour comparer avec un autre tableau Char

alucard1805 Messages postés 4 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 2 avril 2008 - 1 avril 2008 à 19:42
alucard1805 Messages postés 4 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 23:13
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 :

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' };
           
            char[] tabValue = new char[5];

            Console.WriteLine("Entrez le premier caractère de votre mot de passe:");
            char rep1 = Console.ReadLine();
          
            tabValue[0] = rep1;
            tabValue[1] = tabValue[0] + 2;
            tabValue[2] = tabValue[1] - 18;
            tabValue[3] = tabValue[2];
            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.

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
1 avril 2008 à 21:38
Salut

Peux-tu mettre un exemple plus parlant

Avec les valeurs que doit avoir  le tableau  à chaque  étape car  c'est pas trés clair.

Il ne sert à rien ton tableau tabSelect.

Piste qui peuvent aider

int a = (int) tabSelect[25];
0
alucard1805 Messages postés 4 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 00:14
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 :

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;
            }
        }
    }

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.   
            
            
0
alucard1805 Messages postés 4 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 21:53
Je vais essayer de mieux m'expliquer. J'aimerais en fait pouvoir entré un mot de passe. J'entre le premier caractère dans la variable i. Ensuite le programme vérifie si i appartient à tabSelect. Ensuite le deuxième caractère que je dois entrer est imposé, selon la valeur de i actuelle. Par exemple si j'ai entré 'A' en premier caractère, le deuxième caractère que je devrais saisir se situe à 2 cran vers la droite dans le tableau tabSelect. Ainsi pour que le caractère soit valide ce doit être 'C' (de 'A' à 'C' il y a 2 chiffre d'écart dans tabSelect). Ainsi le deuxième caractère doit être tabSelect[x+2]. Mon problème c'est que je ne sais pas parcourir le tabSelect et je ne sais même pas si tabSelect est exacte.
0
alucard1805 Messages postés 4 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 23:13
Grâce à des gens 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 à leur aide :

[cpp]class Program
    {
        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" };

        public static int Index(string rep, int ctn)
        {
            for (int x = 0; x < tabSelect.Length; x++)
            {
                if (tabSelect[x] == rep) { ctn++; return x; }
            }
            return ctn;
        }

        static void Main(string[] args)
        {
            string[] tabValue = new string[5];
            int ctn = 0;

            Console.WriteLine("Entrez le premier caractère de votre mot de passe:");
            tabValue[0] = Console.ReadLine();
            Index(tabValue[0], ctn);
            tabValue[1] = tabSelect[Index(tabValue[0] + 2)] ;
            if (ctn == 1) Index(tabValue[1], ctn);
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte");
            }
            tabValue[2] = tabSelect[Index(tabValue[1]-3)] ;
            if (ctn == 2) Index(tabValue[2], ctn);
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte");
            }
            tabValue[3] = tabSelect[Index(tabValue[2]+6)] ;
            if (ctn == 3) Index(tabValue[3], ctn);
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte");
            }
            tabValue[4] = tabSelect[Index(tabValue[3] +4)] ;
            if (ctn == 4) Index(tabValue[4], ctn);
            else
            {
                Console.WriteLine("Le mot de passe est incorrecte");
            }
        }
    }/cpp

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. Aidez moi s'il vous plait.
0
Rejoignez-nous