Examen d’algorithmique/C 2
Après compilation, le code affichera :
c1: a, 97 ; c2: d, 100
Le but de cet exercice est d’implémenter le célèbre chiffrement utilisé par Jules César dans ses cor-
respondances secrètes. Le principe est le suivant : chaque lettre est remplacée par une lettre décalée d’un
nombre de pas fixe dans l’alphabet, l’alphabet étant considéré comme circulaire. Par exemple, pour un dé-
calage de 4, ’a’ est remplacé par ’e’, ’b’ par ’f’, . . ., ’v’ par ’z’, ’w’ par ’a’, ’x’ par ’b’, ’y’ par ’c’ et ’z’ par
’d’.
1. Écrire une fonction de prototype void Chiffrer(char *clair, char *pas_clair, int
N, int nb_char), permettant de chiffrer une phrase comportant nb_char caractères, stockée
dans la chaîne de caractères clair, par un décallage de Ncaractères et de récupérer la phrase chiffrée
dans la chaine de caractères pas_clair.
La fonction devra chiffrer uniquement les caractères minuscules et devra laisser inchangés les es-
paces, la ponctuation et les autres caractères (accents, chiffres, majuscules, etc.).
2. Écrire la fonction de prototype void Dechiffrer(char *pas_clair, char *clair,
int N, int nb_char), permettant de faire l’opération inverse, i.e. récupérer le message clair à
partir d’un message chiffré par un décallage de Ncaractères.
Exercice 3 : ADN
Introduction générale 1
L’acide désoxyribonucléique, ou ADN, est une molécule, présente dans toutes les cellules vivantes, qui
renferme l’ensemble des informations nécessaires au développement et au fonctionnement d’un organisme.
L’ADN détermine la synthèse des protéines, par l’intermédiaire de l’ARN (acide ribonucléique).
L’ADN est composé de deux brins ADN1,ADN2se faisant face, et formant une double hélice. Chaque
brin est formé de la répétition ordonnée de quatre nucléotides : l’adénine (A), la cytosine (C), la thymine (T)
et la guanine (G). Les deux brins d’ADN sont dit complémentaires : en face d’une adénine, il y a toujours
une thymine ; en face d’une cytosine, il y a toujours une guanine. On a donc les interactions (ADN1−
ADN2) possibles suivantes : A−T,T−A,G−Cet C−G.
L’ARN se traduit de l’ADN, par la transcription d’un des deux brins. L’ARN est composé aussi de
quatre nucléotides, mais la thymine est remplacée par l’uracile (U). Le brin d’ARN résultant de la trans-
cription d’un brin d’ADN est alors le complémentaire de ce brin, où la thymine est remplacée par l’uracile.
Dans ce cas, en notant ADNtle brin d’ADN transcrit, les interactions (ADNt−ARN ) possibles sont
alors : A−U,T−A,G−Cet C−G.
De l’ARN peut alors se traduire les protéines, représentables aussi pour une lettre. Une protéine se
traduit de l’ARN par les triplets de nucléotides (A,C,Uou G), qu’on appelle codon. Il existe 43=
64 combinaisons possibles de ces quatre lettres en triplets. Trois codons, parmi ces 64 codes possibles,
signifient la fin de la traduction et sont appelés codon stop. Ces trois codons sont les séquences : UAG,
UGA et UAA. Aux 61 autres codons ne correspondent que 20 acides aminés.
Un exemple résumant les étapes de transcription puis de traduction est donné sur la figure 1.
Travail à faire
Dans cet exercice, la seule fonction de la bibliothèque string.h autorisée est la fonction int
strlen(const char*s) qui renvoie la longueur de la chaine de caractères pointée par s, sans
compter le caractère de fin de chaine ’\0’.
Les fonctions ne devront pas être sensible à la casse, c’est-à-dire qu’elles doivent pouvoir traiter
indifférement les majuscules des minuscules. On pourra éventuellement s’aider du tableau ASCII donné en
annexe.
1. Écrire une fonction int brin_valide(char *brin) qui renvoie 1si la chaine de caractères
brin passée en argument correspond bien à un brin d’ADN, i.e. est composée uniquement des carac-
tères A, C, T, G (et bien évidemment du caractère de fin de chaine ’\0’). Rappel : Aet adoivent
être traité indifférement (et de même pour les autres caractères).
1. Les informations et la figure sont reprises de wikipedia.