Skip to content

EPST 2e année – TP2

10 novembre 2012

Dans ce TP, vous allez entrer dans la peau d’un agent secret qui cherche à décoder un message crypté :

 

 

 

Voici ma solution :

/*
 *  EPST 2e année - 2012-2013
 *  TP2 - Manipulation des chaînes de caractères
 *  Fichier source : tp2.c
 *  Compiler avec :
 *  gcc -Wall -o tp2 tp2.c -std=c99
 *  Solution par Amine "nh2" Brikci-Nigassa
 */

#include
#include
#include

#define LIGNE 80

/* decrypte_caractere : décrypte le caractère passé en paramètre
 * Paramètres :
 *  -  caractere : caractère à décrypter
 *  -  grille : grille de décryptage
 * Retourne le caractère décrypté original
 */
char decrypte_caractere(char caractere, char * grille){
    // calcul de la position du caractère dans l'alphabet
    int i ; // position

    /** ...en utilisant une variable chaîne alphabet : *****
    char alphabet[] = "abcdefghijklmnopqrstuvwxyz" ;
    for (i = 0 ; i < 26 && caractere != alphabet[i] ; i++)
        ;
    /******************************************************/

    /* en prenant la valeur entière des char (code ASCII):*/
    i = caractere - 'a' ;
    /******************************************************/

    return  grille[i];
}

/* decrypte_texte : remplace le texte passé en paramètre par
 * le texte décrypté original
 * Paramètres :
 *  -  texte : texte à décrypter
 *  -  grille : grille de décryptage
 *  -  longueur : longueur du texte
 */
void decrypte_texte(char *texte, char *grille, int longueur){
    for (int i = 0 ; i < longueur ; i++) {
        texte[i] = decrypte_caractere(texte[i], grille);
    }
    return;
}

int main(void){
    char grille[27];
    do {
        printf("La grille de décryptage est (26 caractères): ");
        fgets(grille, 27, stdin);
    } while (strlen(grille) < 26);
    grille[26] = '\0'; // enlève le '\n' à la fin

    int c;
    while((c = getchar()) != '\n' && c != EOF)
        ;  // (vide le tampon du clavier)

    printf("-------------------------------------------------");

    char texte[LIGNE];
    printf("\nLe texte crypté est : ");
    fgets(texte, LIGNE, stdin);
    int longueur = strlen(texte) - 1;
    texte[longueur] = '\0';

    decrypte_texte(texte, grille, longueur);

    printf("\nLe nombre de caractères du texte à décrypter est : %d", longueur);
    printf("\nLe texte original : %s\n", texte);

    return EXIT_SUCCESS;
}

La fonction de décryptage d’un caractère fonctionne en utilisant la nature numérique entière des caractères dans le langage C. En effet chaque caractère est en fait un entier dont la valeur correspond à son code ASCII.

Vous trouverez également en commentaire la méthode consistant à parcourir tout l’alphabet stocké dans une chaîne pour trouver la position du caractère à décrypter.

Publicités
Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :