decodages/etape2.c
2024-01-23 17:04:07 +01:00

95 lines
3.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
/* Prend en parametre un entier et un entier a additionner */
int indexcesar(int index, int cesar){
index += cesar;
if(index > 25)
{
index -= 26;
}
return index;
}
int main(int argc, char const *argv[])
{
int cesar = 0;
/* Creation du tableau contenant toutes les lettres de l'alphabet */
char alphabetMajuscule[26] = {'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'};
char alphabetMinuscule[26] = {'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'};
/* Creation d'un pointeur de fichier */
FILE* stream = fopen("Etape3.bin","r");
/* S'il y a un probleme dans l'ouverture du fichier renvoie une erreur */
if (ferror(stream))
{
perror("Il y a un probleme dans l'ouverture du fichier !");
return EXIT_FAILURE;
}
/* Creation d'un pointeur de charactere qui alloue en memoire la taille d'un caractere */
char* zone_char = malloc(sizeof(char));
/* Lecture du premier caractere, renvoie une erreur s'il ne l'a pas bien lu */
if (fread(zone_char, sizeof(char), 1, stream) != 0)
{
int i = 0;
/* On trouve l'index du caractere dans le tableau */
for (i; i <= 25; i++)
{
if(*zone_char == alphabetMajuscule[i])
{
/* On ajoute 1 a la valeur du parametre de cesar jusqu'a ce qu'on retombe sur le caractere "F" */
for (cesar; alphabetMajuscule[i] != 'F'; cesar++)
{
i = indexcesar(i, 1);
}
break;
}
}
printf("%c", alphabetMajuscule[i]);
} else {
perror("Lecture dans la lecture du premier caractere ");
return EXIT_FAILURE;
}
/* Tant qu'on atteint pas la fin du fichier */
while(!feof(stream))
{
/* lecture d'un caractere */
if (fread(zone_char, sizeof(char), 1, stream) != 0)
{
/* Parcours du tableau pour retrouver la position du caractere*/
int index = 0;
for (index; index <= 25; index++)
{
/* si le caractere est une majuscule */
if (*zone_char == alphabetMajuscule[index])
{
/* On rajoute le deplacement dans l'alphabet de cesar et on sort de la boucle */
index = indexcesar(index, cesar);
printf("%c", alphabetMajuscule[index]);
break;
}
/* si le caractere est une minuscule */
if (*zone_char == alphabetMinuscule[index])
{
/* On rajoute le deplacement dans l'alphabet de cesar et on sort de la boucle */
index = indexcesar(index, cesar);
printf("%c", alphabetMinuscule[index]);
break;
}
}
/* si la boucle ne s'est jamais arretee, alors ce n'est pas une lettre sinon c'est une lettre et on montre sa nouvelle valeur */
if (index == 26) {
printf("%c", *zone_char);
}
}
}
fclose(stream);
free(zone_char);
return EXIT_SUCCESS;
}