On propose un algorithme et un programme Python permettant de saisir une chaîne de caractères ch et de la crypter en utilisant le principe suivant :
Etape 1 : Rotation13
Effectuer, pour chaque caractère de ch, une rotation de 13 caractères dans l’ordre alphabétique en appliquant la formule Chr(97 + (Ord(ch[i]) – 97 + 13) Mod 26) pour obtenir le caractère correspondant.
Etape 2 : Miroir
Transformer la chaîne de caractères obtenue à l’issue de l’Etape 1 en son miroir. C’est-à-dire permuter le premier caractère avec le dernier, le deuxième caractère avec l’avant dernier et ainsi de suite.
Remarque : La chaîne ch doit être non vide, de longueur inférieure à 10 et contient seulement des lettres alphabétiques en minuscule.
Exemple :
Pour ch = "algo"
Etape 1 : Rotation13
- le caractère "a" sera crypté en "n". En effet, Chr(97+(Ord("a")-97+13) Mod 26) = Chr(110) qui correspond au caractère "n"
- le caractère "l" sera crypté en "y". En effet, Chr(97+(Ord("l")-97+13) Mod 26) = Chr(121) qui correspond au caractère "y".
- le caractère "g" sera crypté en "t". En effet, Chr(97+(Ord("g")-97+13) Mod 26) = Chr(116) qui correspond au caractère "t".
- le caractère "o" sera crypté en "b". En effet, Chr(97+(Ord("o")-97+13) Mod 26) = Chr(98) qui correspond au caractère "b".
D’où le résultat de l’étape 1 est "nytb"
Etape 2 : Miroir Le miroir de la chaîne "nytb" est "btyn"
Donc, le cryptage de la chaîne "algo" en appliquant le principe ci-dessus est "btyn"
Dans cet algorithme, On va utiliser trois fonctions :
Algorithme du programme Principal
1 2 3 4 5 |
Algorithme cryptage_chaine Debut ch<-saisie_chaine() Ecrire('La chaine cryptee est '+cryptage(ch)) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
La fonction verif_lettres
Cette fonction vérifie que la chaîne ch est non vide, de longueur inférieure à 10 et contient seulement des lettres alphabétiques en minuscule.
1 2 3 4 5 6 7 8 9 10 11 12 |
fonction verif_lettres(ch:chaine):booleen Début Si 1<=long(ch)<=10 alors i<-0 Tant que (i<long(ch)-1) et ('a'<=ch[i]<='z') alors i<-i+1 Fin tant que retourner ('a'<=ch[i]<='z') Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction saisie_chaine
Cette fonction saisit une chaine non vide, de longueur inférieure à 10 et contient seulement des lettres alphabétiques en minuscule.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_chaine():chaine Début Ecrire("donner une chaine forme au maximum 10 lettres minuscules: ") Lire(ch) Tant que (verif_lettres(ch)=Faux) faire Ecrire("donner une chaine forme au maximum 10 lettres minuscules: ") Lire(ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
La fonction cryptage
Cette fonction fait le cryptage d'une chaîne des caractères.
1 2 3 4 5 6 7 8 9 10 11 12 |
fonction cryptage(ch:chaine):chaine Début ch1<-'' Pour i de 0 à long(ch)-1 faire ch1<-ch1+chr(97+(ord(ch[i])-97+13) mod 26 ) Fin pour ch_crypter<-'' Pour i de 0 à long(ch1)-1 faire ch_crypter<-ch1[i]+ch_crypter Fin pour retourner ch_crypter Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
ch1 | chaîne des caractères |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
def verif_lettres(ch) : if 1<=len(ch)<=10 : i=0 while (i<len(ch)-1) and ('a'<=ch[i]<='z'): i=i+1 return ('a'<=ch[i]<='z') else: return False def saisie_chaine(): ch=input("donner une chaine forme au maximum 10 lettres minuscules: ") while (verif_lettres(ch)==False) : ch=input("donner une chaine forme au maximum 10 lettres minuscules: ") return ch def cryptage(ch): ch1='' for i in range(len(ch)): ch1=ch1+chr(97+(ord(ch[i])-97+13) % 26 ) ch_crypter='' for i in range(len(ch1)): ch_crypter=ch1[i]+ch_crypter return ch_crypter ch=saisie_chaine() print('La chaine cryptee est '+cryptage(ch)) |
Exécution du programme:
Pour créer une application en Python et Designer QT qui crypte une chaîne des caractères, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer une chaîne des caractères.
QPushButton
nommé 'crypter_bt' pour crypter une chaîne des caractères.
QLabel
nommé 'msg' pour afficher des messages d'erreur et la chaîne des caractères.
Enregistrez le fichier avec l'extension .ui
, par exemple rotation-miroir-interface.ui
.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication app = QApplication([]) windows = loadUi ("rotation-miroir-interface.ui") def verif_lettres(ch) : if 1<=len(ch)<=10 : i=0 while (i<len(ch)-1) and ('a'<=ch[i]<='z'): i=i+1 return ('a'<=ch[i]<='z') else: return False def play(): windows.msg.clear() ch = windows.ch.text() if verif_lettres(ch) : ch1='' for i in range(len(ch)): ch1=ch1+chr(97+(ord(ch[i])-97+13) % 26 ) ch_crypter='' for i in range(len(ch1)): ch_crypter=ch1[i]+ch_crypter windows.msg.setText('La chaine cryptee est '+ch_crypter) else: windows.msg.setText(" donner une chaine forme au maximum 10 lettres minuscules ") windows.crypter_bt.clicked.connect(play) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info