On se propose d'écrire un algorithme et un programme Python permettant de saisir une chaîne de caractères ch contenant aux maximum 15 mots puis de trier les mots qui la constituent dans l’ordre croissant de leurs longueurs.
Exemple :
Pour ch = "une hirondelle ne fait pas le printemps."
Après le triage des mots de ch, on obtient le résultat suivant : "ne le une pas fait printemps hirondelle"
N.B. Le point "." indiquant la fin de la chaîne, ne fait pas partie du dernier mot. Par conséquent ne figure pas dans la chaîne cryptée.
La chaîne ch doit être non vide et de taille inférieure à 50. Elle commence obligatoirement par une lettre, se termine par un point et chaque deux mots consécutifs sont séparés par un seul espace.
Dans cet algorithme, On va utiliser trois fonctions et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 |
Algorithme cryptage_chaine Debut ch<-saisie_chaine() tri_mots(t,n) afficher(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
t | tableau des chaînes des caractères |
n | entier |
La fonction supprimer_espaces
Cette fonction remplace les doubles espaces se trouvant dans une chaîne des caractères par un seul espace.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fonction supprimer_espaces(ch:chaine):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 (Pos(ch,' ')>0) faire ch<-ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace Fin tant que retourner ch Fin |
La fonction verif_lettres
Cette fonction a deux taches :
1- Elle vérifie que la chaîne ch est non vide et de longueur inférieure à 50, commence obligatoirement par une lettre, se termine par un point et chaque deux mots consécutifs sont séparés par un seul espace.
2- Elle découpe la chaine en des mots et les met dans un tableau des chaînes 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 |
fonction verif_lettres(ch:chaine;@t:tab):booleen Début # verifier que ch commence par une lettre et sa longueur maximale <=50 Si (1<=long(ch)<=50) et 'A'<=Majus(ch[0])<='Z' et ch[long(ch)-1]='.' alors # eliminer les doubles espaces et le point de ch ch<-supprimer_espaces(Sous_chaine(ch,0,long(ch)-1)) i<-0 j<-0 nbr_mots<-0 ch1<-'' Tant que (i<long(ch)) faire Si ch[i] !=' ' alors ch1<-ch1+ch[i] Fin si Si ch[i]=' ' ou i==len(ch)-1 alors # detecter la fin du mot # mettre chaque mot detecte dans le tableau t t[j]<-ch1 ch1<-'' nbr_mots<-nbr_mots+1 j<-j+1 Fin si i<-i+1 Fin tant que n<-j # la taille du tableau t est le nombre des mots de la chaine # verifier que la chaine contient au maximum 15 mots retourner (1<=nbr_mots<=15) Sinon retourner Faux Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
n | entier |
ch1 | chaîne des caractères |
nbr_mots | entier |
La fonction saisie_chaine
Cette fonction saisit une chaine non vide et de taille inférieure à 50 et commence obligatoirement par une lettre, se termine par un point et chaque deux mots consécutifs sont séparés par un seul espace.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_chaine():chaine Début Ecrire("donner une chaine valide: ") Lire(ch) Tant que (verif_lettres(ch,t)=Faux) faire Ecrire("donner une chaine valide: ") Lire(ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
t | tableau des chaînes des caractères |
La procédure tri_mots
Cette procédure trie les mots éléments du tableau dans l'ordre croissant selon leurs longueurs en utilisant la méthode tri par sélection.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Procedure tri_mots(@t:tab;n:entier) Début Pour i de 0 à n-2 faire min<-i Pour j de i à n-1 faire Si long(t[min])>long(t[j])alors min<-j Fin si Fin pour Si min != i alors temp<-t[min] t[min]<-t[i] t[i]<-temp Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
min | entier |
temp | chaine des caractères |
La procédure afficher
Cette procédure affiche les mots éléments du tableau dans l'ordre croissant selon leurs longueurs.
1 2 3 4 5 6 7 |
Procedure affiche(t:tab;n:entier) Début Ecrire('La chaine trie est :') Pour i de 0 à n-1 faire Ecrire(t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
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 |
from numpy import array t=array([str]*50) # declaration du tableau pour contenir les mots de la chaine # 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 def verif_chaine(ch,t) : global n # pour la taille du tableau # verifier que ch commence par une lettre et sa longueur maximale <=50 if (1<=len(ch)<=50) and 'A'<=ch[0].upper()<='Z' and ch[len(ch)-1]=='.': # eliminer les doubles espaces et le point de ch ch=supprimer_espaces (ch[0:len(ch)-1]) i=0 j=0 nbr_mots=0 ch1='' while (i<len(ch)) : if ch[i] !=' ': ch1=ch1+ch[i] if ch[i]==' ' or i==len(ch)-1 : # mettre chaque mot detecte dans le tableau t t[j]=ch1 ch1='' nbr_mots=nbr_mots+1 j=j+1 i=i+1 n=j # la taille du tableat t est le nombre des mots de la chaine # verifier que la chaine contient au maximum 15 mots return (1<=nbr_mots<=15) else: return False def saisie_chaine(): ch=input("donner une chaine valide: ") while (verif_chaine(ch,t)==False) : ch=input("donner une chaine valide: ") return ch def tri_mots(t,n): for i in range(n-1): min=i for j in range(i,n): if len(t[min])>len(t[j]): min=j if min != i : temp=t[min] t[min]=t[i] t[i]=temp def afficher(t,n): print('La chaine trie est :') for i in range(n): print(t[i],end=' ') #programme principal ch=saisie_chaine() tri_mots(t,n) afficher(t,n) |
Exécution du programme:
Pour créer une application en Python et Designer QT qui crypte une chaîne des caractères selon le principe décrit au dessus, 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é 'remplir_bt' pour découper la chaîne des caractères en mots et les mettre dans un tableau t.
QPushButton
nommé 'trier_bt' pour trier les mots du tableau t dans l'ordre croissant selon leurs longueurs.
QLabel
nommé 'tabt_label' pour contenir les éléments du tableau t.
QPushButton
nommé 'afficher_bt' pour afficher les mots du tableau t dans l'ordre croissant selon leurs longueurs.
QLabel
nommé 'msg' pour contenir les messages d'erreur et les mots du tableau t dans l'ordre croissant selon leurs longueurs.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-3.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 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication from numpy import array # # declaration du tableau pour contenir les mots de la chaine t=array([str]*110) app = QApplication([]) windows = loadUi ("tabtab-3.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 le tableau IDENT des identificateurs def createTabT(): windows.tabt_label.clear() windows.msg.clear() global n #pour la taile du tableau a des utilisateurs ch = windows.ch.text() if (1<=len(ch)<=50) and 'A'<=ch[0].upper()<='Z' and ch[len(ch)-1]=='.' : windows.msg.clear() # effacer le message d erreur # eliminer les doubles espaces et le point de ch ch=supprimer_espaces (ch[0:len(ch)-1]) i=0 j=0 nbr_mots=0 ch1='' while (i<len(ch)) : if ch[i] !=' ': ch1=ch1+ch[i] if ch[i]==' ' or i==len(ch)-1 : # mettre chaque mot detecte dans le tableau t t[j]=ch1 ch1='' nbr_mots=nbr_mots+1 j=j+1 i=i+1 if (i==len(ch)): if 1<=j<=15: n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+t[k]+ '\n' #afficher les elements du tableau windows.tabt_label.setText(tab) else: windows.msg.setText("la chaine doit contenir au maximum 15 mots") else: windows.msg.setText("Veuillez remplir une chaîne valide") else: windows.msg.setText("Veuillez remplir une chaîne valide") def tri_mots(): for i in range(n-1): min=i for j in range(i,n): if len(t[min])>len(t[j]): min=j if min != i : temp=t[min] t[min]=t[i] t[i]=temp tab='' for k in range (n) : tab=tab+ 't['+str(k)+']= '+t[k]+ '\n' #afficher les elements du tableau windows.tabt_label.setText(tab) def afficher(): affichage='La chaine trie est :\n' for i in range(n): affichage=affichage+ t[i]+' ' windows.msg.setText(affichage) windows.remplir_bt.clicked.connect ( createTabT ) windows.trier_bt.clicked.connect ( tri_mots ) windows.afficher_bt.clicked.connect ( afficher ) windows.show() app.exec_() |
Exécution du programme
1) Saisie de la chaîne des caractère et remplissage du tableau T.
2) Trier du tableau T.
3) Afficher les mots de la chaîne qui la constituent dans l’ordre croissant de leurs longueurs.
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