Ayant implémenter une petite fonction de mélange de characteres puis une autre permettant de les remettres en place.
J'ai donc utiliser l'algorithme de Fisher-Yates en utilisant une generation de nombre pseudo aléatoire avec un seed constant.
Voici mes deux fonctions :
Le mélange des charactères
void Melange(char * phrase)
{
int size_phrase = strlen(phrase);
srand(seed);
int * rdm_array = (int*)malloc(sizeof(int)*size_phrase);
int i;
for(i = 0; i < size_phrase; i++)
{
rdm_array[i] = rand()%size_phrase;
//printf("%d", rdm_array[i]);
}
//On commence le mélange ici
int j;
int k = 0;
for(j = size_phrase -1 ; j > 0 ; j-- , k++)
{
int rdm_nb = rdm_array[k];
char temp = phrase[j];
phrase[j] = phrase[rdm_nb];
phrase[rdm_nb] = temp;
}
free(rdm_array);
}
La remise en place :
void RemiseEnOrdre(char * phrase)
{
int size_phrase = strlen(phrase);
srand(seed);
int * rdm_array = (int*)malloc(sizeof(int)*size_phrase);
int i;
for(i = 0; i < size_phrase; i++)
{
rdm_array[i] = rand()%size_phrase;
//printf("%i", rdm_array[i]);
}
//On commence le mélange ici
int j;
int k = size_phrase-1;
for(j = 0 ; j < size_phrase ; j++ , k--)
{
int rdm_nb = rdm_array[k];
char temp = phrase[j];
phrase[j] = phrase[rdm_nb];
phrase[rdm_nb] = temp;
}
free(rdm_array);
}
J'ai bien vérifier que mes deux tableaux de chiffre aléatoire sont identique, je refais exactement la même fonction dans le sens inverse, mais voici mon output :
Je dois louper qqchose, si vous pouvez m'éclaircir sur mon problème
Merci !
EDIT : Lors du cryptage je m’arrêtai un cran trop tôt. du coup dans le mélange voici la boucle for à mettre a jour :
for(j = size_phrase -1 ; j >= 0 ; j-- , k++)
- Edité par ThomasDenneulin4 8 février 2019 à 16:00:44
Melange d'un tableau puis remise en ordre
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.