Codage affine

Codage affine - C++ - Programmation

Marsh Posté le 08-12-2008 à 18:16:45    

Bonsoir à tous,
 
Je suis actuellement sur un projet tutoré de fin d'étude en programmation c++. Je dois effectuer un programme de codage(rot3, rot 13, vigénaire, affine), rien de plus basic. Enfin faut le dire vite.... J'ai un petit soucis avec le codage affine,malheureusement je ne vois pas comment déclaré les lettres de  l'alphabé  c.a.d (a=0,b=1,c=2,...,z=25).
 
Voici une petite présentation du codage affine pour ceux qui ne connaissent pas. http://pagesperso-orange.fr/alain. [...] ffine.html
 
Ma demande se résume juste au déclaration des lettres. Merci d'avance pour votre aide. ( J'utilise DEV c++)


---------------
"La force d'une équipe se mesure à son maillon faible. Ne soyez pas ce maillon faible, il se fait toujours éliminer"
Reply

Marsh Posté le 08-12-2008 à 18:16:45   

Reply

Marsh Posté le 08-12-2008 à 19:48:12    

pas besoin de déclaration:

Code :
  1. char caractere,value;
  2. caractere='c';
  3. value=caractere-'a';


=> value==2


Message édité par sligor le 09-12-2008 à 00:07:45
Reply

Marsh Posté le 09-12-2008 à 20:20:21    

Bonsoir et merci Sligor pour ta réponse,
 
Mais sans vouloir t'offensé j'aimerai comprend pourquoi tu mets :
 
=>value==2
 


---------------
"La force d'une équipe se mesure à son maillon faible. Ne soyez pas ce maillon faible, il se fait toujours éliminer"
Reply

Marsh Posté le 10-12-2008 à 09:02:06    

Pour t'indiquer qu'a la fin du code indiqué, value vaut 2 !
Et il vaut 2 car 'c' - 'a' == 2 ! :spamafote:


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 10-12-2008 à 09:39:26    

et donc du coup pas besoin de déclarer les lettres de l'alphabet

Reply

Marsh Posté le 13-12-2008 à 17:16:38    

Ok merci de vos réponse, j'ai un autre petit soucis qui vient d'apparaitre,
 

Citation :

Par exemple si a=17 et b=5 les lettres a,b,c sont codées respectivement par f,w,n. En effet le numéro de a est 0 donc la lettre a est codée par la lettre de numéro f(0)º17×0+5=5 donc f(0)=5 soit la lettre f ; le numéro de b est 1 donc la lettre b est codée par la lettre de numéro f(1)º17×1+5=22 donc f(1)=22 soit la lettre w ; le numéro de c est 2 donc la lettre c est codée par la lettre de numéro f(2)º17×2+5=39 (26), et comme f(2) doit être dans E (puisque en fait c'est le reste de la division de 39 par 26) f(2)=13 soit la lettre n ;


 
 
Je me permet de prendre un exemple de la cryptographie cité au dessus. Mon soucis est comment faut t'il faire pour prendre le reste de la division en programmation?
 
 
Merci d'avance


---------------
"La force d'une équipe se mesure à son maillon faible. Ne soyez pas ce maillon faible, il se fait toujours éliminer"
Reply

Marsh Posté le 13-12-2008 à 17:26:53    

Pour avoir ton reste, il faut utiliser ce qu'on appel "modulo"
 
En java (comme beaucoup de langage d'ailleurs) c'est  "%"
 

Code :
  1. reste = a % b;

Reply

Marsh Posté le 13-12-2008 à 17:28:23    

Merci ;)


---------------
"La force d'une équipe se mesure à son maillon faible. Ne soyez pas ce maillon faible, il se fait toujours éliminer"
Reply

Marsh Posté le 13-12-2008 à 17:47:54    

Bon voila mon projet est fini, reste a faire quelque amélioration visuelle.  
Dit moi j'ai fais un menu dans mon programme  
 

Citation :

int main()
{ [b]retour 2
    cout << "\t\t\t Codage/Decodage Jules cesar";cout<<endl;
    cout << "Que voulez vous faire:";cout<<endl;
    cout << "\t 1: Codage/Decodage en rot 3";cout<<endl;
    cout << "\t 2: Codage/Decodage en rot(n)";cout<<endl;
    cout << "\t 3: Codage/Decodage par chiffrement affine";cout<<endl;
    cout <<"Choix :";
    cin>>x;
    fflush(stdin);
 
     
    switch (x)
    {
           case '1':rot3();
           break ;
           case '2':rotn();
           break ;
           case '3':affine();
           break;
           default :exit (99);
           break;
    }
     
}  
    void rot3()
    {do{
         cout<<endl<<endl;cout<<"\tVous venez de choisir le codage/decodage en rot3";cout<<endl<<endl;
         cout<<"Que voulez vous faire:";cout<<endl;
         cout<<"\t 1: codage";cout<<endl;
         cout<<"\t 2: Decodage";cout<<endl;
         cout<<"Choix :";
         cin>>z;
         fflush(stdin);
         
         switch (z)
         {
                case '1':codage();
                break;
                case '2':decodage();
                break;
                default :exit (99);
                break;
         }
         }
         while (0);
         }
         
         void codage()              
         {char reponse;
              do{ retour 1
                 cout << "Taper le texte clair a encode: ";  
                 getline(cin ,clair) ; // Saisie de la chaîne claire
                 longueur = clair.length() ; // Initialise la longueur de chaîne dans longueur
                 cout << endl ;
                 cout << longueur << endl ; // Affiche la longueur de la chaîne
                 cout << endl ;
                 for (i=0; i<longueur; i++)
                         {  
                         JC = int (clair) + int (3) ;
                         if ((JC >= 90 && JC < 97) || (JC > 122))
                            {
                            JC = JC - 26 ;
                            }
                         if (JC == 35)
                            {
                            JC = JC - 3 ;
                            }
                         cout << char (JC) ;
                         }
                     cout << endl ;
                     cout <<" Exit (o/n) :" ;
                     cin >> reponse ;
                     fflush(stdin);                    
             }
              while (reponse =='n') ; [i]Retour 0

          }

[/b]
 
Au retour 0 il va au retour 1 mais j'aimerai retourner au retour 2 si on choisit la réponse n, que dois je utilisai?  
 
 


---------------
"La force d'une équipe se mesure à son maillon faible. Ne soyez pas ce maillon faible, il se fait toujours éliminer"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed