#include <stdio.h> //bibliothéques
#include <iostream>
#include <conio.h>
#include<math.h>
//#include<windows.h>
using namespace std;
int main (void) //commencement du programme
{
int clef; //déclaration de la variable "clef" qui servira
//pour la formule du chiffrement
int i; //déclaration de la variable "i" qui servira
//d'indice pour les boucles
i=0; //initialisation de la variable "i" à 0
char phrase [100]; //déclaration du tableau d'entier "phrase" qui sera le nombre
//qui aura pour valeur un caractère pour effectuer le chiffrement
//après le chiffrement
int maj ; //déclaration de l’entier « maj » qui permettra de mettre en majuscule l’alphabet
maj = 0; //initialisation de « maj » à 0
int k; //déclaration de l’entier « k » qui permettra servira
//d’indice pour les boucles
char ch; //déclaration du caractère « ch » qui seront les caractères chiffrés
int test = 0;
int a; // déclaration de l'entier pour choisir le mode de chiffrement;
char mot[30]; // Tableau de caractère qui stockera notre mot
int nombre_lettre[26]; // Tableau d'entier qui stockera le nombre de fois que chaque lettre apparait
int n = 0; // Compteur permettant de parcourir le mot
int cpt_caractere = 0; // Compteur permettant de compter les caractères
char caractere = 'a'; // Caractere que l'on veut compter
int lng_mot = 0; // Longueur du mot que l'on veut compter
char caractere_max = 'a'; // Caractère qui apparait le plus de fois
const 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','0','1','2','3','4','5','6','7','8','9','.',',','?','!',';','@','+','-','*','/','%','_','#','"','|','{','}','[',']','(',')'}; //déclaration de l’alphabet
do
{cout<<"vous choisissez le mode de déchiffrement ou chiffrement? 1- phrase chiffre, 2-phrase déchiffre avec cle, 3-phrase a déchiffrer sans cle"<<endl;
cin>>a;
}while(a!=1 && a!=2 && a!=3 );
if(a==1)
{
cout<<"Entrez une phrase"<<endl; //lecture de la phrase
cin>>phrase; //écriture de la phrase
cout<<"Choisissez votre decalage "<<endl; //lecture de la phrase
cin>> clef; //écriture de la phrase
cout<<"phrase chiffree : "<<endl;
while(phrase[i]!='\0') //c'est la marque de fin de caractère du tableau
{
maj = isupper (phrase[i]); //fonction de référence
ch = tolower(phrase[i]); //fonction de référence
for (k = 0; k < 57; k++) //boucle “for” qui s’arrête à 26
{
if (alphabet[k] == ch) //si alphabet = caractère
{
ch = alphabet[(k+clef)%57]; //utilisation de la formule du chiffrement de César
if (maj) //si majuscule
ch = toupper (ch); //fonction de référence
cout<<ch; //lecture de la phrase
break;
}
}
i++; //incrémentation de i
}
}
else if(a==2)
{
cout<<"Entrez une phrase"<<endl; //lecture de la phrase
cin>>phrase; //écriture de la phrase
cout<<"Choisissez votre decalage "<<endl; //lecture de la phrase
cin>> clef; //écriture de la phrase
cout<<"phrase dechiffree : "<<endl;
while(phrase[i]!='\0') //c'est la marque de fin de caractère du tableau
{
maj = isupper (phrase[i]); //fonction de référence
ch = tolower(phrase[i]); //fonction de référence
for (k = 0; k < 57; k++) //boucle “for” qui s’arrête à 26
{
if (alphabet[k] == ch) //si alphabet = caractère
{
ch = alphabet[(k+(57-clef))%57]; //utilisation de la formule du chiffrement de César
if (maj) //si majuscule
ch = toupper (ch); //fonction de référence
cout<<ch; //lecture de la phrase
break;
}
}
i++; //incrémentation de i
}
}
else if(a==3)
{
cout<<"\nRentrez un mot que l'on dechiffera avec les lettres suivantes"
"comme reference: e puis a puis s puis i puis t et n:"<<endl;
cin>> mot;
cout<<endl;
lng_mot = (int) strlen (mot); // Calcule de la taille du mot rentré
do
{
while (n < lng_mot) // Tant que l'on se trouve dans le mot
{
if (mot[n] == caractere) // Si un caractere du mot est égale au caractère cherché
{
cpt_caractere++;
}
n++;
}
nombre_lettre[caractere - 97] = cpt_caractere; // On stocke le nombre de fois que le caractère à été rencontré dans un tableau
if (nombre_lettre[caractere - 97] > nombre_lettre[caractere_max-97])// Si ce nombre de caractère est plus grand que le nombre de caractère max
caractere_max = caractere; // Le caractère devient le caractère max
n = 0;
cpt_caractere = 0;
caractere ++; // on regarde le caractère suivant
} while ( caractere != 123); // tant que l'on n'a pas parcourut tout l'alphabet
cout<<"Le caractere qui apparait le plus dans ce mot est :"<< caractere_max<<endl; // On affiche le résultat
cout<<endl;
while (test < 6)
{
i = 0;
k = 0;
ch = 0;
maj = 0;
if (test == 0)
clef = 'e' - caractere_max;
if (test == 1)
clef = 'a' - caractere_max;
if (test == 2)
clef = 's' - caractere_max;
if (test == 3)
clef = 'i' - caractere_max;
if (test == 4)
clef = 't' - caractere_max;
if (test == 5)
clef = 'n' - caractere_max;
cout<<endl;
cout<<"\nle nombre de decalage qu'il faut effectuer est de "<< labs(clef)<<endl;
if(clef < 0)
{
cout<<"phrase dechiffree : "<<endl;
while(mot[i]!='\0') //c'est la marque de fin de caractère du tableau
{
maj = isupper (mot[i]); //fonction de référence
ch = tolower(mot[i]); //fonction de référence
for (k = 0; k < 57; k++) //boucle “for” qui s’arrête à 26
{
if (alphabet[k] == ch) //si alphabet = caractère
{
ch = alphabet[(k+(57-labs(clef)))%57]; //utilisation de la formule du chiffrement de César
if (maj) //si majuscule
ch = toupper (ch); //fonction de référence
cout<<ch; //lecture de la phrase
break;
}
}
i++; //incrémentation de i
}
}else
{
while(mot[i]!='\0') //c'est la marque de fin de caractère du tableau
{
maj = isupper (mot[i]); //fonction de référence
ch = tolower(mot[i]); //fonction de référence
for (k = 0; k < 57; k++) //boucle “for” qui s’arrête à 26
{
if (alphabet[k] == ch) //si alphabet = caractère
{
ch = alphabet[(k+clef)%57]; //utilisation de la formule du chiffrement de César
if (maj) //si majuscule
ch = toupper (ch); //fonction de référence
mot[i] = ch; // affectation de « ch » avec les caractères de « phrase[i] »
i++; //incrémentation de i
break;
}
}
}cout<<endl;
cout<<"phrase chiffree : "<<mot<<endl; //lecture de la phrase
}
test++;
}
cout<<endl;
}
_getch();
}