Table de Vigenère

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

Table de Vigenère

par Rockleader » 16 Mar 2013, 09:29

Bonjour à tous; pour ceux qui ne savent pas ce que c'ets que cette table, voilà le lien d'une image rapide.

http://theudericus.free.fr/Esoterisme/RLC/RLC_Grand_Parchemin_Dechiffrage_files/Table_Vigenere_OK.jpg


Pour un exercice j'ai besoin de cette table (une matrice 27*27 en fait), auquel je rajoute une ligne et colonne avec le '[' qui si je ne me trompe pas suit le Z dans la table ASCII.


AU début, j'avais fait u tout bête sous programme de saisie mais je me suis dis s'il faut faire remplir à chaque fois à l'utilisateur 27² cases il risque de pas être très content :hum:


Donc j'aimerais remplir manuellement la matrice avec ça du coup j’essaie de trouver un algorithme qui permette de faire ça.

Je précise que j'ai crées un sous type contenant les caractère e base de A à [

ET j’aimerais pouvoir m'en servir automatiquement pour remplir la table; sauf qu'à chaque fois d'une ligne à l'autre; on a un décalage et je ne vois pas du tout comment je vais gérer ça.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



XENSECP
Habitué(e)
Messages: 6387
Enregistré le: 27 Fév 2008, 20:13

par XENSECP » 16 Mar 2013, 09:34

Remplir manuellement ou automatiquement?

Dans quel but ? En quel langage?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 16 Mar 2013, 10:12

slt,

simplifies le probleme dans un premier temps pour [A-D]
on associes les nombres [A-D]->[0-4]
la table donne
0 1 2 3
1 2 3 0
2 3 0 1
3 0 1 2
tu remarques que chaque chiffre est supérieur de 1 à celui du dessus. (sauf si c'est 0)

Tu peux par exemples faire avec ta matrice representee par le tableau lignes(0,n-1)
Code: Tout sélectionner
lignes[0.. 3]=[0 1 2 3];//remplir la premiere ligne
pour indexLigne =  1 à n-1
  ligneCourante=lignes[indexLigne]
  pour indexColonne = 0 à n-1 //pour chaque colonne de la ligne
    ligneCourante[indexColonne] = lignes[indexLigne-1][indexColonne]+1 //+1 par rapport à la cause du dessus
    si ligneCourante[indexColonne] == 4 //mais si on est 4 mettre 0 a la place
       ligneCourante[indexColonne]=0
    finsi
finpour


dans les grandes lignes...
c'est pas le plus efficace, mais bon, faut pas se fouler pour 27 cases
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 16 Mar 2013, 12:39

XENSECP a écrit:Remplir manuellement ou automatiquement?

Dans quel but ? En quel langage?


Automatiquement à moins que tu n'est envie de te taper 27² cases à remplir =)

Et en ada; mais bon le problème c'est plus l'algo que le langage là.




==============================

lignes[0.. 3]=[0 1 2 3];//remplir la premiere ligne
pour indexLigne = 1 à n-1
ligneCourante=lignes[indexLigne]
pour indexColonne = 0 à n-1 //pour chaque colonne de la ligne
ligneCourante[indexColonne] = lignes[indexLigne-1][indexColonne]+1 //+1 par rapport à la cause du dessus
si ligneCourante[indexColonne] == 4 //mais si on est 4 mettre 0 a la place
ligneCourante[indexColonne]=0
finsi
finpour

===================================

Je vais tester ça; je vous dirais ce que ça a donné.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 16 Mar 2013, 15:46

Juste un truc que je comprends pas dans ton algo, que représente le n ? (3 dans ton exemple ?)

Auquel cas il s'agissent bien du dernier indice de la ligne, pourquoi lui enlève t'on 1 ?
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 16 Mar 2013, 15:59

n c'est la taille de la ligne
on enleve 1 si on commence la numérotation à 0.
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 16 Mar 2013, 17:05

fatal_error a écrit:n c'est la taille de la ligne
on enleve 1 si on commence la numérotation à 0.



Ok, j'ai fait avec les nombres et ça a marché.

Maintenant j'ai essayé de passer au caractère;

Mais une boucle du genre

pour indiceLigne = 'A'..'[' ne semble pas fonctionner, on me retourne ce message d'erreur:

codage.adb:50:21: ambiguous character literal
codage.adb:50:21: possible interpretation: Character
codage.adb:50:21: possible interpretation: Wide_Character
codage.adb:50:21: possible interpretation: Wide_Wide_Character
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite