On se propose de concevoir une interface graphique permettant de saisir une chaîne de caractères Ch et d’afficher sans redondance ses mots qui sont triés selon l’ordre alphabétique, séparés par le caractère "-".
Un mot est trié selon l’ordre alphabétique si tous ses caractères sont ordonnés en ordre croissant des lettres alphabétiques.
Exemples :
Pour Ch="le lion mange la viande.", le programme affiche : Aucun mot trié dans la chaine
Pour Ch="il est gentil.", le programme affiche : il-est En effet, les caractères des deux mots "il" et "est" sont triés en ordre croissant alphabétiquement.
Pour Ch="il est fou.", le programme affiche : il-est-fou En effet, les caractères des trois mots "il", "est" et "fou" sont triés en ordre croissant
alphabétiquement.
Pour Ch="il est gentil et il est fou." le programme affiche : il-est-et-fou
En effet, les caractères des mots "il", "est", "et" et "fou" sont triés en ordre croissant alphabétiquement et les mots "il" et "est" sont affichés une seul fois chacun.
Cet algorithme a pour rôle de traiter une chaîne de caractères Ch saisie par l’utilisateur, afin d’identifier les mots qui la composent, puis :
1- extraire les mots contenus dans la chaîne en les séparant selon les espaces ou délimiteurs.
2- trier les mots obtenus selon l’ordre alphabétique (lexicographique).
3- afficher la liste finale des mots distincts, triés et séparés par le caractère "-" au lieu des espaces.
Dans cet algorithme, On va utiliser trois fonctions et une procédure :
1 2 3 4 5 |
Algorithme mots_ordonnes Debut ch <- saisir() traitement(ch) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
Cette fonction vérifie que la chaîne de caractères saisie est non vide, se terminant par le caractère ".", formée au maximum par 30 caractères (lettres minuscules et espaces uniquement).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fonction verif(ch:chaine):booleen Début Si (0<long(ch)<=30) et (ch[0]!=' ') et (Pos(ch,' ')=-1) et (ch[long(ch)-1]='.') alors i <- 0 Tant que (0<long(ch)<=30) et (i<long(ch)-2) et (((Majus(ch[i])>='A') et (Majus(ch[i])<='Z')) ou ch[i]=' ') alors i <- i+1 Si ((Majus(ch[i])>='A') et (Majus(ch[i])<='Z') alors retourner Vrai Sinon retourner Faux Fin si Fin tant que Sinon retourner Faux Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
Cette fonction saisit une chaîne de carctère
1 2 3 4 5 6 7 8 9 10 |
fonction saisie():chaine Début Ecrire('donner des mots separes par un seul espace et se termine par . : ') Lire(ch) Tant que verif(ch)=Faux faire Ecrire('donner des mots separes par un seul espace et se termine par . : ') Lire(ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaîne des caractères |
Cette fonction permet de qui permet permet de vérifier si la chaîne de caractères Mot est triée en ordre croissant des lettres alphabétique ou non.
1 2 3 4 5 6 7 8 |
fonction ordonner(ch:chaine): booleen Début i <- 0 Tant que (i<long(mot)-2) et (mot[i]<=mot[i+1]) faire i <- i+1 Fin tant que retourner mot[i]<=mot[i+1] Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
Cette procédure exploite la fonction Ordonner pour rechercher et afficher les mots de la chaine de caractères ch qui sont ordonnés sans redondance séparés par le caractère "-".
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 |
Procedure nbr_armstrong (a:entier;b:entier) Début mot <- '' mots_tries <- '' Pour i de 0 à long(ch)-1) faire Si ch[i]!=' ' alors mot=mot+ch[i] Sinon Si (ordonner(mot)) et (mots_tries.find(mot)=-1) alors mots_tries <- mots_tries+mot+'-' Fin si mot='' Fin pour Si ordonner(mot) alors mots_tries <- mots_tries+mot+'-' Fin si Si long(mots_tries)!=0 alors Ecrire(mots_tries[0:len(mots_tries)-1]) Sinon Ecrire('Aucun mot trie dans la chaine') Finsi Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
mot | chaine |
mots_tries | chaine |
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 |
def verif(ch): if (0<len(ch)<=30) and (ch[0]!=' ') and (ch.find(' ')==-1) and (ch[len(ch)-1]=='.'): i=0 while (i<len(ch)-2) and (((ch[i].upper()>='A') and (ch[i].upper()<='Z')) or ch[i]==' ') : i=i+1 if (ch[i].upper()>='A') and (ch[i].upper()<='Z') : return True else: return False else: return False def saisir(): ch=input('donner des mots separes par un seul espace et se termine par . : ') while verif(ch)==False : ch=input('donner des mots separes par un seul espace et se termine par . : ') return ch def ordonner(mot): i=0 while (i<len(mot)-2) and (mot[i]<=mot[i+1]) : i=i+1 return mot[i]<=mot[i+1] def traitement(ch): mot='' mots_tries='' for i in range(len(ch)-1): if ch[i]!=' ': mot=mot+ch[i] else: if (ordonner(mot)) and (mots_tries.find(mot)==-1): mots_tries=mots_tries+mot+'-' mot='' if ordonner(mot): mots_tries=mots_tries+mot+'-' if len(mots_tries)!=0: print(mots_tries[0:len(mots_tries)-1]) else: print('Aucun mot trie dans la chaine') #programme principal ch=saisir() traitement(ch) |
Exécution du programme :
Pour créer une application en Python et Designer QT afin de de saisir une chaîne de caractères Ch et d’afficher sans redondance ses mots qui sont triés selon l’ordre alphabétique, séparés par le caractère "-", on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLabel
nommé 'msg' pour afficher les messages générés par le programme
QLineEdit
nommé 'ch' pour entrer une chaîne des caractères.
QPushButton
nommé 'afficher_bt' pour chercher et afficher sans redondance ses mots qui sont triés selon l’ordre alphabétique, séparés par le caractère "-"
Enregistrez le fichier avec l'extension .ui
, par exemple bac-pratique-5-interface.ui.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 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication app = QApplication([]) windows = loadUi ("bac-pratique-5-interface.ui") def verif(ch): if (0<len(ch)<=30) and (ch[0]!=' ') and (ch.find(' ')==-1) and (ch[len(ch)-1]=='.'): i=0 while (i<len(ch)-2) and (((ch[i].upper()>='A') and (ch[i].upper()<='Z')) or ch[i]==' ') : i=i+1 if (ch[i].upper()>='A') and (ch[i].upper()<='Z') : return True else: return False else: return False def ordonner(mot): i=0 while (i<len(mot)-2) and (mot[i]<=mot[i+1]) : i=i+1 return mot[i]<=mot[i+1] def play(): windows.msg.clear() ch =windows.ch.text() if verif(ch) : mot='' mots_tries='' for i in range(len(ch)-1): if ch[i]!=' ': mot=mot+ch[i] else: if ordonner(mot) and (mots_tries.find(mot)==-1): mots_tries=mots_tries+mot+'-' mot='' if ordonner(mot): mots_tries=mots_tries+mot+'-' if len(mots_tries)!=0: windows.msg.setText(mots_tries[0:len(mots_tries)-1]) else: windows.msg.setText('Aucun mot trie dans la chaine') else: windows.msg.setText('Veuillez saisir une chaine valide !') windows.afficher_bt.clicked.connect(play) windows.show() app.exec_() |
Exécution du programme
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