Pour mes cours de C en 2e année de prépa, je dois créer une fonction qui crypte un message de la manière suivante :
Soit seq une séquence, c un caractère et res le message voulu codé :
Si c n'est pas dans la séquence je le rajoute à la fin et je le laisse tel quel dans res
Si il y est :
si c est le premier caractère de la séquence alors je prends le dernier élément de seq pour le mettre à la suite de res, et je décale la séquence sans c et je met c à la fin de cette dernière
sinon je prends le caractère d'avant dans seq et je le met à la fin de res et je décale le seq de la même manière.
Exemple :
je veux coder abcac :
c = a c = b c = c c = a c = c
seq = a seq = ab seq = abc seq = bca seq = bac
res = a res = ab res = abc res = abcc res = abccb
J'ai codé cette fonction sans problème par contre maintenant il faut que je fasse la fonction de décodage et ça fait des jours que je me creuse la tête sans trouver la solution... Bien sur prendre l'algo de cryptage dans l'autre sens ne marche pas...
Si tu pouvais mieux expliquer l'algo ce serait déjà mieux. Parce que j'ai beau lire relire et le faire sur papier je ne comprend pas. Si tu pouvais donner l'algo (en pseudocode)
Merci pour ta réponse, j'ai réussi a enfin trouver la fonction de décodage mais je te joins quand même le code en C de la fonction de codage, peut être comprendras tu mieux cette fonction assez complexe.
#include <stdio.h>
int app_seq(char c, char tab[]) {
int i = 0;
while (tab[i] != '\0') {
if (c == tab[i]) {
return i;
}
i++;
}
return -1;
}
void decale_tableau_fin(char tab[], int pos) {
char temp = tab[pos];
int i = 0;
while (tab[i] != '\0') {
if (i >= pos) {
if (tab[i+1] != '\0') {
tab[i] = tab[i+1];
} else {
tab[i] = temp;
}
}
i++;
}
}
int main(int argc, char *argv[]) {
int s = 0;
int te = 0;
int pos_temp = 0;
char seq[200];
char c;
FILE *texte;
char texte_encrypt[5000];
if (argc != 2) {
printf("Le nombre d'argument est incorrect.\n");
exit(-1);
} else {
texte = fopen(argv[1],"r");
if (texte == NULL) {
perror("Le nom du fichier est incorrecte et/ou n'existe pas.\n");
exit(-2);
} else {
fscanf(texte,"%c",&c);
while (!feof(texte)) {
pos_temp = app_seq(c,seq);
if (pos_temp == -1) {
seq[s] = c;
seq[s+1] = '\0';
texte_encrypt[te] = c;
texte_encrypt[te+1] = '\0';
s++;
te++;
} else {
if (c == seq[0]) {
texte_encrypt[te] = seq[s-1];
texte_encrypt[te+1] = '\0';
te++;
decale_tableau_fin(seq,0);
} else {
texte_encrypt[te] = seq[pos_temp-1];
texte_encrypt[te+1] = '\0';
te++;
decale_tableau_fin(seq,pos_temp);
}
}
fscanf(texte,"%c",&c);
}
}
}
printf("%s\n",texte_encrypt);
return 0;
}
Décryptage d'un code crypté
× 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.
Malice13