#include #include #include #include #include #include "Mot.h" using std::string; //permet de permuter deux variables void permute(Mot tab[], int prem, int deux){ double stock=tab[prem].prob; tab[prem].prob=tab[deux].prob; tab[deux].prob=stock; int perm=tab[prem].ind; tab[prem].ind=tab[deux].ind; tab[deux].ind=perm; char car=tab[prem].lettre; tab[prem].lettre=tab[deux].lettre; tab[deux].lettre=car; } //permet de trier un tableau dans l'ordre décroissant void trier(Mot t[], int debut, int fin){ for(int pass=0;pass>a; for(int j=0;j<26;j++){ if(a==t[j] || a==t[j+26]){ prob[j]++; nb++; } } } for(int k=0;k<26;k++){ prob[k]/=nb; H-=prob[k]*log(prob[k])/log(2); } is.close(); //classement des probabilités int *liste=new int[350]; Mot *dico=new Mot[350]; for(int l=0;l<350;l++) dico[l]=Mot(l); int indice, taille=26; for(indice=0;indice<26;indice++){ dico[indice].prob=prob[indice]; dico[indice].lettre=t[indice]; } trier(dico, 0, 25); for(int m=0;m<24;m++){ for(int n=0;nlim-taille;indice--){ dico[indice].code=dico[dico[indice].ind].code; } dico[indice+taille-1].code+="0"; dico[indice+taille].code+="1"; taille++; lim=indice; } double R=0; for(int lll=0;lll<26;lll++) R+=dico[lll].code.length()*dico[lll].prob; //écriture des résultats dans un fichier ofstream os; os.open("res.txt"); for(int llll=0;llll<26;llll++) for(int lllm=0;lllm<26;lllm++) if(t[llll]==dico[lllm].lettre){ os<>b; for(int qq=0;qq<26;qq++) if(b==t[qq+26]) b=t[qq]; for(int q=0;q<26;q++){ if(b==dico[q].lettre){ for(int yy=0;yy