IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Décaler les lettres d'un mot dans l'alphabet


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut [Résolu]Décaler les lettres d'un mot dans l'alphabet
    Bonjour,

    Je réalise un programme permettant le chiffrement et déchiffrement d'une chaine de caractère (une phrase) qui est saisie et à partir d'une clé qu'il l'est aussi.

    ensuite selon la clé je dois décaler les lettre à l'aide du tableau alphabet et ceci en fessant une boucle dans l'alphabet si une clé est grande (clé : 50).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    class Carre
     
    {
     
    	private String message, mesCrypte;
    	private int cle, longueur,i,j;
    	private final static char [] alphabet = {'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 Carre()
     
    	{
     
    System.out.print("Saisissez un message ");
    		message = Clavier.lire_String();
    longueur = message.length();		//Compte le nombre de caractère 
     
    		message = message.replaceAll (" ",""); // supprime les espaces 
     
    	}
     
    	public void crypt()
    	{
     
     
     
          for(i=0;i<longueur;i++)
     
    		{
    			for(j=0;j<26;j++)
    			{
    				if (j == message.charAt(i))
    				{
    					Traitement ???
    				}
    			}
    		}
     
     
    	}
     
    }


    voila à ceux qui on déjà entendu parler de cryptage. Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    enfin c'est pour décaler dans l'alphabet qui pose problème sinon pour insérer dans le tableau je pense avoir trouvé.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    Comme ca je dirais qu'il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (i = 0; i < longueur; i++) {
                for (j = 0; j < 26; j++) {
                    if (alphabet[j] == message.charAt(i)) {
                        result+=alphabet[(j+cle)%26];
    				}
     
                }
            }
    Sachant que la clé est un int.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    OK, mais result+ c'est quoi le type de la variable ?

    Voila le programme complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    class Carre
     
    {
        private char Tcarre [][] ;
    	private String message;
    	private int cle, longueur, l1, i, j;
    	private final static char [] Talpha = {'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'};
     
    	private double racine;
     
     
    	public Carre()
     
    	{
    		l1=0;	
    		Tcarre = new char[10] [10];
    		System.out.print("Saisissez un message ");
    		message = Clavier.lire_String();
     
     
     
    	}
     
    	public void Cryptage()
    	{
    		message = message.replaceAll (" ",""); // supprime les espaces
    		longueur = message.length();		//Compte le nombre de caractère 
    		racine = Math.sqrt(longueur); // raciné caré
     
    		while(racine % 1 != 0); // Controle de saisie qui vérifie que le nombre de lettre est paire
    		{
    			System.out.println("Impossible de créer le carré de César avec ce message");
    			System.out.println("Entrez un nouveau message :");
    			message = Clavier.lire_String(); 
    		}
     
    		for(i=0;i<longueur;i++)
    		{
    			for(j=0;j<longueur;j++)
    			{
    				Tcarre[i][j]= message.charAt(l1);
    				l1 = l1 + 1;
    			}
    		}
     
    		System.out.print("Saisissez la clé de codage ");
    		cle = Clavier.lire_int();
     
    		for(i=0;i<longueur;i++)
    		{
    			for(j=0;j<26;j++)
    			{
    				if (j == message.charAt(i))
    				{
    					System.out.print("Voici le message crypté : "+ Talpha[(j + cle) % 26]);
    				}
    			}
    		}
     
     
     
    	}
     
    }
    il ne marche, même si je mais un mot avec le nombre de lettre paire il me dit que c'est impossible et quant je ressaye j'ai ce message :

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    at java.lang.String.charAt(Unknown Source)
    at Carre.Cryptage(Carre.java:42)

    apparemment y'a un problème avec cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tcarre[i][j]= message.charAt(l1);

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    result est un String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(i=0;i<longueur;i++)
    		{
    			for(j=0;j<longueur;j++)
    			{
    				Tcarre[i][j]= message.charAt(l1);
    				l1 = l1 + 1;
    			}
    		}
    Je pense que vous oubliez de remettre la variable l1 a 0, c'est pourquoi vous avez une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (j == message.charAt(i))
    Vous comparez un entier et un charactere? pourquoi ne pas utiliser le tableau avec l'alphabet que vous avez créé?

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    OK, mais result+ c'est quoi le type de la variable ?
    result+ n'est pas une variable valide. Ta confusion vient du fait que tu ne sembles pas connaitre l'opérateur "+=".

    En fait result += alphabet[(j+cle)%26]; est l'équivalent de result = resultat + alphabet[(j+cle)%26];
    Il existe également des opérateurs "-=", "*=", ...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    OK merci pour les opérateurs et c'est bon j'ai remplacé j avec Talpha[j].

    Mais aussi il semble y avoir un autre problème, normalement on doit pouvoir crypter que les nombres de lettre qui on une racine carré hors quand je saisie "carré" il m'affiche impossible alors qu'il a 4 lettre.

    Et la variable l1 c'est à partir d'où que je devrais la remettre à 0 ? dans le Pour ou après ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    C'est pas le chiffrement ce césar que vous essayez de coder? Si c'est ça jamais entendus parler de nombre de lettre.... sinon pourriez vous en dire plus?

    Vous faites deux boucles for de la taille du mot, et vous parcourez le mot. D'un coté vous avez deux boucles for donc : longueur*longueur et de l'autre uniquement le mot lui même donc juste longueur ; il est normal que dans message.charAt(l1) l1 devienne plus grand que le message et donc cela crée une erreur. Il faut donc réinitialiser l1 avant ou apres la 2me boucle.

    Mais sinon pourquoi cette étape? vous ne vous servez même pas du tableau ainsi créé.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    Oui c'est précisément le "Code de César et le Carré de César"

    L'étape ou l'on traite la variable l1 consiste à mettre les caractère d'un mot saisie dans un tableau à 2 dimension afin de former un carré.

    Je suis étudiant en informatique c'est donc dans le cadre d'un devoir à rendre (ce soir)

    Voila la dernière mis à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
     
    class Carre
     
    {
        private char Tcarre [][] ;
    	private String message, mesCrypt;
    	private int cle, longueur, l1, i, j;
    	private final static char [] Talpha = {'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'};
     
    	private double racine;
     
     
    	public Carre()
     
    	{
    		l1=0;
    		Tcarre = new char[10] [10];
     
     
     
     
    	}
     
    	public void Cryptage()
    	{
     
    		System.out.print("Saisissez un message ");
    		message = Clavier.lire_String();
    		message = message.replaceAll (" ",""); // supprime les espaces
    		longueur = message.length();		//Compte le nombre de caractère 
    		racine = Math.sqrt(longueur); // raciné caré
     
    		while(racine % 1 != 0) // Controle de saisie qui vérifie que le nombre de lettre est paire
    		{
    			System.out.println("Impossible de créer le carré de César avec ce message");
    			System.out.println("Entrez un nouveau message :");
    			message = Clavier.lire_String(); 
    		}
     
    		for(i=0;i<longueur;i++)
    		{
    			l1=0;
    			for(j=0;j<longueur;j++)
    			{
    				Tcarre[i][j]= message.charAt(l1);
    				l1 = l1 + 1;
     
    			}
     
    		}
     
     
    		System.out.print("Saisissez la clé de codage ");
    		cle = Clavier.lire_int();
     
    		for(i=0;i<longueur;i++)
    		{
    			for(j=0;j<26;j++)
    			{
    				if (Talpha[j] == message.charAt(i))
    				{
    					mesCrypt += Talpha[(j + cle) % 26];
    				}
    			}
    		}
    		System.out.print("Voici le mot crypté : " + mesCrypt);
     
     
    	}
    Je n'est plus de dépassement de capacité mais il ne fonctionne toujours pas soit ça me dit que c'est pas possible de crypté (alors que le nombre de lettre à une racine) soit le résultat est faux et il n'a pas déplacé correctement les lettres.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    C'est bon j'ai reussi à le faire fonctionné.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Compter les occurences d'un mot dans un PHP
    Par FoxLeRenard dans le forum Langage
    Réponses: 2
    Dernier message: 19/02/2009, 09h18
  2. garder les 2eres lettres de chaque mot dans une colonne
    Par infiniti dans le forum Langage
    Réponses: 3
    Dernier message: 01/06/2008, 18h01
  3. Compter les occurences d'un mot dans une chaîne
    Par mimi2311 dans le forum Pascal
    Réponses: 4
    Dernier message: 20/04/2008, 23h37
  4. mélanger les lettres d'un mot
    Par isa150183 dans le forum Langage
    Réponses: 3
    Dernier message: 07/03/2007, 19h31
  5. [débutant] classer les lettres d'un mot
    Par capliteon_07 dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2006, 20h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo