Exercice 9 - Exercices corriges
Un des plus anciens systèmes de cryptographie (aisément déchiffrable) consiste
à décaler les lettres d'un ... Exercice 9.7 - Cryptographie 2 - le chiffre de César.
part of the document
Exercice 9.1
Parmi ces affectations (considérées indépendamment les unes des autres), lesquelles provoqueront des erreurs, et pourquoi ?Variables A, B, C en NumériqueVariables D, E en Caractère...A ! Sin(B)...A ! Sin(A + B * C)...B ! Sin(A) Sin(D)...D ! Sin(A / B)...C ! Cos(Sin(A)
Exercice 9.2
Ecrivez un algorithme qui demande un mot à l utilisateur et qui affiche à l écran le nombre de lettres de ce mot (c'est vraiment tout bête).
Exercice 9.3
Ecrivez un algorithme qui demande une phrase à lutilisateur et qui affiche à lécran le nombre de mots de cette phrase. On suppose que les mots ne sont séparés que par des espaces (et c'est déjà un petit peu moins bête).
Exercice 9.4
Ecrivez un algorithme qui demande une phrase à lutilisateur et qui affiche à lécran le nombre de voyelles contenues dans cette phrase. On pourra écrire deux solutions. La première déploie une condition composée bien fastidieuse. La deuxième, en utilisant la fonction Trouve, allège considérablement l'algorithme.
Exercice 9.5
Ecrivez un algorithme qui demande une phrase à lutilisateur. Celui-ci entrera ensuite le rang dun caractère à supprimer, et la nouvelle phrase doit être affichée (on doit réellement supprimer le caractère dans la variable qui stocke la phrase, et pas uniquement à lécran).
Exercice 9.6 - Cryptographie 1
Un des plus anciens systèmes de cryptographie (aisément déchiffrable) consiste à décaler les lettres dun message pour le rendre illisible. Ainsi, les A deviennent des B, les B des C, etc. Ecrivez un algorithme qui demande une phrase à lutilisateur et qui la code selon ce principe. Comme dans le cas précédent, le codage doit seffectuer au niveau de la variable stockant la phrase, et pas seulement à lécran.
Exercice 9.7 - Cryptographie 2 - le chiffre de César
Une amélioration (relative) du principe précédent consiste à opérer avec un décalage non de 1, mais dun nombre quelconque de lettres. Ainsi, par exemple, si lon choisit un décalage de 12, les A deviennent des M, les B des N, etc.Réalisez un algorithme sur le même principe que le précédent, mais qui demande en plus quel est le décalage à utiliser. Votre sens proverbial de l'élégance vous interdira bien sûr une série de vingt-six "Si...Alors"
Exercice 9.8 - Cryptographie 3
Une technique ultérieure de cryptographie consista à opérer non avec un décalage systématique, mais par une substitution aléatoire. Pour cela, on utilise un alphabet-clé, dans lequel les lettres se succèdent de manière désordonnée, par exemple :HYLUJPVREAKBNDOFSQZCWMGITXCest cette clé qui va servir ensuite à coder le message. Selon notre exemple, les A deviendront des H, les B des Y, les C des L, etc.Ecrire un algorithme qui effectue ce cryptage (lalphabet-clé sera saisi par lutilisateur, et on suppose qu'il effectue une saisie correcte).
Exercice 9.9 - Cryptographie 4 - le chiffre de Vigenère
Un système de cryptographie beaucoup plus difficile à briser que les précédents fut inventé au XVIe siècle par le français Vigenère. Il consistait en une combinaison de différents chiffres de César.On peut en effet écrire 25 alphabets décalés par rapport à lalphabet normal :- lalphabet qui commence par B et finit par
YZA- lalphabet qui commence par C et finit par
ZAB- etc.
Le codage va seffectuer sur le principe du chiffre de César : on remplace la lettre dorigine par la lettre occupant la même place dans lalphabet décalé.Mais à la différence du chiffre de César, un même message va utiliser non un, mais plusieurs alphabets décalés. Pour savoir quels alphabets doivent être utilisés, et dans quel ordre, on utilise une clé.Si cette clé est « VIGENERE » et le message « Il faut coder cette phrase », on procèdera comme suit :La première lettre du message, « i », est la 9e lettre de lalphabet normal. Elle doit être codée en utilisant lalphabet commençant par la première lettre de la clé, « V ». Dans cet alphabet, la 9e lettre est le « d ». « i » devient donc « d »La deuxième lettre du message, « l », est la 11e lettre de lalphabet normal. Elle doit être codée en utilisant lalphabet commençant par la deuxième lettre de la clé, « I ». Dans cet alphabet, la 11e lettre est le « s ». « l » devient donc « s », etc.Quand on arrive à la dernière lettre de la clé, on recommence à la première.Ecrire lalgorithme qui effectue un cryptage de Vigenère, en demandant bien sûr au départ la clé à lutilisateur.
Exercice 9.10
Ecrivez un algorithme qui demande un nombre entier à lutilisateur. Lordinateur affiche ensuite le message « Ce nombre est pair » ou « Ce nombre est impair » selon le cas.
Exercice 9.11
Ecrivez les algorithmes qui génèrent un nombre Glup aléatoire tel que
a) 0 =< Glup < 2b) 1 =< Glup < 1c) 1,35 =< Glup < 1,65d) Glup émule un dé à six facese) 10,5 =< Glup < +6,5f) Glup émule la somme du jet simultané de deux dés à six faces
Exercice 9.1
A ! Sin(B) Aucun problèmeA ! Sin(A + B * C) Aucun problèmeB ! Sin(A) Sin(D) Erreur ! D est en caractèreD ! Sin(A / B) Aucun problème& si B est différent de zéroC ! Cos(Sin(A) Erreur ! Il manque une parenthèse fermante
Exercice 9.2
Vous étiez prévenus, c'est bête comme chou ! Il suffit de se servir de la fonction Len, et c'est réglé :Variable Mot en CaractèreVariable Nb en EntierDebutEcrire "Entrez un mot : "Lire MotNb ! Len(Mot)Ecrire "Ce mot compte ", Nb, " lettres"Fin
Exercice 9.3
Là, on est obligé de compter par une boucle le nombre d'espaces de la phrase, et on en déduit le nombre de mots. La boucle examine les caractères de la phrase un par un, du premier au dernier, et les compare à l'espace.Variable Bla en CaractèreVariables Nb, i en EntierDebutEcrire "Entrez une phrase : "Lire BlaNb ! 0Pour i ! 1 à Len(Bla) Si Mid(Bla, i , 1) = " " Alors Nb ! Nb + 1 FinSii suivantEcrire "Cette phrase compte ", Nb + 1, " mots"Fin
Exercice 9.4
Solution 1 : pour chaque caractère du mot, on pose une très douloureuse condition composée. Le moins que l'on puisse dire, c'est que ce choix ne se distingue pas par son élégance. Cela dit, il marche, donc après tout, pourquoi pas.Variable Bla en CaractèreVariables Nb, i, j en EntierDebutEcrire "Entrez une phrase : "Lire BlaNb ! 0Pour i ! 1 à Len(Bla) Si Mid(Bla, i, 1) = "a" ou Mid(Bla, i, 1) = "e" ou Mid(Bla, i, 1) = "i" ou Mid(Bla, i, 1) = "o" ou Mid(Bla, i, 1) = "u" ou Mid(Bla, i, 1) = "y" Alors Nb ! Nb + 1 FinSii suivantEcrire "Cette phrase compte ", Nb, " voyelles"FinSolution 2 : on stocke toutes les voyelles dans une chaîne. Grâce à la fonction Trouve, on détecte immédiatement si le caractère examiné est une voyelle ou non. C'est nettement plus sympathique...Variables Bla, Voy en CaractèreVariables Nb, i, j en EntierDebutEcrire "Entrez une phrase : "Lire BlaNb ! 0Voy ! "aeiouy"Pour i ! 1 à Len(Bla) Si Trouve(Voy, Mid(Bla, i, 1)) 0 Alors Nb ! Nb + 1 FinSii suivantEcrire "Cette phrase compte ", Nb, " voyelles"Fin
Exercice 9.5
Il n'existe aucun moyen de supprimer directement un caractère d'une chaîne
autrement qu'en procédant par collage. Il faut donc concaténer ce qui se trouve à gauche du caractère à supprimer, avec ce qui se trouve à sa droite. Attention aux paramètres des fonctions Mid, ils n'ont rien d'évident !Variable Bla en CaractèreVariables Nb, i, j en EntierDébutEcrire "Entrez une phrase : "Lire BlaEcrire "Entrez le rang du caractère à supprimer : "Lire NbL ! Len(Bla)Bla ! Mid(Bla, 1, Nb 1) & Mid(Bla, Nb + 1, L Nb)Ecrire "La nouvelle phrase est : ", BlaFin
Exercice 9.6
Sur l'ensemble des exercices de cryptographie, il y a deux grandes stratégies possibles :- soit transformer les caractères en leurs codes ASCII. L'algorithme revient donc ensuite à traiter des nombres. Une fois ces nombres transformés, il faut les reconvertir en caractères.- soit en rester au niveau des caractères, et procéder directement aux transformations à ce niveau. C'est cette dernière option qui est choisie ici, et pour tous les exercices de cryptographie à venir.Pour cet exercice, il y a une règle générale : pour chaque lettre, on détecte sa position dans l'alphabet, et on la remplace par la lettre occupant la position suivante. Seul cas particulier, la vingt-sixième lettre (le Z) doit être codée par la première (le A), et non par la vingt-septième, qui n'existe pas !Variables Bla, Cod, Alpha en CaractèreVariables i, Pos en EntierDébutEcrire "Entrez la phrase à coder : "Lire BlaAlpha ! "ABCDEFGHIJKLMNOPQRSTUVWXYZ"Cod ! ""Pour i ! 1 à Len(Bla) Let ! Mid(Bla, i, 1) Si Let "Z" Alors Pos ! Trouve(Alpha, Let) Cod ! Cod & Mid(Alpha, Pos + 1, 1) Sinon Cod ! Cod & "A" FinSii SuivantBla ! CodEcrire "La phrase codée est : ", BlaFin
Exercice 9.7
Cet algorithme est une généralisation du précédent. Mais là, comme on ne connaît pas d'avance le décalage à appliquer, on ne sait pas a priori combien de "cas particuliers", à savoir de dépa & 8 d p ¶ ¸ ä æ
:
<
V
\
^
d
|
~
èÕÄ®®®mmmÕÕÕVÕèÕÄÕ-jh^h^CJOJQJU^J_HaJ,h^h^CJOJQJ^J_HaJmH sH ,h^h^CJOJQJ^J_HaJmH sH $h^h^CJOJQJ^J_HaJ*h^h^5CJOJQJ\^J_HaJ h^h^OJQJ^J_HaJ$h^h^CJOJQJ^J_HaJ-h^h^B*CJOJQJ^J_HaJphX
\
`
d
~
¤¾¾ÀÂÐ!68:u@uzuèÕȳÈuuuuusuuÕ\ÕȳÈuÕuÕuÕuÕu-jxh
²h
²CJOJQJU^J_HaJU$h
²h
²CJOJQJ^J_HaJ*h
²h
²5CJOJQJ\^J_HaJ)h
²h
²B*CJOJQJ^J_Hphÿ)h
²h
²B*CJOJQJ_HaJphÿh
²h
²CJ_HaJ$h
²h
²CJOJQJ^J_HaJ-jÐh
²h
²CJOJQJU^J_HaJ$t pair"Sinon Ecrire "Ce nombre est pair"FinSiFin
Exercice 9.11
a) Glup ! Alea() * 2b) Glup ! Alea() * 2 - 1c) Glup ! Alea() * 0,30 + 1,35d) Glup ! Ent(Alea()) * 6 + 1e) Glup ! Alea() * 17 10,5f) Glup ! (Ent(Alea())*6+1) + (Ent(Alea())*6+1Êpptttxtt||õðááÙ×dhgd
²dh¤d¤d[$\$gd
²gd
² dh¤Zgd
²zu|u´u¶uv||||íÚíÚØÚíÔh^U$h
²h
²CJOJQJ^J_HaJ$h
²h
²CJOJQJ^J_HaJ)