Vigenaire coded message

Helo everybody!
I wrote a code to decrypt a message wich was crypted by the Vigenaire system.
My code can be build and can compile but it never stop compiling. I really don't see the problem. Can someone tell me what is the problem please?
this is my program:


#include <iostream>
#include <fstream>
#include <cmath>
#include <string>

using namespace std;

string decryptage (int e, int f, int g, int h, string code) // fonction permettant de retourner le message decrypté selon les differents code
{
string decode; // afin de pouvoir decrypter le message codé, on le stock dans une autre variable que l'on pourra retourner afin de voir a quoi cela ressemble

double clef [6]; // clef de crypages sous forme de tableau pour peremttre l'incrémentation
clef [0]= e;
clef [1]= f;
clef [2]= g;
clef [3]= h;
clef [4]= (f*h)%75 ;
clef [5]= ((e+g)*(e+g))%75; // pas possible de faire la pouissance donc on multiplie le chiffre par lui meme


int taille = decode.size();

for (int i=0; i< taille; i++) // changement des caracteres du message
{
code [i]= code [i]-32;
code [i]= code [i]- clef [i%6]; // le modulo permet de garder une clef comprise entre 0 et 5 pour les cases. on a un code compris dans la bonne gamme auquel on a retiré la clef
if (code [i]<0) // on evite les caractres negatifs qui n'existent pas
{
code [i]= code [i]+95;
}
code [i]= code [i]%95; // afin de garder des valeurs plus petite que 95
code [i]=code [i]+32 ;
decode [i]= code [i]; // permet de tout stocker dans le message que l'on peut retourner car pas possible de rendre la fonction code
}
return decode;
}

double fonction (string decode, string mots)
{
double fiability;
// on commence par rendre toutes les lettres du texte en miniscule car dans la comparaison, les majuscules sont comptées differement des minuscules

int taille2= decode.size();
for (int i=0; i< taille2; i++) // boucle pour minuscules
{
if (decode [i]< 91 && decode [i]>64) // permet de cibler que la partie ou l'on a des lettres majuscules
{
decode [i]= decode [i]+32;
}
else ;
}


//il faut mettre un systempe de localisation des mots qui sont toujours entre espaces. donc il faut veilleyr a voir des espaces partout. il faut aussi que les mts fasses plus de 3 lettres

int posi=0;
int posf=0; // position initiales et finales des mots
// on va aussi avoir besoin de compter le nombres de mots ainsi que le nombre de mots corrects donc on va devoir faire des compteurs de mots
int mot=0; // nombres de mots
int bon=0; // nombres de mots qui sont bons
// vu que l'on va a chaque fois localiser la fin du mot a un espce, il faut prevoir de localiser le dernier mot auquel on va donc aussi assigner un espace
decode.insert(decode.size(), " ");
int taille3 = decode.size();
do
{
posf= decode.find(" "); // on initialise la position finale au premier espace trouvé afin de localiser le premmier mot
// on doit prevoir les caracteres speciaux se trouvant possible menet dans les mots tel que les poits, virgules apostrophes
// tout d'abord les apostrophes
if (decode[posi+1]==39)
{
posi=posi+1;
}
// en cas de signe en fin de mot (, . : ; ? ! )
if (decode[posf-1]==33 || decode[posf-1]==44 || decode[posf-1]==64 || decode[posf-1]==63 || decode [posf-1]==58 || decode[posf-1]==59)
{
posf = posf-1;
}

int longmot= posf-posi;
if (longmot>2)
{
mot+=1;
// on doit comparer le mot de taille longmot avec les mots du dico. on doit donc placer le mot dans une variable
string word= decode.substr(posi, longmot) ;
// on compare le mot prelevé avec ceux du dico
if (mots.find(word)!=-1) // si le mot est present
{
bon+=1;
}
}
posf+=1; // on l'augmente de 1
posi=posf;

} while (posf <= taille3 );

fiability= (double)bon/(double)mot ;

return fiability;
}


int main()
{
ifstream dico ("dictionnaire.txt");
string mots;
// importons les mots du dictionnaire dans un variable (mots)
if (dico.is_open())

{
while (dico.good())
{
getline (dico, mots) ; // on integre les mots contenus dans le fichier dictionnaire a une variable string afin de pouvoir les comparer par la suite
//cout << mots << endl; //test pour voir si les mots y sont bien pour le moment
}
dico.close();
}
else
cout << "erreur avec le fichier dictionnaire" << endl;

// importons le texte a décrypter dans le programme
ifstream text ("message_devoir.txt");
string code;
if (text.is_open())
{
while (text.good())
{
getline (text, code); // on integre le code crypté dans la variable string code
//cout << code << endl; // test pour voir si l'un se met bien dans l'autre
}
text.close();
}
else
cout << "erreur avec le fichier code" << endl;



for (int a=0; a<10; a++)
{
for (int b=0; b<10; b++)
{
for (int c=0; c<10; c++)
{
for (int d=0; d<10; d++)
{
string decode; // permet d'avoir un string dans lequel on aura le message decrypté par la fonction
decode= decryptage (a,b,c,d,code) ; // renvoi a la fonction qui permet de décrypter a partir des variables initialisées a 0 afin de commencer le decrypatage a 0000

// maintenant que l'on a un message decrypté, il faut encore tester la fiabilité du message trouver en le comparant avec les mots du dico

double fiabilite=0;
fiabilite = fonction (decode, mots); // renvoi a la fonction appelée fonction qui test la fiabilité

if (fiabilite>0.5)
{
cout << "le pin est: " << a << " " << b << " " << c << " " << d << endl;
cout << "Le message crypté est: " << endl;
cout << decode << endl;
}

}
}
}
}


return 0;

}
Last edited on
Topic archived. No new replies allowed.