Exercice

On va coder un algorithme de cryptage très simple : on choisit un décalage (par exemple 5), et un a sera remplacé par un f, un b par un g, un c par un h, etc. On ne cryptera que les lettres majuscules et minuscules sans toucher ni à la ponctuation ni à la mise en page (caractères blancs et line feed). On supposera que les codes des lettres se suivent de a à z et de A à Z. On demande de :

  1. déclarer un tableau de caractères mess initialisé avec le message en clair ;

  2. écrire une procédure crypt de cryptage d'un caractère qui sera passé par adresse ;

  3. écrire le main qui activera crypt sur l'ensemble du message et imprimera le résultat.

#include <stdio.h>

char mess[] = "Les sanglots longs des violons de l'automne\n\
blessent mon coeur d'une langeur monotone";

#define DECALAGE 5

/*****************************************************************************/
/*                                                                           */
/*                              crypt                                        */
/*                                                                           */
/*   But:                                                                    */
/*      Crypte le caractère passé en paramètre                               */
/*                                                                           */
/*   Interface:                                                              */
/*      p : pointe le caractère à crypter                                    */
/*                                                                           */
/*****************************************************************************/
void crypt(char *p)
{
enum {BAS, HAUT};
int casse;

if (*p >= 'a' && *p <= 'z') casse = BAS;
else if (*p >= 'A' && *p <= 'Z') casse = HAUT;
else return;

*p = *p + DECALAGE;
if (casse == BAS && *p > 'z' || casse == HAUT && *p > 'Z') *p = *p -26;
}

/*****************************************************************************/
/*                                                                           */
/*                              main                                         */
/*                                                                           */
/*****************************************************************************/
int main(void)
{
char *p;
int i;

/*   phase de cryptage   */
p = &mess[0];
while(*p)
   crypt(p++);

/*   impression du résultat   */
printf("Résultat:\n");
printf(mess);
printf("\n");

return 0;
}



Matthieu Moy 2017-02-08