Catégorie :
SupportForum :
TI-82Vues : 2462
Réponses : 12
Type : discussion
Etat : réponses autorisées
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Programme décodage message affine
romain72 le 14/01/2012 à 08:50
J'essayerais ce week-end de vous présenter mon premier programme cela fait une semaine tout juste que je programme je suis en seconde.
Il portera sur le décodage de message crypté par le système affine (ax+b)The K le 14/01/2012 à 09:24
En quoi consiste ce système de codage affine ?
Ou on le connait sous un autre nom ?

linkakro le 14/01/2012 à 12:33
y=ax+b, pourquoi pas mais cela me paraît trop simple car x=(y-b)/a
J'attends impatiemment la suite.
S'agit-il plutôt du cryptage y=modulo(ax+b,c) ?
Cela me rappelle des souvenir.

Sauf que je n'y ai touché qu'en terminale.
romain72 le 14/01/2012 à 21:25
Oui modulo 26 c'est celaromain72 le 14/01/2012 à 21:26
C'est normale je fais l'option mps et j'ai étudié l'introduction aux modulosromain72 le 14/01/2012 à 21:47
Voici la programmation:
Code
Input "CLE DE DECODAGE A'=",A
Input "CLE DE CODAGE B=",B
Input "LETTRE CRYPTEE=",X
26*partdéc(((X-B)*A)/26)[sto]Z
If Z=0
Then
Disp "A"
End
If Z=1
Then
Disp "B"
End
If Z=2
Then
Disp "C"
End
If Z=3
Then
Disp "D"
End
If Z=4
Then
Disp "E"
End
If Z=5
Then
Disp "F"
End
If Z=6
Then
Disp "G"
End
If Z=7
Then
Disp "H"
End
If Z=8
Then
Disp "I"
End
If Z=9
Then
Disp "J"
End
If Z=10
Then
Disp "K"
End
If Z=11
Then
Disp "L"
End
If Z=12
Then
Disp "M"
End
If Z=13
Then
Disp "N"
End
If Z=14
Then
Disp "O"
End
If Z=15
Then
Disp "P"
End
If Z=16
Then
Disp "Q"
End
If Z=17
Then
Disp "R"
End
If Z=18
Then
Disp "S"
End
If Z=19
Then
Disp "T"
End
If Z=20
Then
Disp "U"
End
If Z=21
Then
Disp "V"
End
If Z=22
Then
Disp "W"
End
If Z=23
Then
Disp "X"
End
If Z=24
Then
Disp "Y"
End
If Z=25
Then
Disp "Z"
End
Voilà mon premier programme fait tout seul aider moi à le simplifier ou à l'améliorer si possible
(ps~~soyer indulgent j'ai commencé la programmation il y a une semaine et demi) merci
romain72 le 14/01/2012 à 21:48
le disp z et end vont avec mon programme

Sangohan38 le 15/01/2012 à 02:25
Quand il n'y a qu'une seule instruction qui suit la condition du If, le then/else est optionnel donc tu peux tous les enlevés.
Sangohan38romain72 le 15/01/2012 à 09:49
ok merci pour l'astucelinkakro le 15/01/2012 à 14:49
La prochaine étape d'optimisation sera d'utiliser les chaînes plutôt que cette myriade de If.
A la limite des listes mais les chaînes sont bien meilleures.
Des explications sur les chaînes se trouvent dans
cet article
Code
Input "CLEFA=",A
Input "CLEFB=",B
Input "LETTRE=",Str1 // il faudra saisir une lettre et non un chiffre
B+A*inString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",Str1)
Ans-26int(Ans/26
sub("ABCDEFGHIJKLMNOPQRSTUVXYZ",Ans,1
Ans=Rép
inString=carChaîne
sub=sous-chaîne
Str1=Chaîne1
Plus tard on pourra utiliser des boucles pour convertir un texte entier.
Par contre je ne comprends pas pourquoi tu appelles A "clef de decryptage"
Pour moi A et B sont tous deux clefs de cryptage.
"==" me sert à écrire "congru"
ax+b == r
(ax+b)d == dr
adx+bd == dr
adx == dr-bd
Si ad == 1 Alors d(r-b) == x
Cette dernière condition n'est d'ailleurs pas toujours possible (a ne doit pas être multiple de 26)
romain72 le 15/01/2012 à 21:22
je suis désolé je comprends mal car j'ai juste étudier l'introduction au chapitre.The K le 15/01/2012 à 22:19
En général les chaînes c'est un drôle de bord... bazar

Ne t'en fais pas si tu ne comprends pas tout, c'est normal ^^
Linka il ne manque pas un Disp a la fin de ton code ?
J'ai essayé l'affichage avec cette méthode sans succès

linkakro le 16/01/2012 à 00:07
The K :
Le dernier calcul d'un programme est normalement toujours affiché.
Il faut être en écran normal et que ce soit bien le dernier calcul.
Dans ces ces condition ni Disp ni Pause ne devrait être nécessaire
====
romain 72 :
Si tu ne comprends pas les chaînes, j'ai donné un lien pour aider. (mais je peux toujours ajoûter des informations)
Mais j'ai été bête de ne pas remarquer que ce post se trouve dans la section TI82 et que par conséquent ta calculatrice ne doit pas avoir de chaînes...
Si tu ne comprends pas l'aspect mathématique, ce n'est ni grâve ni étonnant. (juste dommage)
--
En gros je stocke une lettre dans Str1.
Puis je recherche cette lettre dans une autre chaîne ("AB...Z") avec inString ce qui me donne un nombre associé à la lettre.
Puis j'effectue A*X+B sur la même ligne.
sub me sert enfin à extraire une lettre à la position donnée par le nombre. Cela me génère une lettre associée au nombre.
Pour avoir un peu de lisibilité j'ai écrit quelques lignes de calculs, et j'ai utilisé Ans (Rép) pour exploiter le résultat des lignes précédentes (c'est plus léger).
--
linkakro a écrit :
Par contre je ne comprends pas pourquoi tu appelles A "clef de decryptage"
Pour moi A et B sont tous deux clefs de cryptage.
Je me suis embrouillé tout seul à cause du coefficient A. D'habitude j'appelle A le coefficient de cryptage, B la constante (de cryptage) et D le coefficient de décryptage, qui dépend directement de A.
Et toi tu as appelé A' le coefficient de décryptage.
Mes équations juste en dessous sont un usage des modulos qui montre la démonstration du décryptage, en supposant D déjà connu.
Cela me servait à mettre les choses au clair pour les trois variables et aussi à me rappeler des opérations. Cela montrait aussi ce qui définit la clef de décryptage.
En fait c'était innutile puisque tu effectuais déjà une opération de décryptage. Désolé.
--
De quoi effectuer le cryptage et le décryptage :
Code
" "->Str2
Input "CLEF A=",A
Input "CLEF B=",B
Input "TEXTE=",Str1
For(W,1,length(Str1
sub(Str1,W,1
inString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",Ans
A*Ans+B
Ans-26int(Ans/26
Str2+sub("ABCDEFGHIJKLMNOPQRSTUVXYZ",Ans,1)->Str2
End
Disp Str2
Code
" "->Str2
Input "CLEF D=",D
Input "CLEF B=",B
Input "TEXTE=",Str1
For(W,1,length(Str1
sub(Str1,W,1
inString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",Ans
D*(Ans-B
Ans-26int(Ans/26
Str2+sub("ABCDEFGHIJKLMNOPQRSTUVXYZ",Ans,1)->Str2
End
Disp Str2
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.