π
<-

Programme cryptage

Pour le TI-Basic sur Nspire

Programme cryptage

Unread postby Cudilov » 09 Oct 2013, 19:19

Bonjour, j'ai un petit programme à faire un programme:
Je souhaite que celui-ci me réalise tout seul un "chiffrement affine":
- Pour cela, l'utilisateur rentre une chaîne de caractères
- Puis le programme fait correspondre à chaque lettre son chiffre (0 pour A, 1 pour B...)
- Ensuite, est appliquée à chaque chiffre la fonction affine voulue (x->ax+b, ou a et b sont rentrés par l'utilisateur)
- Puis on récupère le reste de la division du chiffre obtenu par 26
- Et on fait correspondre la lettre au chiffre obtenu

Ainsi, par exemple: Pour une chaine: "Chiff" avec a = 7 et b = 17, on obtient au final "FOVAA"

Voici mon programme, qui m'affiche une erreur "Variable pas définie":
Code: Select all
Define Cryptage()=
Prgm
:Local a,b,c,d,e,f,ß,þ
:Disp "Chiffrement affine (ax+b) "
:RequestStr "Lettres?",b
:Request "a?",e
:Request "b?",f
:ß:={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}
:1→a
:dim(b)→d
:For j,1,d
:left(b,a)→c
:right(c,1)→c
:inString("abcdefghijklmnopqrstuvwxyz",c)→þ
:remain(þ*e+f,26)→þ
:Disp ß[þ]
:a+1→a
:EndFor
:EndPrgm


Savez vous d'ou peut provenir mon erreur?
Je me suis peut être aussi un peu compliqué dans le programme, on peu surement faire un peu plus simple.
User avatar
Cudilov
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 2%
 
Posts: 44
Joined: 02 Aug 2013, 23:06
Gender: Male
Calculator(s):
MyCalcs profile

Re: Programme cryptage

Unread postby davidElmaleh » 09 Oct 2013, 19:22

Peut être que ton erreur viens de la:

Code: Select all
ß:={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}


dans ta liste, il y a des variables déjà utilisées
notamment b,e,f,a,d,c
essaye de les remplacer par des mots plutôt, tu y verras plus claire et ton programme fonctionnera peut être

EDIT: non, en fait ton problème vient du fait que tu n'a pas mis les lettres dans la liste ß sous forme de chaines, donc il ne reconnais pas les variables

Mets plutôt ceci
Code: Select all
ß:={"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"}
Last edited by davidElmaleh on 09 Oct 2013, 19:28, edited 1 time in total.
Image
User avatar
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 19.6%
 
Posts: 409
Images: 9
Joined: 14 Oct 2012, 23:30
Location: Paris 19
Gender: Male
Calculator(s):
MyCalcs profile
Class: PSI*

Re: Programme cryptage

Unread postby Cudilov » 09 Oct 2013, 19:27

Oui , il me semblait que le problème pouvait venir de la, du coup j'ai essayé avec d'autres variables comme tu dis, mais ça ne marchait toujours pas...
User avatar
Cudilov
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 2%
 
Posts: 44
Joined: 02 Aug 2013, 23:06
Gender: Male
Calculator(s):
MyCalcs profile

Re: Programme cryptage

Unread postby davidElmaleh » 09 Oct 2013, 19:30

regarde mon dernier EDIT:

Mets plutot ceci
Code: Select all
ß:={"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"}
Image
User avatar
davidElmalehProgrammeur
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 19.6%
 
Posts: 409
Images: 9
Joined: 14 Oct 2012, 23:30
Location: Paris 19
Gender: Male
Calculator(s):
MyCalcs profile
Class: PSI*

Re: Programme cryptage

Unread postby AnToX98 » 09 Oct 2013, 19:41

Il n'y a pas 36 solutions, il faut simplement corriger en fonction de ton erreur.
"Variable pas définie", c'est évident, dans le ß:={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} toutes les lettres sont considérées comme des variables.
Fait donc comme te l'indique david_elmaleh dans le post au dessus.
User avatar
AnToX98Premium
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 75.5%
 
Posts: 1022
Images: 15
Joined: 19 May 2013, 16:54
Location: Paris, France
Gender: Male
Calculator(s):
MyCalcs profile
Class: 1ere S

Re: Programme cryptage

Unread postby Cudilov » 09 Oct 2013, 19:50

Ok super merci, j'ai effectivement oublié ce petit détail ;)
User avatar
Cudilov
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 2%
 
Posts: 44
Joined: 02 Aug 2013, 23:06
Gender: Male
Calculator(s):
MyCalcs profile

Re: Programme cryptage

Unread postby Bisam » 10 Oct 2013, 23:18

Tout d'abord, il y a une petit erreur :
Code: Select all
remain(þ*e+f,26)→þ
doit être remplacé par
Code: Select all
remain(þ*e+f-1,26)+1→þ
pour renvoyer une valeur entre 1 et 26 et non une valeur entre 0 et 25.

Ensuite, il y a quelques améliorations simples que tu devrais retenir et quelques autres plus techniques que tu peux revenir consulter plus tard...
Pour ce qui est du simple :
- tu devrais utiliser la valeur j de ta boucle "for" en lieu et place de la variable a qui prend exactement les mêmes valeurs,
- tu devrais également remplacer
Code: Select all
left(b,a)->c
right(c,1)->c
par
Code: Select all
mid(b,j,1)->c
qui est bien plus efficace.
- tu ne devrais même pas te servir de la variable c ... puisque maintenant, elle ne te sert qu'une seule fois.

Donc ton code se réécrit :
Code: Select all
    Define Cryptage()=
    Prgm
    :Local b,d,e,f,ß,þ
    :Disp "Chiffrement affine (ax+b) "
    :RequestStr "Lettres?",b
    :Request "a?",e
    :Request "b?",f
    :ß:={"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"}
    :dim(b)→d
    :For j,1,d
    :inString("abcdefghijklmnopqrstuvwxyz",mid(b,j,1))→þ
    :remain(þ*e+f-1,26)+1→þ
    :Disp ß[þ]
    :EndFor
    :EndPrgm


Pour ce qui est du plus délicat :
- La ligne
Code: Select all
inString("abcdefghijklmnopqrstuvwxyz",c)→þ
peut être avantageusement remplacée par
Code: Select all
ord(c)-ord("a")+1->þ
ou encore, si on se rappelle que ord("a")=55, par
Code: Select all
ord(c)-54->þ

- Tu peux aussi remplacer ta liste ß par la chaîne "abcdefghijklmnopqrstuvwxyz" et remplacer ß[þ] à la fin par
Code: Select all
mid(ß,þ,1)
mais tu peux aussi ne pas utiliser du tout ß et remplacer ß[þ] par
Code: Select all
char(þ+54)
en utilisant l'opération inverse de celle que j'ai suggérée dans le paragraphe précédent.
- Tu peux encore éliminer une variable, à savoir þ, en faisant tout calculer dans des fonctions successives.

Au final, ton code peut ressembler à cela :
Code: Select all
    Define Cryptage()=
    Prgm
    :Local b,d,e,f
    :Disp "Chiffrement affine (ax+b) "
    :RequestStr "Lettres?",b
    :Request "a?",e
    :Request "b?",f
    :dim(b)→d
    :For j,1,d
    :Disp char(remain(ord(mid(b,j,1))-54)*e+f-1)+55)
    :EndFor
    :EndPrgm
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile


Return to Nspire-Basic

Who is online

Users browsing this forum: ClaudeBot [spider] and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
820 utilisateurs:
>760 invités
>52 membres
>8 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)