On se propose de crypter un message composé par des mots séparés par un seul espace et ne contenant aucun signe de ponctuation (, ; . : ! ? ) en utilisant le principe suivant :
1) Placer chaque mot du message initial dans une case d’un tableau T. On suppose que le message est composé d’au maximum 20 mots.
2) Pour chaque élément du tableau T, ajouter autant de fois le caractère ‘’*’’ pour que sa longueur sera égale à celle du mot le plus long dans le tableau T.
3) Dans un nouveau tableau T1 de taille N1 (N1=longueur du mot le plus long), répartir les lettres du mot se trouvant dans la case T[1] du façon à placer la lettre d’indice i du mot dans la case d’indice i du mot dans la case d’indice i du tableau T1.
4) Répartir de la même façon les lettres du mot contenu dans la case T[2] en concaténant à chaque fois la lettre i avec le contenu de la case i du tableau T1.
5) Répartir de la même façon le reste des mots de T dans T1.
6) Concaténer les mots obtenus dans T1 en les séparant par un espace pour obtenir le message crypté.
Exemple : Si le message à crypter est ‘’ Bonjour Sami j’ai fini mon travail’’, les étapes de cryptage sont :
Etape 1 : Répartir les mots du message dans le tableau T : T =
Bonjour | Sami | J’ai | fini | mon | travail |
Etape 2 : Ajouter le caractère ‘’*’’ autant de fois pour obtenir des mots dont la longueur de chacun est égale à celle du mot le plus long. Etant donné que ‘’Bonjour’’ est le mot le plus long du message (7 caractères), on obtient le tableau T suivant :
Bonjour | Sami** | j’ai*** | fini*** | mon**** | travail |
Etape 3 : Répartir les les lettres de T[1] dans T1 :
B | o | n | j | o | u | r |
Etape 4 : Répartir les les lettres de T[2] dans T1 :
Bs | oa | nm | ji | o* | u* | r* |
Etape 5 : Répartir les les lettres de T[2] dans T1 :
Bsjfmt | oa’ior | nmanna | jiii*v | o****a | u****i | r****l |
Le message crypté sera alors Bsjfmt oa’ior nmanna Jiii*v o****a u****i r****l
L'algorithme de cryptage du message basé sur le principe décrit peut être résumé en plusieurs étapes structurées. Voici le principe de l'algorithme :
1. Initialisation
Entrée : Un message composé de mots séparés par des espaces et ne contenant aucun signe de ponctuation.
Sortie : Un message crypté selon l'algorithme spécifié.
2. Répartition des mots dans un tableau T
Divisez le message en mots en utilisant l'espace comme délimiteur.
Placez chaque mot dans une case d'un tableau T
.
3. Ajustement de la longueur des mots
Identifiez le mot le plus long dans le tableau T
et notez sa longueur L
.
Pour chaque mot du tableau T
, ajoutez des caractères '*'
à la fin du mot jusqu'à ce que sa longueur soit égale à L
.
4. Création du tableau crypté T1
Créez un tableau T1
de taille L
, initialisé avec des chaînes vides.
Pour chaque mot dans T
, répartissez les lettres du mot dans le tableau T1
de telle manière que la lettre d'indice i
d'un mot soit placée dans la case i
Dans cet algorithme, On va utiliser 4 fonctions et 4 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Algorithme cryptage_message Debut # Saisie du message et placer chaque mot du message dans une case du tableau T message<-saisie_message() Ecrire ('tableau T') afficher(t,n,'t') #Recherche la longueur du mot le plus long max<-max_mot(t,n) #Pour chaque élément du tableau T, ajouter autant de fois le caractère '*' ajouter_etoile_t(t,n,max) Ecrire ('tableau T apres ajout etoile') afficher(t,n,'t') #Repartir les lettres des mots du tableau T dans le tableau T1 remplir_t1(t,t1,n,max) Ecrire ('tableau T1') afficher(t,n,'t1') #Concatener les mots obtenus dans T1 en les séparant par un espace pour obtenir le message crypte Ecrire('le message crypte: '+crypter_message(t1,max)) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
max | entier |
t | tableau des chaînes |
t1 | tableau des chaînes |
La fonction supprimer_espaces
Cette fonction supprime les doubles espaces de la chaîne des caractères.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
foncttion <strong>supprimer_espaces</strong>(ch):chaine Début Tant que(ch[0]=' ') faire # elimnier tous les espaces au début de la chaine ch<-sous_chaine(ch,1,long(ch) Fin tant que Tant que (ch[long(ch)-1]==' ') faire # elimnier tous les espaces a la fin de la chaine ch<-sous_chaine(ch,0,long(ch)-1) Fin tant que Tant que Position(ch,' ') faire ch<-ch.replace(" ", " ") # remplacer les doubles espaces par un seul espace Fin tant que retourner ch Fin |
La fonction verif_createTab
Cette fonction vérifie que le message saisi ne contient aucun signe de ponctuation (, ; . : ! ? ), Divise le message en mots en utilisant l'espace comme délimiteur et place chaque mot dans une case d'un tableau T
.
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 |
Fonction verif_createTab(ch:chaîne):booleen Début ch<- supprimer_espaces(ch) i<-0 j<-0 ch1<-'' # parcourir les caracteres de la chaine Tant que(i<long(ch)) et (ch[i] n'est pas dans {',' , ';' ,'.' ,':', '!' ,'?' }) faire Si (ch[i] n'est pas dans {',' , ';' ,'.' ,':', '!' ,'?',' ' }) alors ch1<-ch1+ch[i] Fin si Si ((ch[i]=' ') ou (i=long(ch)-1)) faire t[j]<-ch1 ch1<-'' j<-j+1 i<-i+1 Fin si Fin tant que Si (i<long(ch)) : # si la chaine contient des valeurs non numeriques Ecrire("la chaine contient une signe de ponctuation") retourner Faux Sinon Si 1<=j<=20 alors n<-j # taille du tableau Ecrire("le message est accepte") retourner Vrai Sinon Ecrire("le message doit etre compose de 20 mots au maximum") retourner Faux Finsi Finsi Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
i | entier |
j | entier |
ch1 | chaîne des caractères |
La procédure saisie_message
Cette procédure saisit le message et placer chaque mot du message dans une case du tableau T
1 2 3 4 5 6 7 8 9 |
Procédure saise_message() Début Ecrire('donner un message sans signe de ponctuation: ') lire(ch) Tant que verif_createTab(ch)=Faux faire Ecrire('donner un message sans signe de ponctuation: ') lire(ch) Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaine des caracteres |
La fonction max_mot
Cette fonction recherche le mot le plus long du tableau et retourne sa longueur
1 2 3 4 5 6 7 8 9 10 |
Procédure max_mot(t:Tab,n:entier):entier Début max<-long(t[0]) Pour i de 1 à n-1 faire Si max < long(t[i]) faire max<- long(t[i]) Fin si Fin pour retourner max Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
max | entier |
La procédure ajouter_etoile_t
Cette procédure ajoute autant de fois le caractère '*' pour chaque élément du tableau T.
1 2 3 4 5 6 7 8 9 |
Procédure<strong> ajouter_etoile_t</strong>(@t:Tab,n:entier) Début Pour i de 0 à n-1 faire Si (len(t[i])<max) alors Pour k de 0 à max-long(t[i])-1 faire t[i]<-t[i]+'*' Fin pour Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
k | entier |
La procédure remplir_t1
Cette procédure crée un tableau T1
de taille max
, initialisé avec des chaînes vides et repartir pour chaque mot dans T
les lettres du mot dans le tableau T1
de telle manière que la lettre d'indice i
d'un mot soit placée dans la case i
.
1 2 3 4 5 6 7 8 9 10 11 12 |
Procédure remplir_t1(t:Tab,@t1:Tab,n:entier) Début Pour j de 0 à max-1 faire t1[j]<-'' Fin pour Pour i de 0 à n-1 faire ch<-t[i] Pour j de à max-1 faire t1[j]<-t1[j]+ch[j] Fin pour Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
ch | chaîne des caractères |
La procédure afficher
Cette procédure affiche les éléments du tableau
1 2 3 4 5 6 |
Procédure afficher(t:tab,n:entier,nom:chaine): Début Pour i de 0 à n faire Ecrire(nom+'[',i,']= ',t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction crypter_message
Cette fonction concatène les mots obtenus dans T1 en les séparant par un espace pour obtenir le message crypte
1 2 3 4 5 6 7 |
Procédure crypter_message(t:tab,n:entier):chaine Début Pour i de 0 à n faire ch<-ch+t1[i]+' ' Fin pour retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
ch | 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
from numpy import array t=array([str]*100) t1=array([str]*100) def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch def verif_createTab(ch): global n # pour la taille di tableau ch= supprimer_espaces(ch) i=0 j=0 ch1='' # parcourir les caracteres de la chaine while(i<len(ch)) and (ch[i] not in {',' , ';' ,'.' ,':', '!' ,'?' }) : if (ch[i] not in {',' , ';' ,'.' ,':', '!' ,'?',' ' }): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=ch1 ch1='' j=j+1 i=i+1 if (i<len(ch)) : # si la chaine contient des valeurs non numeriques print("la chaine contient une signe de ponctuation") return False else : if 1<=j<=20: n=j #print("le message est accepte") return True else: #print("le message doit etre compose de 20 mots au maximum") return False # Saisie du message et placer chaque mot du message dans une case du tableau T def saisie_message(): ch=input('donner un message sans signe de ponctuation: ') while verif_createTab(ch)==False : ch=input('donner un message sans signe de ponctuation: ') #Recherche la longueur du mot le plus long def max_mot(t,n): max=len(t[0]) for i in range (1,n) : if max < len(t[i]): max= len(t[i]) return max #Pour chaque élément du tableau T, ajouter autant de fois le caractère '*' def ajouter_etoile_t(t,n,max): for i in range(n): if (len(t[i])<max): for k in range(max-len(t[i])): t[i]=t[i]+'*' #Repartir les lettres des mots du tableau T dans le tableau T1 def remplir_t1(t,t1,n,max): for j in range(max): t1[j]='' for i in range(n): ch=t[i] for j in range(max): t1[j]="".join([t1[j], ch[j]]) def afficher(t,n,nom): for i in range(n): print(nom+'['+str(i)+']= '+t[i]) #Concatener les mots obtenus dans T1 en les séparant par un espace pour obtenir le message crypte def crypter_message(t,n): ch='' for i in range (n) : ch=ch+t1[i]+' ' return ch # programme principal # Saisie du message et placer chaque mot du message dans une case du tableau T message=saisie_message() print ('tableau T') afficher(t,n,'t') #Recherche la longueur du mot le plus long max=max_mot(t,n) #Pour chaque élément du tableau T, ajouter autant de fois le caractère '*' ajouter_etoile_t(t,n,max) print ('tableau T apres ajout etoile') afficher(t,n,'t') #Repartir les lettres des mots du tableau T dans le tableau T1 remplir_t1(t,t1,n,max) print ('tableau T1') afficher(t,n,'t1') #Concatener les mots obtenus dans T1 en les séparant par un espace pour obtenir le message crypte print('le message crypte: '+crypter_message(t1,max)) |
Exécution du programme
Pour remplir un tableau d'entiers à partir d'une chaîne de caractères en Python, vous pouvez suivre les étapes suivantes :
1- Découper la chaîne de caractères en sous-chaînes contenant les entiers.
2- Convertir chaque sous-chaîne en entier.
3- Ajouter chaque entier au tableau.
Pour créer une application en Python pour crypter un message, 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 des entiers .
QPushButton
nommé 'remplir_bt' pour exécuter le module createTab afin de remplir le tableau à partir de la chaine 'ch'.
QPushButton
nommé 'bt_etoile' pour exécuter le module ajouter_etoile.
QPushButton
nommé 'bt_transfert' pour exécuter le module remplir_t1.
QPushButton
nommé 'bt_crypter' pour exécuter le module crypter_message.
QLabel
nommé 'msg' pour afficher un message d'erreur si ch est vide ou contient des valeurs non numériques ou les éléments du tableau ne sont pas dans l'ordre croissant.
QLabel
nommé 'tabt_label' pour afficher les éléments du tableau T.
QLabel
nommé 'tabt1_label' pour afficher les éléments du tableau T1.
QLabel
nommé 'msg_crypter' pour afficher le message crypté.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-2.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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array t=array([str]*30) t1=array([str]*30) app = QApplication([]) windows = loadUi ("tabtab-2.ui") # Fonction qui supprime des espaces de la chaine des carcatères def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch # Procedure qui remplit un tableau par des entiers a partir d'une chaine des caractère def createTab(): windows.tabt_label.clear() windows.tabt1_label.clear() windows.msg_crypter.clear() ch = windows.ch.text() global n # pour la taille di tableau if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=0 j=0 ch1='' # parcourir les caracteres de la chaine while(i<len(ch)) and (ch[i] not in {',' , ';' ,'.' ,':', '!' ,'?' }) : if (ch[i] not in {',' , ';' ,'.' ,':', '!' ,'?',' '}): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=ch1 ch1='' j=j+1 i=i+1 if (i<len(ch)) : # si la chaine contient des valeurs non numeriques windows.msg.setText("la chaine contient une signe de ponctuation") else : if 1<=j<=20: n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+ str(t[k])+ '\n' #afficher les elements du tableau windows.tabt_label.setText(tab) else: windows.msg.setText("le nombre des mots du message n'est pas entre 1 et 20") #Recherche la longueur du mot le plus long def max_mot(t,n): max=len(t[0]) for i in range (1,n) : if max < len(t[i]): max= len(t[i]) return max #Pour chaque élément du tableau T, ajouter autant de fois le caractère '*' def ajouter_etoile(): max=max_mot(t,n) windows.tabt_label.clear() for i in range(n): if (len(t[i])<max): for k in range(max-len(t[i])): t[i]=t[i]+'*' tab='' for i in range (n) : tab=tab+ 't['+str(i)+']= '+t[i]+ '\n' windows.tabt_label.setText(tab) def remplir_t1(): max=max_mot(t,n) print(str(max)) for j in range(max): t1[j]='' for i in range(n): ch=t[i] print(ch) for j in range(len(ch)): t1[j]="".join([t1[j], ch[j]]) tab='' for i in range (len(ch)) : tab=tab+ 't1['+str(i)+']= '+t1[i]+ '\n' windows.tabt1_label.setText(tab) def crypter_message(): ch='' for i in range (n) : ch=ch+t1[i]+' ' windows.msg_crypter.setText(ch) windows.remplir_bt.clicked.connect ( createTab ) windows.bt_transfert.clicked.connect (remplir_t1 ) windows.bt_etoile.clicked.connect (ajouter_etoile ) windows.bt_crypter.clicked.connect (crypter_message ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau T :
2) Ajout des étoiles au tableau T :
3) Repartir les mots tableau T dans le tableau T1 :
4) Afficher le message crypté :
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