I3 - TP1 Chiffre de César
Résumé L’objectif de ce TP est de voir l’étape « Developpement » du cycle en V.
Petit conseil Pour faciliter le développement, commencez par écrire un programme vide. Ajoutez successivement les fonctions et procédures en commençant par celles qui se trouvent en bas de l’analyse descendante. À chaque fois que vous avez fini de développer une fonction ou une procédure, enregistrez votre programme et compilez les le. Une fois toutes les fonctions et procédures développées le programme principal.
1
Chiffrement
Objectif Écrire un programme Pascal qui affiche les cryptogrammes de phrases saisies par l’utilisateur. Le programme s’arrête lorsque la phrase saisie par l’utilisateur est « FIN. ». Le chiffre utilisé sera celui de César. La clé sera un caractère qui marquera le décalage (codage de ’A’). Les caractères utilisables seront dans l’ordre : ’A’..’Z’,’a’..’z’,’ ’. Tout autre caractère sera ignoré.
Rappels En cours nous avons vu la conception détaillée suivante : procédure machineAChiffrer () Déclaration laCle : Caractere laPhrase : Chaine de caracteres debut laCle ← obtenirCle() laPhrase ← obtenirPhrase() tant que non finDeProgramme(laPhrase) faire ecrire(chiffrerPhrase(laPhrase,laCle)) laPhrase ← obtenirPhrase() fintantque fin fonction obtenirCle () : Caractere Déclaration laCle : Caractere debut repeter ecrire(“La cle :”) lire(laCle) jusqu’a ce que caractereAdmissible(laCle) retourner laCle fin fonction caractereAdmissible (unCaractere : Caractere) : Booleen debut retourner (unCaractere ≥ ’A’ et unCaractere ≥ ’Z’) ou (unCaractere ≥ ’a’ et unCaractere ≥ ’a’) ou unCaractere=’ ’
1
fin fonction obtenirPhrase () : Chaine de caracteres Déclaration laPhrase : Chaine de caracteres debut ecrire(“La phrase à chiffrer :”) lire(laPhrase) retourner laPhrase fin fonction finDeProgramme (unePhrase : Chaine de caracteres) : Booleen debut retourner majuscule(unePhrase)=”FIN.” fin fonction chiffrerPhrase (unePhrase : Chaine de caracteres, uneCle : Caractere) : Chaine de caracteres Déclaration resultat : Chaine de caracteres i,leDecalage : Naturel debut resultat ← "" leDecalage ← decalage(uneCle) pour i ←1 à longueur(unePhrase) faire si caractereAdmissible(iemeCaractere(unePhrase,i)) alors resultat ← resultat+caractereEnChaine( chiffrerCaractere( iemeCaractere(unePhrase,i),leDecalage)) finsi finpour retourner resultat fin fonction decalage (unCaractere : Caractere) : Naturel debut si unCaractere≥’A’ et unCaractere≤’Z’ alors retourner (ord(’Z’)-ord(’A’)) sinon si unCaractere≥’a’ et unCaractere≤’z’ alors retourner 25+(ord(’z’)-ord(’a’)) sinon retourner 52 finsi finsi fin fonction chiffrerCaractere (unCaractere : Caractere, unDecalage : Naturel) : Caractere Déclaration resultat : Caractere i : Naturel debut resultat ← unCaractere pour i ←1 à unDecalage faire cas où resultat vaut ’Z’: resultat ← ’a’ ’z’: resultat ← ’ ’ ’ ’: resultat ← ’A’ autre : resultat ← succ(resultat) fincas finpour retourner resultat fin
2
Déchiffrement
Objectif Écrire un programme Pascal qui affiche le déchiffrement de cryptogrammes saisis par l’utilisateur. Le programme s’arrête lorsque la phrase saisie par l’utilisateur est « FIN. ». Le chiffre
2
utilisé sera celui de César. La clé sera un caractère qui marquera le décalage (codage de ’A’). Les caractères utilisables seront dans l’ordre : ’A’..’Z’,’a’..’z’,’ ’. Tout autre caractère sera ignoré.
Rappels En cours nous avons vu la conception détaillée suivante : procédure machineADechiffrer () Déclaration laCle : Caractere laPhrase : Chaine de caracteres debut laCle ← obtenirCle() laPhrase ← obtenirPhrase() tant que non finDeProgramme(laPhrase) faire ecrire(dechiffrerPhrase(laPhrase,laCle)) laPhrase ← obtenirPhrase() fintantque fin fonction dechiffrerPhrase (unePhrase : Chaine de caracteres, uneCle : Caractere) : Chaine de caracteres Déclaration resultat : Chaine de caracteres i,leDecalage : Naturel debut resultat ← "" leDecalage ← decalage(uneCle) pour i ←1 à longueur(unePhrase) faire si caractereAdmissible(iemeCaractere(unePhrase,i)) alors resultat ← resultat+caractereEnChaine( dechiffrerCaractere( iemeCaractere(unePhrase,i),leDecalage)) finsi finpour retourner resultat fin fonction dechiffrerCaractere (unCaractere : Caractere, unDecalage : Naturel) : Caractere Déclaration resultat : Caractere i : Naturel debut resultat ← unCaractere pour i ←1 à unDecalage faire cas où resultat vaut ’A’: resultat ← ’ ’ ’a’: resultat ← ’Z’ ’ ’: resultat ← ’z’ autre : resultat ← pred(resultat) fincas finpour retourner resultat fin
3